目次

Top#ネットワークの基礎知識に戻る

MTUとMSSで、パケットサイズを指定



MTUとMSSの概要

WANなどで、どこかの経路がMTUが小さい場合に、MTUを設定してあげる必要があります。

      MSS設定
       Fa0/0
[端末]--->[NW機器]---internet--->[NW機器]----->[端末]
               Fa0/1
               MTU設定

MTUはNW機器で調整しますが、MSSは端末同士で調整します。

変更が必要な例


MTUとは

イーサーネットのMTUは、デフォルトでMTU=1500バイト
フレッツ網のMTUは、1454バイト
IPフラグメンテーション
WindowsでMTU確認

C:\>netsh interface ipv4 show interface

Idx     Met         MTU          状態                 名前
---  ----------  ----------  ------------  ---------------------------
  6          25        1500  connected     イーサネット
 13          25        1500  disconnected  ローカル エリア接続* 3
 23          65        1500  disconnected  Bluetooth ネットワーク接続
 18          25        1500  disconnected  Wi-Fi 2
  1          75  4294967295  connected     Loopback Pseudo-Interface 1
 16          25        1500  connected     VirtualBox Host-Only Network #2
  9          25        1500  disconnected  ローカル エリア接続* 4
 15          35        1500  connected     VMware Network Adapter VMnet1
 21          35        1500  connected     VMware Network Adapter VMnet8
 26          25        1500  connected     VirtualBox Host-Only Network #3


MSSとは

 MSS =  MTU - 40バイト(TCP/IPヘッダー)

 イーサネットの場合
    MSS =  1500バイト - 40バイト(TCP/IPヘッダー) = 1460バイト

TCPセグメンテーション

NW機器でのMSSの設定する理由

TCPの3way Handshakeのときに端末間でTCP MSS値の合意を取るのですが、
NW機器にMSSを指定することにより、NW機器がMSS値を書き換えることができます。
NW機器がMSS値を書き換えることにより、MTUを超えないようにします


小さなMTUを持つ経路を利用する方法

DFとは

DFは、Don't Fragmentの略で、
DF=0なら、パケットを断片化できる。
DF=1なら、パケットを断片化できない。


DF=0(断片化可能)の場合

経路のどこかがMTUが小さくても、ルーターやファイアウォールが、パケットを断片化して送り出してくれるので、
特に問題はありません。


DF=1(断片化不可)の場合

パケットを断片化できないので、断片化できるように処理をしてあげる必要があります。

方法1:3ウェイハンドシェイクのときにMSSを小さくする

一般的な方法です。

3ウェイハンドシェイクのTCPオプションヘッダーに含まれるMSS値を小さい値に書き換え、
セグメントサイズが出口のインターフェイスのMTUを超えないようにします。


方法2:ICMPでMTUを教えてもらう


方法3:DFビットを書き換える


ping結果からMTUサイズを確認する方法

pingが成功したping成功最大値 + 8(ICMPヘッダ)+ 20(IPヘッダ)がMTUサイズになります。
1438まで成功し、1439でエラーになった場合、MTUサイズは、1466bytesです。

pingのオプション

    -l サイズ      送信バッファーのサイズです。
    -f             パケット内の Don't Fragment フラグを設定します (IPv4 のみ)。
    -n 要求数      送信するエコー要求の数です。

pingの実行例

ping -f -l 1472 -n 1 x.x.x.x  #OK
ping -f -l 1473 -n 1 x.x.x.x  #NG

MTUサイズは、1472 + 8 + 20 = 1500bytes
「1472(データ・サイズ)+8(ICMPヘッダ)+20(IPヘッダ)=1500bytes」
ping -f -l 1438 -n 1 x.x.x.x  #OK
ping -f -l 1439 -n 1 x.x.x.x  #NG
MTUサイズは、1438 + 8 + 20 = 1466bytes
「1438(データ・サイズ)+8(ICMPヘッダ)+20(IPヘッダ)=1466bytes」

http://www.atmarkit.co.jp/ait/articles/0512/17/news017.html


MTUとMSSの設定例

Cisco

Router(config)#interface FastEthernet 0/0
Router(config-if)#ip tcp adjust-mss 1414

Router(config)#interface FastEthernet 0/1
Router(config-if)#ip mtu 1448


Junos

# set security flow tcp-mss ipsec-vpn mss 1350

- When the traffic uses the MPLS link, the SYN/ACK in the TCP handshake has the MSS value set to 1350, which matches the setting on SRX1 and SRX2

- When the traffic uses the internet-based VPN, the SYN/ACK in the TCP handshake keeps the original MSS value set by the app client of 1460




参考




knowledge