TCP的零窗口探测(Zero Window Probing, ZWP)机制详解
字数 875 2025-11-26 00:32:33
TCP的零窗口探测(Zero Window Probing, ZWP)机制详解
描述
TCP的零窗口探测机制用于解决接收方通告接收窗口(rwnd)为0时,数据传输陷入停滞的问题。当接收方因处理能力不足或缓冲区满而将rwnd设为0,发送方会暂停发送新数据。但若后续接收方窗口恢复(例如缓冲区被清空)后发送的窗口更新报文丢失,双方将永久等待。ZWP通过让发送方主动探测接收方窗口状态来打破这种死锁。
解题过程
-
触发条件
- 发送方收到接收方通告的rwnd=0的ACK报文。
- 此时发送方立即停止发送新数据(除紧急数据外),并启动持续定时器(Persistence Timer)。
-
探测报文发送规则
- 持续定时器超时后,发送方会发送一个零窗口探测报文(长度为1字节的段,序列号为当前已发送但未确认的最小序列号)。
- 该报文强制接收方回应最新窗口大小,即使窗口仍为0也需回复ACK。
- 探测报文的重复发送采用指数退避策略:若首次超时时间为
T,后续超时时间逐次倍增(如2T、4T),上限通常为60秒。
-
接收方响应机制
- 若接收方窗口仍为0,回复的ACK中rwnd=0,发送方重置持续定时器继续等待。
- 若窗口已恢复(rwnd>0),回复的ACK会携带新窗口值,发送方立即恢复数据传输。
-
避免死锁的关键设计
- 坚持定时器保障活性:防止因窗口更新报文丢失导致双方无限等待。
- 1字节探测策略:最小化无效数据传输,同时触发接收方强制响应。
- 退避机制平衡效率:避免频繁探测浪费网络资源。
-
实例说明
- 假设发送方已发送字节1-100,接收方在ACK101中通告rwnd=0。
- 发送方启动持续定时器(如初始值5秒)。
- 5秒后发送方发送序列号为101的1字节探测报文。
- 若接收方缓冲区仍满,回复ACK101(rwnd=0),发送方将定时器重置为10秒;若缓冲区空出,回复ACK101(rwnd=50),发送方立即发送字节101-150。
总结
零窗口探测机制通过坚持定时器和主动探测,确保TCP在流量控制暂停后能及时恢复通信,是解决窗口更新报文丢失导致死锁的核心保障。