TcpClient.ReceiveBufferSize会影响基础帧大小吗?

时间:2018-05-18 15:22:35

标签: .net tcp network-programming buffer tcpclient

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

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

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

根据Microsoft Docs ...

  

ReceiveBufferSize属性获取或设置您希望在每个读取操作的接收缓冲区中存储的字节数。此属性实际上操纵分配用于接收传入数据的网络缓冲区空间。

这没什么帮助。

1 个答案:

答案 0 :(得分:2)

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