## 参考资料
https://doraemonzzz.com/2022/01/08/2022-1-8-CS144-Lab3/#
Lab-3-the-TCP-sender
###
### 零窗口探测
这是一个特殊的"探测"机制!
在 TCP 中,这种情况被称为 Zero Window Probing(零窗口探测)。当出现以下情况时:
1. `_recx_windowsize == 0`:接收方说"我的接收窗口已经满了,不能再收了"
2. `remainWindowSize == 0`:计算出来的剩余窗口大小也是 0
这时候发送方会尝试发送 1 个字节的数据作为"探测",为什么要这样做?
- 防止死锁:如果接收方的窗口变大了但通知包丢了,双方就会卡住
- 发送方:"你窗口满了我就不发了"
- 接收方:"我窗口已经有空间了,但你怎么不发数据?"
就像你去倒水:
1. 对方说:"我的水桶满了!"
2. 你还是会试着滴一滴水
3. 这样如果对方水桶已经空了,就能告诉你:"哦,现在可以倒水了"
这就是为什么即便接收窗口为 0,代码还是会设置 `remainWindowSize = 1`,给一个"试探"的机会。这是 TCP 协议中的一个重要机制,保证通信不会死锁。