CubicLouve

Spring_MTの技術ブログ

MTUについて

MTUとは

MTUは最大転送単位(Maximum Transmission Unit)

MTUはデータリンク層(L2)の性質となる。

RFC 791: Internet Protocol

データリンク層での最大のフレーム長(データリンク層のパケットを表すときにはフレームが使われる。)

MTUはデータリンク層での性質なので、IP層(L3)のヘッダーまでを含んでいる。

IPはデータリンクの上位層なので、MTUを隠蔽する役割を持つ。

そこで、データリンクを司るルーターなどはMTUに応じてIPデータグラムを分割する(IP fragmentation フラグメンテーション)。 (データグラムはIPなどのネットワーク層以上でのパケット単位のデータ構造を持つプロトコルで利用される表現)

IPヘッダーには分割されたパケットを管理するためのフラグがある。

https://packetpushers.net/wp-content/uploads/2019/11/IPv4-Headers-Standard-Fragmentation-Highlighted.png

分割された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によって分割されたデータを再構築している

参考文献

インターネット用語1分解説~MTUとは~ - JPNIC

https://www.cloudflare.com/ja-jp/learning/network-layer/what-is-mtu/

【図解】MTUとMSS, パケット分割の考え方 ~IPフラグメンテーションとTCPセグメンテーション~ | SEの道標

MTUの最適値を調べる方法 | server-memo.net