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
オプションには、do
、dont
および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 件のコメント:
コメントを投稿