MTU値より大きいサイズのフレームをL2スイッチが受信した時の挙動

明けましておめでとうございます。

昨年、パケットフォーマットの質問をさせていただきました。
今度はMTUに関して疑問が湧いてきましたので
よろしくお願いいたします。

L2スイッチ(以下、スイッチ)が、自身に設定されたMTU値よりも
大きいサイズのフレームを受信した時の挙動、に関するものです。

■ルータとスイッチがメタルケーブルで接続されている
 物理構成を例にして質問させていただきたいと思います。

 ルータ側IFは、ギガビットイーサネットで1000Mbps/Full固定設定。
 スイッチ側IFも、ギガビットイーサネットで1000Mbps/Full固定設定。
 →ルータもスイッチもオートネゴはオフで、1000Mbps/Fullでリンクアップしている。

 ルータはジャンボフレームに対応できるようMTUを2000バイトに設定し、
 スイッチは、MTU1500バイトと設定している。

 この場合、ルータがスイッチに2000バイトのフレームを転送すると、
 スイッチは下記A~Eのどのような挙動を起こすか、ご教授いただけないでしょうか。
 ※Eの場合は、動作のご説明をお願いいたします。

 A)スイッチは破棄するだけ
 B)スイッチは受信したパケットを分割して転送(スイッチング)する
 C)そもそもルータが2000バイトのフレームをスイッチへ転送できない
 D)スイッチは破棄すると同時にICMPで「分割が必要」と送信元に伝える
 E)その他

 ※今の私の理解では、
  Aが一番可能性が高そうで、その次がB。
  Cは多分ないだろうと感じていて、Dはありえないと理解しております。

■すっきりと理解できていないと自分で思うこと
 そもそもMTU値とは、Ethernet、ISDN、ATM、SONETなどの物理IF(L2・L1)の
 メディアごとに最大のIPパケット長(L3情報)を定義しているものだと思います。

 つまり直接的に制御できるのはL3レベル(IP)でのパケット長である。
 L3レベルのIPパケット長を調節することによって、間接的にL2・L1の物理メディア
 に適応した最大フレーム長を設定している、と思うのですが
 このあたりの理解がふらふらしているので、すっきり理解できないのだと
 感じております。

■いろいろなサイトや書籍にて、
 「MTU値をオーバーしたフレームを受信するとルータは、そのフレームを破棄し、
  ICMPでフラグメントが必要だと送信側に伝える」

 というような説明(ルータだとどのように動作するか)は色々見つけられましたが、
 じゃあ、L2スイッチの場合だとどうなるの?を説明しているのを
 見つけられなかったのがご質問させて頂きたく思った理由です。

よろしくお願いいたします。

名前: 
ネットワーク屋
日時: 
10/01/13 23:39

コメント

ネットワーク屋さん、こんにちわ。

次の二つの疑問点が混在している感じですね。
(1)そもそもMTUとは何か?
(2)MTUを超えるパケットの送受信はどうなるのか?

まず、(1)から行きましょうか。
MTUっていうのは、TCP/IPの世界で作られた言葉(多分)で、
物理的なパケットの中に格納できるIPパケットの最大長を表すものですね。
たとえば通常のイーサネットの場合だったら、
イーサネットパケットのデータ部分にそのままIPパケットを格納しますから、
MTUはイーサネットパケットのデータ部分(ペイロードって言った方がわかりやすいかな?)
の最大値と一致し、1500バイトということになります。
この考え方は他の通信技術にも当てはまります。
ペイロード部分の最大値はLANや通信回線の仕様によって決まっていますから、
LANや通信回線によって、MTUは自ずと決まるとも言えるわけです。

なお、1500バイトを超えるイーサネットはジャンボフレームという特別なもので、
設定でペイロード部分の最大値を決めることができます。
(メーカや機種によって最大値は違います。)

また、カプセル化技術を使う場合にはペイロード部分にそのままIPパケットを格納するのではなく、
カプセル化用のヘッダとIPパケットをペイロード部分に格納します。
その場合は、カプセル化のヘッダとIPパケットを合計した値の最大値が
ペイロード部分の最大値と同じになりますから、
カプセル化のヘッダの分だけIPパケットの最大値は小さくなります。

それから、PPPを使う場合は(PPPoEやPOSなども含む)
PPPのネゴシエーションの段階でMTUを調整することができるので、
LANや通信回線のペイロード最大長よりMTUを小さくすることもあります。

いろいろ書きましたけど、
要するに、IPパケットを格納するパケットのペイロード部分の
最大値によってMTUは自ずと決まると考えればいいでしょう。

次に(2)に行きましょう。
こちらは、受信動作を考えてみればわかります。
受信動作は、まず、IPパケットを格納したパケットの受信動作から始まります。
イーサネットにIPパケットを格納する場合は、
まず、イーサネットで受信動作を行い、それが終わったら
パケットのデータ部分からIPパケットを取り出して、
イーサネットからIPプロトコル処理部分に渡す、
という順番で動くのが原則です。

それで、MTUを超える場合はどうなるかというと、
IPパケットを格納したパケットの受信動作がどうなるかを考えてみれば答えは予想できます。
機器に届いたパケットが受信側で想定しているパケット長の最大値を超えているわけですから、
LANや通信回線の受信動作の時点で受信エラーになると考えるのが原則的な考え方じゃないかしら。
この原則的な考え方に従えば、
IPプロトコル処理部分にパケットを渡す前にエラーになってパケットが廃棄される訳ですから、
ICMP(fragment neededかな?)を返すこともないはずです。
もし、ICMPを返すとすれば、
受信側ではなく中継先側のMTUが小さくなっていて、
パケットを中継先に送信できない場合だと思います。

とはいっても、実際の機器がこの原則的な考え方に則って動くとは限りません。
仕様で定めた階層構造と内部の構造は異なることが多いですからね。
つまり、仕様では階層が分かれていても、内部構造は分けずに一緒にする、
なんていうのはよくあることですから、
動きが原則とは少し違うことだって無いとは言えない訳です。
特にエラー処理の場合は、『どうせダメ』なんですから、
多少の違いが実害に結びつくこともないでしょう。
その辺の話はメーカや機種によって違うので、
詳しいところは試してみないとわかりません。

MTUの理解としては、

 L2のデータ・・・フレーム
 L3のデータ・・・パケット

と呼ぶとすると、
まず前提として、各L2のプロトコルには、フレームの最大長
(通常のイーサネットだと1518バイト)が規定されている。

そして各L2プロトコルのフレームが一番大きいサイズの時の
ペイロード部分がMTUとなる。

と考えるわけですね。
L2を起点にしてL3(MTU)を捉える。

このように考えるとトンネル用のIPヘッダが重ねられていても
すんなりと理解できますね。ありがとうございます。

MTUを超えるデータの受信動作に関しては、
ご回答頂いた内容を読ませて頂き、改めて考えてみると
スイッチはフレームを破棄するだけ、になる気がしてきました。

ジャンボフレームでない通常のフレームであれば、スイッチは
受信して、MACヘッダを見て、MACテーブルを参照して、転送する
といった動作だと思いますが、
先の質問で例とさせて頂いた構成で考えますと、

 そもそも前提に違反してるでしょ。
 だからスイッチは破棄する。

という動作になるのが自然な感じです。
スイッチなのでIP層に処理が渡されないので、
当然スイッチがICMPメッセージを送ることもない。

戸根先生のご説明された通りの原則から考えると、
そのように思えてきました。

実際にスイッチがそのように動作するかどうかは「?」という点は
ありますが、考え方としてはこれが妥当だと思えるようになりました。

ありがとうございました。