socket中缓冲区大小的用途是什么?

时间:2016-04-30 08:27:49

标签: linux sockets

我了解ping命令的实现。在那我有一个疑问。怀疑是

我知道套接字缓冲区是指套接字中一次传输多少字节。 但是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 :(得分:0)

ping请求仅使用/需要72个字节的数据。这在300缓冲区大小(限制)和400字节数据包大小范围内。 ICMP数据包可能包含64个数据字节和8个头字节,从而产生72字节的数据包。

由于ICMP数据包只需要72个字节,因此不会添加不必要的数据来满足400字节的数据包大小。