TCP的零窗口探测机制
字数 739 2025-11-07 12:33:56
TCP的零窗口探测机制
描述:
TCP的流量控制机制通过接收方通告的窗口大小(Window Size)来限制发送方的数据发送量。当接收方缓冲区已满时,其通告的窗口大小可能变为0,此时发送方必须暂停发送数据。但若接收方缓冲区恢复空闲后,如何通知发送方重新开始发送数据?零窗口探测(Zero Window Probing)机制解决了这一问题:当发送方检测到接收方窗口为0时,会定期发送探测报文,询问窗口是否已恢复。
详细过程:
-
零窗口的触发
- 接收方因缓冲区不足,在发送给发送方的TCP报文段中将窗口字段设为0。
- 发送方收到零窗口通告后,立即停止发送数据(除了探测报文),并启动持续计时器(Persist Timer)。
-
探测报文的发送
- 持续计时器超时后,发送方会生成一个零窗口探测报文(1字节数据段或空报文段,序列号为下一个待发送数据的起始位置)。
- 探测报文携带当前序列号,即使接收方窗口仍为0,也不会丢弃该报文(TCP要求必须响应窗口更新)。
-
接收方的响应
- 若接收方窗口仍为0,则回复一个窗口更新报文,其中窗口字段依然为0。
- 若接收方缓冲区已释放空间,则回复的窗口字段更新为非零值,发送方据此恢复数据传输。
-
探测间隔的调整
- 若多次探测后窗口仍为0,TCP会采用指数退避策略延长探测间隔(例如每次加倍超时时间),避免过多无效报文占用网络资源。
-
异常处理
- 若探测报文丢失,持续计时器会再次超时并重发探测,确保可靠性。
- 若接收方崩溃或无响应,发送方在重试多次后会断开连接。
关键点:
- 探测报文仅包含1字节数据(或空数据),确保即使窗口为0也能被接收方处理。
- 窗口更新无需确认,若丢失则由后续探测触发重新通知。
- 该机制与拥塞控制独立,仅解决流量控制的“死锁”问题。