Linux 套接字中缓冲区大小的用途是什么?
我正在学习ping命令的实现。在这一点上,我有一个疑问。问题是 我知道套接字缓冲区用于在套接字中一次传输多少字节。 但是ping命令是如何管理套接字缓冲区大小的Linux 套接字中缓冲区大小的用途是什么?,linux,sockets,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 (trunc
$ 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
谁能解释一下。ping请求只使用/需要72字节的数据。这在300缓冲区大小(限制)和400字节数据包大小之间。ICMP数据包可能包含64个数据字节和8个报头字节,从而形成一个72字节的数据包
由于ICMP数据包只需要72字节,因此不会添加不必要的数据以满足400字节的数据包大小。ping请求只使用/需要72字节的数据。这在300缓冲区大小(限制)和400字节数据包大小之间。ICMP数据包可能包含64个数据字节和8个报头字节,从而形成一个72字节的数据包 由于ICMP数据包只需要72字节,因此它不会添加不必要的数据来满足400字节的数据包大小