Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 套接字中缓冲区大小的用途是什么?_Linux_Sockets - Fatal编程技术网

Linux 套接字中缓冲区大小的用途是什么?

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命令的实现。在这一点上,我有一个疑问。问题是

我知道套接字缓冲区用于在套接字中一次传输多少字节。 但是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


谁能解释一下。

ping请求只使用/需要72字节的数据。这在300缓冲区大小(限制)和400字节数据包大小之间。ICMP数据包可能包含64个数据字节和8个报头字节,从而形成一个72字节的数据包


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

ping请求只使用/需要72字节的数据。这在300缓冲区大小(限制)和400字节数据包大小之间。ICMP数据包可能包含64个数据字节和8个报头字节,从而形成一个72字节的数据包

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