首页/网络/抓包与流量分析速查/零窗与丢包的区分
丢包与时延定位60 条

零窗与丢包的区分

两者都表现为传输停滞:零窗是接收方通告窗口为 0(能收到窗口更新就恢复),丢包是数据未达(靠重传恢复);恢复路径完全不同。

零窗与丢包的区别

传输停滞有两种完全不同的原因,恢复方式也不一样:接收方通告的窗口为 0 属于流量控制,数据本身并没有丢,只要接收方腾出空间并发出窗口更新,发送立刻恢复;而报文真的丢失属于丢包问题,只能靠重传补偿。把两者混为一谈会导致处置方向出错——把流控当丢包去查链路,或者把丢包当流控去等应用读取,都会白白耗掉排查时间。

基本信息

适用平台Wireshark / tshark 的传输层分析标注
关键标注零窗、窗口更新、重传
辅助线索窗口探测包的频率与大小
恢复路径流控靠窗口更新恢复,丢包靠重传恢复

典型使用场景

  • 传输长时间停滞,先判断是流控还是丢包
  • 应用读取慢导致的停滞定位
  • 排查发送端反复发送小探测包的原因
  • 区分接收侧缓冲不足与链路丢包两类问题
  • 为接收端缓冲区调整提供依据
  • 在批量数据处理场景中定位消费者过慢的点

过滤与判读

过滤与判读
tcp.analysis.zero_window                   # 接收方窗口为 0
tcp.analysis.window_update                 # 窗口更新(恢复信号)
tcp.analysis.retransmission                # 真正的丢包补偿
# 零窗期间发送方会周期性发窗口探测包,包很小属正常
# 出现零窗且随后有窗口更新 → 属流控,恢复由接收方决定

两类现象对照

现象机制恢复条件
窗口为 0接收方告知暂时收不下接收方腾出空间并发出窗口更新
数据未达报文在路径上丢失超时或快速重传补偿
窗口探测包发送方周期性试探接收方有空间即恢复正常发送
重传标注发送方重复发送同一段对端确认后停止重传
零窗期间的窗口探测包体积很小,看到频繁的小包不要当作异常流量处理。
窗口探测的间隔由协议栈参数决定,频率异常时应当去核对对端实现与参数,而不是直接归因于网络。

易错点

  • 把流控当丢包:方向错误会导致在链路上做无用的检查,真正原因在接收端读取或缓冲
  • 把丢包当流控:等待窗口更新不会发生,只会白白延后处置
  • 把窗口探测的小包当异常流量:它们是协议正常行为
  • 忽略接收侧缓冲与应用读取:零窗的根因几乎都在接收侧,需从应用与缓冲配置入手

数据来源与参考

  • RFC 9293(流控)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌