TCP的零窗口探测机制
字数 739 2025-11-07 12:33:56

TCP的零窗口探测机制

描述
TCP的流量控制机制通过接收方通告的窗口大小(Window Size)来限制发送方的数据发送量。当接收方缓冲区已满时,其通告的窗口大小可能变为0,此时发送方必须暂停发送数据。但若接收方缓冲区恢复空闲后,如何通知发送方重新开始发送数据?零窗口探测(Zero Window Probing)机制解决了这一问题:当发送方检测到接收方窗口为0时,会定期发送探测报文,询问窗口是否已恢复。

详细过程

  1. 零窗口的触发

    • 接收方因缓冲区不足,在发送给发送方的TCP报文段中将窗口字段设为0。
    • 发送方收到零窗口通告后,立即停止发送数据(除了探测报文),并启动持续计时器(Persist Timer)。
  2. 探测报文的发送

    • 持续计时器超时后,发送方会生成一个零窗口探测报文(1字节数据段或空报文段,序列号为下一个待发送数据的起始位置)。
    • 探测报文携带当前序列号,即使接收方窗口仍为0,也不会丢弃该报文(TCP要求必须响应窗口更新)。
  3. 接收方的响应

    • 若接收方窗口仍为0,则回复一个窗口更新报文,其中窗口字段依然为0。
    • 若接收方缓冲区已释放空间,则回复的窗口字段更新为非零值,发送方据此恢复数据传输。
  4. 探测间隔的调整

    • 若多次探测后窗口仍为0,TCP会采用指数退避策略延长探测间隔(例如每次加倍超时时间),避免过多无效报文占用网络资源。
  5. 异常处理

    • 若探测报文丢失,持续计时器会再次超时并重发探测,确保可靠性。
    • 若接收方崩溃或无响应,发送方在重试多次后会断开连接。

关键点

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