“unix网络编程”中有一段说:
我无法想象“浪费潜在的缓冲区空间”是如何发生的。为什么浪费?
如果缓冲区大小不是MSS的偶数倍,会发生什么?
有人可以帮我解释一下吗?还是有人可以提供示例或方案?
最佳答案
大多数数据包具有最大段大小(MSS)。因此,缓冲区将倾向于以MSS的倍数累积数据。如果剩余缓冲区空间小于MSS(当缓冲区不是MSS的整数倍时会发生),则将没有空间可容纳另一个完整大小的数据包。在这种情况下,避免傻窗口综合症的算法使接收者通告0窗口,关闭数据接收,直到再次有足够的空间来容纳MSS,并导致“浪费”了额外的缓冲区空间。
请注意,根据接收方使用数据的方式和发送方使用数据的方式,可能不会完全浪费额外的缓冲区空间。例如,接收者可能会逐渐消耗数据,在这种情况下,与仅是MSS的整数倍的缓冲区相比,额外的空间将导致足够的空间来容纳MSS。类似地,如果发送方逐渐生成数据,则可能会发送较小的数据包,从而导致首先没有在MSS的倍数中接收到数据。在网络限制数据传输速率的情况下,该关注点基本上是效率方面的次要关注点。
关于c - TCP套接字缓冲区的大小也应该是连接的MSS的偶数倍,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26041824/