- 上面小节中讲到了发送窗口。在
TCP
中,两端其实都维护着窗口:分别为发送端窗口和接收端窗口。 - 发送端窗口包含已发送但未收到应答的数据和可以发送但是未发送的数据
- 发送端窗口是由接收窗口剩余大小决定的。接收方会把当前接收窗口的剩余大小写入应答报文,发送端收到应答后根据该值和当前网络拥塞情况设置发送窗口的大小,所以发送窗口的大小是不断变化的。
- 当发送端接收到应答报文后,会随之将窗口进行滑动
滑动窗口是一个很重要的概念,它帮助
TCP
实现了流量控制的功能。接收方通过报文告知发送方还可以发送多少数据,从而保证接收方能够来得及接收数据,防止出现接收方带宽已满,但是发送方还一直发送数据的情况
Zero 窗口
在发送报文的过程中,可能会遇到对端出现零窗口的情况。在该情况下,发送端会停止发送数据,并启动
persistent timer
。该定时器会定时发送请求给对端,让对端告知窗口大小。在重试次数超过一定次数后,可能会中断TCP
链接