前のエントリーでping監視の1行コマンドを書きましたが、pingコマンドのオプションで気になったことをメモ。
まず、「-s 1」で1バイトのパケットを投げてるのに、どうして
9 bytes from 192.168.0.1: icmp_seq=0 ttl=255
みたいなレスポンスが帰ってくるかっていうと、「8バイトのICMPヘッダと1バイトのパケットの合計」なので、辻褄があうのです。試しに1バイトのパケットを投げたときの出力結果と8バイトのパケットを投げたときの出力結果を比較してみましょう。
■ 1バイトのパケットを投げたとき
$ ping -c 1 -s 1 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 1(29) bytes of data.
9 bytes from 192.168.0.1: icmp_seq=0 ttl=255
--- 192.168.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
, pipe 2
■ 8バイトのパケットを投げたとき
$ ping -c 1 -s 8 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 8(36) bytes of data.
16 bytes from 192.168.0.1: icmp_seq=0 ttl=255 time=0.552 ms
--- 192.168.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.552/0.552/0.552/0.000 ms, pipe 2
このように、自分が投げたパケットサイズにプラスして、8バイトのヘッダがくっつくのです。
あと、jmanのping(8)の項目を見て思ったのですが、
- > -s packetsize
- >
何バイトのデータが送られるかを指定する。デフォルトは 56 で、
ICMP
ヘッダの 8 バイトを加えて、 - > 64 バイトの
ICMP
データになる。
スーパーユーザーだけがこのオプションを使用できる。
ってあるんだけど、rootじゃないのにこのオプション使えてるのです。どーでもいーっちゃいーんだけど気になったので、
手元の端末でmanを見てみた。
$ man ping
(中略)
> -s packetsize
> Specifies the number of data bytes to be sent. The default is 56, which translates into 64 ICMP data bytes when combined with
> the 8 bytes of ICMP header data.
とだけ書いてあるので、特にスーパーユーザーでないとこのオプションが使えないってわけじゃないのかなーと。
ちなみに、(っ´∀`)っ ゃーのマシンにインストールされているpingのバージョンは
$ ping -V
ping utility, iputils-ss020927
で、pingコマンドが含まれているパッケージ「iputils」のバージョンは
$ rpm -q iputils
iputils-20020927-19.EL4.5
です。