了解TCP中的缓冲

时间:2017-03-17 12:31:37

标签: java tcp buffer

我在Java中编写一个tcp客户端,它应该从某个服务器接收数据。

据我所知,如果客户端无法处理来自服务器OS的传入数据,则开始缓冲数据。但如果缓冲区已满,会发生什么?这种行为是可配置的吗?

我的意思是我想要限制服务器数据流,直到客户端可以处理数据,这样它就不会丢失。有可能吗?

1 个答案:

答案 0 :(得分:1)

您所描述的称为TCP窗口。

有一个很好的解释here

摘录:

  

在讨论TCP Windows时,我们通常指的是TCP接收窗口。简而言之,TCP接收窗口是TCP连接两侧的缓冲区,用于临时保存传入数据。此缓冲区中的数据将发送到应用程序,从而为传入数据腾出更多空间。如果此缓冲区填满,数据接收方将提醒发送方,在清除缓冲区之前不能再接收数据。还有几个细节,这是基本功能。设备在TCP标头信息中公布其TCP窗口的当前大小。

可以通过关闭窗口来限制流,尽管您可以轻松地停止从缓冲区读取并让协议完成其工作。

某些消息传递产品通过使用辅助缓冲区来管理这一点,以最大限度地减少数据溢出的影响。这些产品大多数主要是UDP广播/多播。但在某种程度上,如果您的客户无法跟上,您将遇到问题。