2017-03-17 108 views
2

我正在用Java编写一个应该从某个服务器接收数据的tcp客户端。了解TCP中的缓冲

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

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

+3

当接收窗口已满时,客户端将停止发送ACK数据包,然后服务器负责重传(但是如果超时,则数据丢失)。 –

+0

@ElliottFrisch所以它的协议处理。好的,我知道了。但你的意思是什么超时?服务器端的ACK超时? –

+0

@ St.Antario:如果在TCP连接的特定时间内没有任何交换,则连接可以关闭。 –

回答

1

您的描述称为TCP窗口。

有一个很好的解释here

摘录:

在讨论TCP窗口,我们最经常指的是TCP接收窗口。简而言之,TCP接收窗口是临时保存传入数据的TCP连接的每一侧的缓冲区。该缓冲区中的数据被发送到应用程序,为传入数据清除更多空间。如果这个缓冲区填满了,数据的接收者会提醒发送者在清除缓冲区之前不能接收更多的数据。还有几个细节涉及到,那就是基本功能。设备在TCP标头信息中公布当前TCP窗口的大小。

虽然您可以轻松停止从缓冲区中读取数据并让协议完成其工作,但可以通过关闭窗口来限制数据流。

某些消息传递产品通过使用辅助缓冲区来管理这种情况,以最大限度地减少数据超限带来的影响。尽管这些产品大多数主要是UDP广播/多播。尽管如此,如果你的客户跟不上,你会遇到问题。