MTU値とMSS値の確認方法についてなどの個人的なまとめになります。
◆そもそもMTU (Maximum Transmission Unit)とは
IPヘッダを含めた最大サイズ(バイト数)のことで、一回の通信に転送可能な
IPデータグラムサイズのことです。
◆そもそもMSS( Maximum Segment Size)とは
TCPで通信する際に受信可能なセグメントの最大長のことを言います。
MTUからTCP/IPヘッダ(40byte)をマイナスした値で常に
「MSS = MTU – 40byte(IPヘッダ20byte + TCPヘッダ20byte)」となります。
通常MSS値は、TCP の 3way Handshake のときに端末間で MSS 値を通知
しあい決定します。環境によって調整が必要な場合は、NW機器(ルータなど)
がMSS 値を調整します。
◆MTU値の確認方法について
下記に端末のDOSプロンプトからの確認方法を記載します。
・構文
ping <オプション> <宛先IPアドレス>
・オプション
-f ・・・・・DF(Don’t Fragment)bitがオンにする
-l <サイズ> ・・・・・mtu値の指定(bytes)
-n <実行回数>・・・・・実行回数
◆構文例
DF(Don’t Fragment)bit → オン
mtu値 → 1472bytes
実行回数 → 3
ping -f -l 1472 -n 3 192.168.0.254
※ping応答が正常にあった場合、1500bytes はフラグメント化されない
MTU値となる。
※1472bytes(指定したMTU値)+8bytes(ICMPヘッダ)+20bytes(IPヘッダ)
=1500bytes
MTU値を確認するには、調査mtu値を変えながら、-fオプションを
指定したpingコマンドを実行する。
◆確認方法の例
ping -f -l 1309 -n 3 192.168.0.254
パケットの断片化が必要ですが、DF が設定されています。
→フラグメント化が必要なため、MTU値1337bytes(1309bytes+28bytes)は
最適なMTU値ではない。
ping -f -l 1308 -n 3 192.168.0.254
192.168.0.254 からの応答: バイト数 =1308 時間 =1ms TTL=64
→ping応答あり。
1337bytes(1309bytes+28bytes)がフラグメント化が必要でかつ、
1336bytes(1308bytes+28bytes)はping応答あり(フラグメント化不要)の
結果から、このネットワークの最適なMTU値は
1336bytes(1308bytes+28bytes)となる。