3. フラグメンテーションとパスMTU探索
-
フラグメンテーションとパスMTU探索
出力リンクで送信するには大きすぎるラベルなしIPデータグラムを受信する可能性があるのと同様に、出力リンクで送信するには大きすぎるラベル付きパケットを受信する可能性があります。
また、元々はそのリンクで送信できるほど小さかった受信パケット(ラベル付きまたはラベルなし)が、ラベルスタックに1つ以上の追加ラベルがプッシュされたために大きすぎるようになる可能性もあります。ラベルスイッチングでは、追加のラベルがプッシュされると、パケットのサイズが大きくなる可能性があります。したがって、1500バイトのフレームペイロードを持つラベル付きパケットを受信し、追加のラベルをプッシュする場合、1504バイトのペイロードを持つフレームとして転送する必要があります。
このセクションでは、「大きすぎる」ラベル付きパケットを処理するためのルールを指定します。特に、Path MTU Discovery [4] を実装するホスト、および IPv6 [7,8] を使用するホストが、ネットワークを通過するときにラベルが付けられたとしても、フラグメンテーションを必要としないIPデータグラムを生成できるようにするルールを提供します。
一般に、Path MTU Discovery [4] を実装していないIPv4ホストは、576バイト以下のIPデータグラムを送信します。現在ほとんどのデータリンクで使用されているMTUは1500バイト以上であるため、このようなデータグラムがラベル付けされたとしても、フラグメンテーションが必要になる可能性は非常に低いです。
Path MTU Discovery [4] を実装していない一部のホストは、IP送信元アドレスと宛先アドレスが同じサブネット上にある限り、1500バイトを含むIPデータグラムを生成します。これらのデータグラムはルーターを通過しないため、フラグメンテーションされません。
残念ながら、一部のホストは、IP送信元アドレスと宛先アドレスが同じクラスフルネットワーク番号を持っている限り、1500バイトを含むIPデータグラムを生成します。これは、このようなデータグラムがラベル付けされたときにフラグメンテーションのリスクがある唯一のケースです。(それでも、パケットが最初にラベル付けされてからラベルが解除されるまでの間に、ある種のイーサネットを通過する必要がない限り、フラグメンテーションが発生する可能性は低いです。)
このドキュメントでは、Path MTU Discoveryを実装していないホストからの大きなデータグラムが、最初にラベル付けされたときに1回だけフラグメンテーションされるようにネットワークを構成できる手順を指定します。これらの手順により(適切な構成を想定)、すでにラベル付けされているパケットをフラグメンテーションする必要を回避できます。
3.1. 用語
特定のデータリンクに関して、次の用語を使用できます。
- フレームペイロード (Frame Payload):
データリンクフレームの内容。データリンク層ヘッダーまたはトレーラー(MACヘッダー、LLCヘッダー、802.1Qヘッダー、PPPヘッダー、フレームチェックシーケンスなど)を除く。
フレームがラベルなしIPデータグラムを伝送している場合、フレームペイロードはIPデータグラムそのものです。フレームがラベル付きIPデータグラムを伝送している場合、フレームペイロードはラベルスタックエントリとIPデータグラムで構成されます。
- 従来の最大フレームペイロードサイズ (Conventional Maximum Frame Payload Size):
データリンク標準で許可されている最大フレームペイロードサイズ。たとえば、イーサネットの従来の最大フレームペイロードサイズは1500バイトです。
- 真の最大フレームペイロードサイズ (True Maximum Frame Payload Size):
データリンクに接続されたインターフェイスハードウェアによって適切に送受信できる最大サイズのフレームペイロード。
イーサネットおよび802.3ネットワークでは、真の最大フレームペイロードサイズは、従来の最大フレームペイロードサイズよりも4〜8バイト大きいと考えられています(802.1Qヘッダーも802.1pヘッダーも存在せず、パケットがネクストホップに転送されている間にスイッチまたはブリッジによってどちらも追加できない限り)。たとえば、ほとんどのイーサネット機器は、イーサネットヘッダーに802.1Qまたは802.1pフィールドがない限り、少なくとも1504バイト、場合によっては1508バイトのペイロードを伝送するパケットを正しく送受信できると考えられています。
PPPリンクでは、真の最大フレームペイロードサイズは事実上無制限である可能性があります。
- ラベル付きパケットの有効最大フレームペイロードサイズ (Effective Maximum Frame Payload Size for Labeled Packets):
これは、データリンク上の機器の機能と使用されているデータリンクヘッダーのサイズに応じて、従来の最大フレームペイロードサイズまたは真の最大フレームペイロードサイズのいずれかです。
- 初期ラベル付きIPデータグラム (Initially Labeled IP Datagram):
特定のLSRでラベルなしIPデータグラムが受信され、LSRがデータグラムを転送する前にラベルをプッシュするとします。このようなデータグラムは、そのLSRで初期ラベル付きIPデータグラムと呼ばれます。
- 以前にラベル付けされたIPデータグラム (Previously Labeled IP Datagram):
特定のLSRによって受信される前にすでにラベル付けされていたIPデータグラム。
3.2. 最大初期ラベル付きIPデータグラムサイズ
以下の機能を持つすべてのLSR:
a) ラベルなしIPデータグラムを受信する、
b) データグラムにラベルスタックを追加する、および
c) 結果のラベル付きパケットを転送する、
は、「最大初期ラベル付きIPデータグラムサイズ」と呼ばれる構成パラメータをサポートする必要があります(SHOULD)。このパラメータは非負の値に設定できます。
この構成パラメータがゼロに設定されている場合、効果はありません。
正の値に設定されている場合、次のように使用されます。もし:
a) ラベルなしIPデータグラムが受信され、かつ
b) そのデータグラムのIPヘッダーにDFビットが設定されておらず、かつ
c) そのデータグラムは転送される前にラベル付けされる必要があり、かつ
d) データグラムのサイズ(ラベル付け前)がパラメータの値を超えている、
ならば a) データグラムはフラグメントに分割されなければならず、各フラグメントのサイズはパラメータの値以下であり、かつ
b) 各フラグメントはラベル付けされてから転送されなければなりません。
たとえば、この構成パラメータが1488の値に設定されている場合、1488バイトを超えるラベルなしIPデータグラムは、ラベル付けされる前にフラグメンテーションされます。各フラグメントは、ラベルスタックに最大3つのラベルがプッシュされたとしても、それ以上フラグメンテーションすることなく、1500バイトのデータリンクで伝送できます。
つまり、このパラメータを非ゼロ値に設定すると、以前にラベル付けされたIPデータグラムのすべてのフラグメンテーションを排除できますが、初期ラベル付きIPデータグラムの不必要なフラグメンテーションが発生する可能性があります。
このパラメータの設定は、DFビットが設定されているIPデータグラムの処理には影響しないことに注意してください。したがって、Path MTU Discoveryの結果は、このパラメータの設定の影響を受けません。
3.3. ラベル付きIPデータグラムはいつ大きすぎるのか?
サイズが転送先のデータリンクの従来の最大フレームペイロードサイズを超えるラベル付きIPデータグラムは、「大きすぎる」と見なされる場合があります(MAY)。
サイズが転送先のデータリンクの真の最大フレームペイロードサイズを超えるラベル付きIPデータグラムは、「大きすぎる」と見なされなければなりません(MUST)。
「大きすぎない」ラベル付きIPデータグラムは、フラグメンテーションなしで送信されなければなりません(MUST)。
3.4. 大きすぎるラベル付きIPv4データグラムの処理
ラベル付きIPv4データグラムが「大きすぎ」、IPヘッダーにDFビットが設定されていない場合、LSRはデータグラムを静かに破棄する場合があります(MAY)。
このようなデータグラムの破棄は、ラベルスタックをラベルなしIPデータグラムに追加できるネットワーク内のすべてのLSRで「最大初期ラベル付きIPデータグラムサイズ」が非ゼロ値に設定されている場合にのみ、賢明な手順であることに注意してください。
LSRが大きすぎるラベル付きIPv4データグラムを破棄しないことを選択した場合、またはそのデータグラムにDFビットが設定されている場合、次のアルゴリズムを実行する必要があります(MUST)。
1. ラベルスタックエントリを取り除き、IPデータグラムを取得します。
2. Nをラベルスタックのバイト数(つまり、ラベルスタックエントリの数の4倍)とします。
3. IPデータグラムのIPヘッダーに「Don't Fragment」ビットが設定されていない場合:
a. フラグメントに変換します。各フラグメントは、有効最大フレームペイロードサイズより少なくともNバイト小さくする必要があります(MUST)。
b. 各フラグメントの前に、フラグメンテーションが必要なかった場合に元のデータグラムにあったのと同じラベルヘッダーを付加します。
c. フラグメントを転送します
4. IPデータグラムのIPヘッダーに「Don't Fragment」ビットが設定されている場合:
a. データグラムを転送してはなりません(MUST NOT)
b. ICMP宛先到達不能メッセージを作成します。
i. コードフィールド[3]を「フラグメンテーションが必要でDFが設定されている」(Fragmentation Required and DF Set)に設定し、
ii. ネクストホップMTUフィールド[4]を、有効最大フレームペイロードサイズとNの値の差に設定します
c. 可能であれば、ICMP宛先到達不能メッセージを破棄されたデータグラムの送信元に送信します。
3.5. 大きすぎるラベル付きIPv6データグラムの処理
大きすぎるラベル付きIPv6データグラムを処理するには、LSRは次のアルゴリズムを実行する必要があります(MUST)。
1. ラベルスタックエントリを取り除き、IPデータグラムを取得します。
2. Nをラベルスタックのバイト数(つまり、ラベルスタックエントリの数の4倍)とします。
3. IPデータグラムに1280オクテットを超えるデータが含まれている場合(ラベルスタックエントリを数えない)、またはフラグメントヘッダーが含まれていない場合は、次のようになります。
a. ICMPパケット過大メッセージ(Packet Too Big Message)を作成し、そのネクストホップMTUフィールドを有効最大フレームペイロードサイズとNの値の差に設定します
b. 可能であれば、ICMPパケット過大メッセージをデータグラムの送信元に送信します。
c. ラベル付きIPv6データグラムを破棄します。
4. IPデータグラムが1280オクテット以下で、フラグメントヘッダーが含まれている場合、
a. フラグメントに変換します。各フラグメントは、有効最大フレームペイロードサイズより少なくともNバイト小さくする必要があります(MUST)。
b. 各フラグメントの前に、フラグメンテーションが必要なかった場合に元のデータグラムにあったのと同じラベルヘッダーを付加します。
c. フラグメントを転送します。
フラグメントの再構成は、宛先ホストで行われます。
3.6. パスMTU探索に関する影響
DFビットが設定されているが「大きすぎる」データグラムを処理するための上記の手順は、RFC 1191 [4] のPath MTU Discovery手順に影響を与えます。これらの手順を実装するホストは、フラグメンテーションを必要とせずにn個のラベルをデータグラムにプッシュできるほど小さいMTUを検出します。ここで、nは現在使用中のパスに沿って実際にプッシュされるラベルの数です。
つまり、Path MTU Discoveryを使用するホストからのデータグラムは、ラベルヘッダーを付けたり、既存のラベルヘッダーに新しいラベルを追加したりする必要があるためにフラグメンテーションされる必要はありません。(また、Path MTU Discoveryを使用するホストからのデータグラムには通常DFビットが設定されているため、いずれにしてもフラグメンテーションされません。)
Path MTU Discoveryは、ラベル付きIPデータグラムのフラグメンテーションが発生する必要があるポイントで、ICMP宛先到達不能メッセージをパケットの送信元アドレスにルーティングできる場合にのみ適切に機能することに注意してください。セクション2.3を参照してください。
MPLS「トンネル」内からICMPメッセージをパケットの送信元アドレスに転送できないが、ネットワーク構成により、トンネルの送信側のLSRが、トンネルを通過する必要があるが大きすぎてトンネルをフラグメンテーションなしで通過できないパケットを受信できる場合:
- トンネルの送信側のLSRは、トンネル全体のMTUを決定できなければなりません(MUST)。これは、トンネルを介してトンネルの受信エンドポイントにパケットを送信し、それらのパケットでPath MTU Discoveryを実行することで実行できます(MAY)。
- トンネルの送信エンドポイントがトンネルにパケットを送信する必要があり、そのパケットにDFビットが設定されており、トンネルMTUを超えている場合、トンネルの送信エンドポイントは、コード「フラグメンテーションが必要でDFが設定されている」でICMP宛先到達不能メッセージを送信元に送信し、ネクストホップMTUフィールドを上記のように設定する必要があります(MUST)。