返信

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

次の二つの疑問点が混在している感じですね。
(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が小さくなっていて、
パケットを中継先に送信できない場合だと思います。

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

<code>Only

  • 使用できるHTMLタグ: <code>
  • 文字で図を描く場合に<code>と</code>で囲んでください
画像認証
機械的なスパムメッセージ送信を防止するために画像認証を設けています。ご協力ください。
Image CAPTCHA
Enter the characters shown in the image.