MTUについて
MTUとは
MTUは最大転送単位(Maximum Transmission Unit)
MTUはデータリンク層(L2)の性質となる。
データリンク層での最大のフレーム長(データリンク層のパケットを表すときにはフレームが使われる。)
MTUはデータリンク層での性質なので、IP層(L3)のヘッダーまでを含んでいる。
IPはデータリンクの上位層なので、MTUを隠蔽する役割を持つ。
そこで、データリンクを司るルーターなどはMTUに応じてIPデータグラムを分割する(IP fragmentation フラグメンテーション)。 (データグラムはIPなどのネットワーク層以上でのパケット単位のデータ構造を持つプロトコルで利用される表現)
IPヘッダーには分割されたパケットを管理するためのフラグがある。
分割されたIPデータグラムを元のIPデータグラムに戻す再構築の処理は終点の宛先ホストでのみ行われる。
TCPの場合
トランスポート層(L4)でTCPを使う場合、一度にTCPで含められるアプリケーションデータのサイズは、MTUからIPヘッダー(20バイト)とTCPヘッダー(20バイトとオプションがあると60バイトまで増える)を除いたバイト数となる。
このサイズをMSS(Mazimum Segment Size 最大セグメント長)と呼ぶ。(セグメントはTCPに含まれるデータの表すときに使う)
TCPでは3ウェイ・ハンドシェイクのときに、コネクション確立要求を送るときに、送信側、受信側ともに自身のMSSを通知し、小さいMSSを採用する。
MSSに沿って、データを区切って送信されるため、IPでの分割は行わず、TCP側で再構築をする。
再送処理はMSS単位で行われる。
手元でWireSharkで確認してみた例
MSSを相互に通知している様子
MSSによって分割されたデータを再構築している
参考文献
https://www.cloudflare.com/ja-jp/learning/network-layer/what-is-mtu/