gpt4 book ai didi

c - TCP 套接字缓冲区大小也应该是连接 MSS 的偶数倍

转载 作者:可可西里 更新时间:2023-11-01 02:42:44 24 4
gpt4 key购买 nike

《unix网络编程》中有一段话是这样说的:

To avoid wasting potential buffer space, the TCP socket buffer sizes should also be an even multiple of the MSS for the connection. Some implementations handle this detail for the application, rounding up the socket buffer size after the connection is established (p. 902 of TCPv2). This is another reason to set these two socket options before establishing a connection. For example, using the default 4.4BSD size of 8,192 and assuming an Ethernet with an MSS of 1,460, both socket buffers are rounded up to 8,760 (6 x 1,460) when the connection is established. This is not a crucial requirement; the additional space in the socket buffer above the multiple of the MSS is simply unused.

我无法想象“浪费潜在的缓冲空间”是如何发生的。为什么要浪费
如果缓冲区大小不是 MSS 的偶数倍会怎样?
有人可以帮我解释一下吗?或者有人可以提供示例或场景吗?

最佳答案

大多数数据包都具有最大段大小 (MSS)。因此,缓冲区将倾向于以 MSS 的倍数累积数据。如果剩余缓冲区空间小于 MSS(当缓冲区不是 MSS 的整数倍时会发生这种情况),则将没有空间用于另一个全尺寸数据包。在这种情况下,避免愚蠢窗口综合症的算法让接收器通告一个 0 窗口,关闭数据接收,直到有足够的空间再次可用于容纳 MSS,并导致额外的缓冲区空间被“浪费”。

请注意,根据接收方消费数据和发送方生产数据的模式,额外的缓冲区空间可能不会完全浪费。例如,接收方可能会逐渐使用数据,在这种情况下,额外的空间将导致有足够的空间来容纳 MSS,而不是使用仅是 MSS 的整数倍的缓冲区。类似地,如果发送方逐渐产生数据,则可能会发送较小的数据包,从而导致最初无法以 MSS 的倍数接收数据。在网络限制数据传输速率的情况下,这个问题基本上是次要的效率问题。

关于c - TCP 套接字缓冲区大小也应该是连接 MSS 的偶数倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26041824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com