2007/02/09

Linux上のpingコマンドで経路上のMTUを調べる

@ITの記事『pingでMTUサイズを調査する』と同じことをLinuxでやる方法。つまりは、Linuxのpingコマンドでフラグメント禁止を指定するにはどうすればいいか、ということ。簡単に言うと、-M hintオプションを使用する。まずは、実行結果をご覧あれ。解る人にはこれだけで解るだろう。
$ ping -c 1 -s 1500 192.168.55.7
PING 192.168.55.7 (192.168.55.7) 1500(1528) bytes of data.
1508 bytes from 192.168.55.7 (192.168.55.7): icmp_seq=1 ttl=255 time=4.64 ms

--- 192.168.55.7 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 4.641/4.641/4.641/0.000 ms
$ ping -c 1 -s 1500 -M do 192.168.55.7
PING 192.168.55.7 (192.168.55.7) 1500(1528) bytes of data.
From murakumo (192.168.140.195) icmp_seq=1 Frag needed and DF set (mtu = 1500)

--- 192.168.55.7 ping statistics ---
0 packets transmitted, 0 received, +1 errors

$ ping -c 1 -s 1472 -M do 192.168.55.7
PING 192.168.55.7 (192.168.55.7) 1472(1500) bytes of data.
1480 bytes from 192.168.55.7 (192.168.55.7): icmp_seq=1 ttl=255 time=2.96 ms

--- 192.168.55.7 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 2.963/2.963/2.963/0.000 ms
$
一回目の実行では、-Mオプションを指定していないため、MTUの制限よりも大きいサイズを-sオプションで指定しても応答が返っている。
二回目の実行では、同じサイズで-M doを指定しているので、断片化(フラグメンテーション/fragmentation)が抑制され、応答が返らない。つーか、そもそも送信していない。
最後の実行では、-M doを指定しているが、サイズに適正値を指定しているため、応答が返っている。

この-M hintオプションには、dodontおよびwantが指定できるらしいが、do以外はよく解らない。ならばmanを引け、と言われそうだが、実はFC5のmanpageには、このオプションの記述がない。なぜこのオプションに気付いたかというと、次のように実行したからだ。
$ ping
Usage: ping [-LRUbdfnqrvVaA] [-c count] [-i interval] [-w deadline]
[-p pattern] [-s packetsize] [-t ttl] [-I interface or address]
[-M mtu discovery hint] [-S sndbuf]
[ -T timestamp option ] [ -Q tos ] [hop1 ...] destination
$ ping -M 1
ping: wrong value for -M: do, dont, want are valid ones.
$
なんだかまだ知らないオプションがたくさんありそうだ。

0 件のコメント: