MTUサイズの確認方法

  • 投稿者:
  • 投稿カテゴリー:TCP/IP

MTU(Maximum Transmission Unit)

通信ネットワークにおいて、1回の転送で送信できるデータの最大値を示す値のこと。
送信する側が接続ごとに値を設定できる。
送信側ホストが受信側ホストより大きいMTUを持っていた場合は、送信側が受信側のMTUに従ってデータを再分割して送信する。

単位はバイトで、Ethernetでは1500程度、電話回線によるダイヤルアップ接続では576程度が最適とされる。
http://e-words.jp/w/MTU.html

クライアントから計測する

pingのオプション
-l:送信するエコー要求メッセージのデータ・フィールドの長さを指定
-f:IPヘッダー内のDon’t Fragmentフラグを1に設定してエコー要求メッセージを送信する
2013-11-07_175850

データフィールドが1410バイト以上であればフラグメントを起こすことがわかる
送信されるパケット全体について
2013-11-07_181602
プリアンブル:8バイト
MACアドレス:6バイト
type:2バイト
IPヘッダ:最小20バイト
2013-11-07_182713
ICMPメッセージ:データフィールドを除くと、8バイト
2013-11-07_181631
FCS:4バイト

MTU=8+6*2+2+20+8+1410+4=1464
ということにしておく。。

サーバから計測する

【クライアント側】
ping -f -l 1410 -n 1 tech.akat.info

【サーバ側】
root@akat:/home/shimizu# tcpdump -nevvv icmp
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
19:12:35.977056 74:8e:f8:61:74:41 > (サーバMACアドレス), ethertype IPv4 (0x0800), length 1452: (tos 0x0, ttl 115, id 15200, offset 0, flags [DF], proto ICMP (1), length 1438)
(クライアントIPアドレス) > (サーバIPアドレス): ICMP echo request, id 1, seq 34, length 1418
19:12:35.977116 (サーバMACアドレス) > 00:00:5e:00:01:6f, ethertype IPv4 (0x0800), length 1452: (tos 0x0, ttl 64, id 32731, offset 0, flags [none], proto ICMP (1), length 1438)
(サーバIPアドレス) > (クライアントIPアドレス): ICMP echo reply, id 1, seq 34, length 1418

…length 1452 なのは、プリアンブルとFCSを計算していないから?不明…

参考

http://www.atmarkit.co.jp/fwin2k/win2ktips/652pingmtu/pingmtu.html