TcpClient.ReceiveBufferSize 会影响底层帧大小吗?

Does TcpClient.ReceiveBufferSize affect the underlying frame size?

我最初认为这个问题的答案是 "no," 但 Wireshark 似乎证明我错了。

在我们的应用程序中,我们注意到较大的 TcpClient 接收缓冲区大小会导致将多条消息分组到较大的帧中。当我们将接收缓冲区大小减小到 100 字节时,Wireshark 告诉我们我们的消息不再组合在一起,我们从服务器接收到更多、更小的帧。

我的理解是TcpClient在更高层上运行,我们无法控制帧大小。我的理论是微小的缓冲区大小导致 Windows 协商微小的 maximum segment size,这导致每个片段都适合单个帧。我离这里很远吗?

根据Microsoft Docs...

The ReceiveBufferSize property gets or sets the number of bytes that you are expecting to store in the receive buffer for each read operation. This property actually manipulates the network buffer space allocated for receiving incoming data.

这没什么用。

事实证明,较小的缓冲区大小会导致 TCP 连接较小 window size。这个 window 大小被传送到远程机器,所以它会知道它一次可以发送多少数据。所以是的,将缓冲区大小设置为足够小的值将导致远程计算机以较小的块发送数据。