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

MTU と MSS の違い

MTU (Maximum Transmission Unit)

MTU は IP ベースの考え方で、NW 機器やホストが送受信できる、IP ヘッダを含めた最大サイズ(バイト数)のことを言います。

Ethernet の最大サイズが規格上は "1518 Bytes" までであり、Ethernet のヘッダ&FCS を差し引いた "1500 Bytes" が大抵の機器のインタフェースのデフォルト値となっています。

しかし、最近は Jumbo フレームという独自規格が出現しており、9000 Bytes 等の大きいサイズの指定も増えてきています。

Cisco では以下コマンドで MTU 設定が可能です。

[IPv4 の MTU 値設定]

(config-if)# ip mtu 1480

[IPv4 および IPv6 の MTU 値設定]

(config-if)# mtu 1480

MSS (Maximum Segment Size)

MSS は TCP ベースの考え方で、TCP ヘッダを含めない最大サイズ(バイト数)のことを言います。

この設定値は NW 機器にはなく、クライアントやサーバ等のホスト端末に設定が入っています。大抵は MTU の設定に沿って、IP と TCP のヘッダ 40 Bytes 分を差し引いた、"1460 Bytes"になっています。

IP フラグメンテーションと TCP セグメンテーションの違い

IP フラグメンテーション (NW 機器の仕事)

これはルータなどの NW 機器が行う作業で、IP ベース、MTU ベースでの分割作業になります。NW 機器の MTU に従って分割されます。なので UDP でも有効です。

ただし、NW 機器側でもホスト側でも分割/再構成の処理が走り、効率が悪くなります。そのため現在はほとんど使われていない機能です(Path MTU Discovery が基本となり、OS 等の設定で、パケット分割を禁止する「DF bit」が有効になっているため)。

IP パケットのサイズが、通過する NW 機器のインタフェース上の MTU 値よりも大きい、かつ「DF bit」が 0 の場合、IP フラグメンテーションが行われます。

TCP セグメンテーション (ホスト端末の仕事)

これはクライアントやサーバ等のホスト端末が行う作業で、TCP ベース、MSS ベースでの分割作業になります。MSS 値を超えるデータを TCP 通信に乗っける際には、TCP 1 パケットでは届かないので、端末の MSS 値に従って複数パケットに分割されます。

TCP セグメンテーションさえきっちりやっていれば、IP フラグメンテーションは起こりません。しかし端末は MSS 値NW 機器は MTU 値を各々設定するので、その整合性を取る必要があります。

Cisco ルータであれば、以下コマンドで MSS の調整ができます。また、他のルータでも何かしらのコマンドがあるはずです。

(config-if)# ip tcp adjust-mss 1440

TCP の 3way Handshake のときに端末 ⇔ 端末間で TCP MSS 値を通知し合う (ネゴシエーションではなく、相手に自分の受信できるペイロードサイズを一方的に通知する) のですが、この adjust-mss の設定により、NW 機器が MSS 値を書き換えることができます

TCP は端末同士のやり取りなので、本来 NW 機器は介在すべきでないのですが、これは例外。

上記の例では、経路上の最小 MTU 値が1480 Bytes である想定であり、その場合は TCP ヘッダ 20、IP ヘッダ 20 を差し引いた 1440 が MSS 値として適正となります。

フレッツ回線の場合は L2TP を使っている関係でさらに 46 Bytes も使ってしまうので、1460 - 46 = 1414 が MSS 値として適正になります。

効率の悪い IP フラグメントはなるべく避け、TCP セグメンテーションで対応していこう、という発想が「Path MTU Discovery」を産みました。詳細は以下をご参照下さい。

関連記事

Path MTU Discoveryとは IPv4 においては、パケットサイズが NW 機器のインタフェースの MTU 値を超えた場合、その NW 機器上でパケットを分割して MTU 値以下にする "フラグメンテーション" という機能があ[…]

UDP にはセグメンテーションや MSS の概念はありませんが、Path MTU Discovery は利用可能です。

以下の記事も併せてご参照下さい。

関連記事

前提知識 TCP と MTU/MSS に関する基礎知識については以下をご参照下さい。 [sitecard url=https://milestone-of-se.nesuke.com/nw-basic/grasp-nw/mtu-ms[…]

Wireshark の [TCP segment of a reassembled PDU]

Wireshark でパケットキャプチャをしていると、[TCP segment of a reassembled PDU] と表示されているのをよく見かけると思います。これはまさに前述の TCP セグメンテーションの結果です。

上図で [TCP segment of a reassembled PDU] がたくさん表示されています。そのうちどれか 1 つでよいので、中身を見てみましょう。

上図の例では "No.999"の中身を見ています。その下部にハイパーリンクで [Reassembled PDU in frame: 1000] とあります。これはどういう意味かというと、「No.999 のパケットは、TCP セグメンテーションにより分割されたうちの 1 パケットだよ!No.1000 が最後のパケットだよ!」ということです。

[TCP segment of a Reassembled PDU] 表記のパケットについて、中央ペインで展開して中身を見ると、TCP レイヤーの情報はありますが、その上位層の http レイヤーの結果は表示されません。ですが、最後のパケット (No.1000) にまとめて表示してくれます。

つまり、"No.1000" のパケットを表示すると、そのパケット単体だけでなく、それ以前のセグメンテーションで分割されたパケットも統合して表示してくれるのです。1129 Byte のパケットに、それ以上のたくさんの情報が載っているのが分かります。



IT/インフラエンジニアの地位とスキル向上のために

関連記事

IT 技術の進化はとどまることを知りません。矢継ぎ早に新たな技術が出てきたり、数年前の技術が時代遅れになったりと、IT エンジニアは勉強し続ける運命のようです。 それをどう思うかはあなた次第。 ビジネスの基本は『付加価値を与える[…]

IMG
関連記事

nesuke の考える NW エンジニアの2つの道 ネットワークエンジニアには 2 つの道があります。 1 つはネットワーク構築一筋で、L4 までをひたすらきっちりと構築していく道。 もう 1 つはネットワークを軸として深堀し[…]

IMG