IPフラグメンテーションIPフラグメンテーション[1](英: IP fragmentation)とは、Internet Protocol (IP) におけるデータグラムの断片化であり、MTUが通常のデータグラムのサイズより小さいリンク上でもパケットが転送できるようにする。日本語ではIP分割と呼ぶ資料もある[2]。 概要RFC 791 でIPフラグメンテーションの手続きすなわちデータグラムの転送および再構築について記述している[3]。RFC 815 では単純化した再構築アルゴリズムが記述されている[4]。 IPプロトコルヘッダの「識別子」フィールド、「フラグ」フィールドの「禁止」フラグと「継続」フラグを使用してIPデータグラムのフラグメンテーションと再構築を行う。 IPv4でルーターが次のホップのMTUより大きいPDUを受信した場合、2つの対処法がある。1つは、そのPDUを廃棄し、Packet too Big(パケットが大きすぎる)という条件を設定したICMPメッセージを送信元に返す方法である。もう1つは、IPパケットをフラグメンテーションしてMTUの小さいリンク上に送り出す方法である。IPv6では経路の途中のルータがフラグメンテーションを行うことはできず、パケットを送信する前にパケットの最大サイズをMTUが決定し、それ以下のパケットを送信しなければならない(送出元がフラグメンテーションして送り出すことはできる)。また、IPv6では1280バイト以下のパケットはフラグメンテーションせずに送達可能であることを保証することになっている。 あるホストがフラグメンテーションされたIPパケットを受信した場合、上位層プロトコルに渡す前にデータグラムの再構築を行う必要がある。再構築は一般に受信ホストで行うことになっているが、途中のルーターが再構築することもある。例えばネットワークアドレス変換では、RFC 2993 に記されているようにFTPなどでデータストリームの変換のために再構築する必要にせまられることがある[5]。 フラグメンテーションされたパケットが消失し、上位プロトコルがTCPなどの高信頼プロトコルだった場合、フラグメントの一部が消失しただけなのにデータグラム全体の再送を要求することになるので、再送のオーバーヘッドが大きくなる[6]。そのため、一般にIPデータグラムのサイズを決定するのに2つの方法を使い、フラグメンテーションをなるべく防ごうとする。1つは、送信側で最初のホップのMTUをIPデータグラムのサイズとして使用する方式である。もう1つは、経路MTU探索アルゴリズムを使う方法であり、こちらは RFC 1191 で記述されている[7]。 IPv4 と IPv6 の差異IPv4とIPv6では、フラグメンテーション機構の詳細やフラグメンテーションを含む全体的アーキテクチャが異なる。IPv4ではルーターがフラグメンテーションを行うが、IPv6ではルーターはMTUより大きなパケットは破棄するため前述のように最大サイズをあらかじめ決め、それより小さいパケットを送らなければならない(送出元のみがフラグメンテーションを行える)。なおIPv4とIPv6ではヘッダの形式が異なるが、フラグメンテーションに関するフィールドは良く似ており、フラグメンテーションと再構築のアルゴリズムは流用可能である。 IPv4では、再構築後のIPデータグラムの大きさが576バイト(IPv4の最小MTU)までならベストエフォートで再構築を行う。再構築後のIPデータグラムの大きさが576バイトより大きい場合も再構築するが、そのような大きなデータグラムは何も通知せずに廃棄してもよいことになっている。IPv6ではそのしきい値が1500バイトに増やされている[8]。 脚注
参考文献
関連項目外部リンク |