2016-04-30 6 views
1

私はpingコマンドの実装について学んでいます。それで私は疑いが1つあった。疑いはソケットにバッファサイズを使用するのは何ですか?

私はソケットバッファがソケット内で一度に何バイト転送するのか知っています。 しかし、どのようにpingコマンドがソケットバッファサイズを管理していますか。

$ ping -S 300 -s 400 google.com 
PING google.com (216.58.197.46) 400(428) bytes of data. 
72 bytes from maa03s20-in-f14.1e100.net (216.58.197.46): icmp_req=1 ttl=56 (truncated) 
72 bytes from maa03s20-in-f14.1e100.net (216.58.197.46): icmp_req=2 ttl=56 (truncated) 
72 bytes from maa03s20-in-f14.1e100.net (216.58.197.46): icmp_req=3 ttl=56 (truncated) 
^C 
--- google.com ping statistics --- 
3 packets transmitted, 3 received, 0% packet loss, time 2003ms 
rtt min/avg/max/mdev = 40.231/41.500/42.408/0.924 ms 

上記のpingコマンドでは、ソケットバッファサイズを300、単一パケットサイズを400と指定しました。ソケットバッファサイズは300です。しかし、pingはそのソケット内で一度に400バイトを転送します。どのように可能です。 受信パケットサイズは72だけです。それはなぜ72ですか。

いずれか1つ説明できますか。

答えて

0

ping要求では、72バイトのデータしか使用しませんでした。これはあなたの300のバッファサイズ(限界)と400バイトのパケットサイズの範囲内です。 ICMPパケットには64データバイトと8ヘッダバイトが含まれている可能性があり、その結果72バイトのパケットになります。

ICMPパケットは72バイトしか必要としなかったので、400バイトのパケットサイズを満たすために不要なデータを追加することはありません。

関連する問題