首页/网络/网络排障速查/零窗口与窗口更新:应用慢的直接证据

零窗口与窗口更新:应用慢的直接证据

接收窗口为 0 表示应用来不及读数据,TCP 层被迫停发:这是「网络没问题但业务慢」最有力的抓包证据,常见于数据库/后端处理慢。

网络排障速查网络更新于 2026-10-13

零窗口说明什么

TCP 接收方通过通告窗口告诉对方「我还能收多少字节」。当接收缓冲区被写满、应用来不及读走数据时,窗口被通告为 0,发送方必须停止发送并周期性发探测包等待窗口更新。这是「网络本身没问题、慢在接收端应用」最直接的抓包证据,典型出现在数据库大查询回包、日志同步和消费速度跟不上的队列客户端上。

基本信息

适用平台Wireshark / tshark 分析任意平台抓取的 pcap
关键显示过滤器tcp.analysis.zero_window、tcp.window_size_value == 0
配套过滤器tcp.analysis.zero_window_update、tcp.analysis.window_update
含义接收窗口为 0:缓冲区满,发送侧被迫停发
与拥塞窗口的区别零窗口反映接收侧压力,与发送侧拥塞控制无关

典型使用场景

  • 业务报「接口偶发几秒无响应」而链路指标正常时定位背压点
  • 数据库客户端读取大结果集慢:确认是服务端发送受限还是客户端消费慢
  • 日志采集与消息队列消费滞后:判断消费者是否成为瓶颈
  • 上传或下载中断:排查是否是接收端应用阻塞导致长时间停顿
  • 性能压测复盘:区分服务端处理慢与客户端读取慢两个不同方向

定位零窗口

定位零窗口
# 只看零窗口事件
tcp.analysis.zero_window
# 直接按窗口值为 0 过滤
TCP.WINDOW_SIZE_VALUE == 0
# 零窗口更新事件(接收方腾出空间后重新通告)
tcp.analysis.zero_window_update
# 组合:谁在喊零窗口、多久恢复
tcp.analysis.zero_window || tcp.analysis.window_update
# tshark 非交互式统计
tshark -r capture.pcap -Y 'tcp.analysis.zero_window' -T fields -e frame.time -e ip.src -e tcp.srcport

事件对照与判读

抓包现象含义判读要点
Zero Window接收方通告窗口为 0记录首次出现的时刻与流方向,确定是哪端慢
Zero Window Probe发送方按协议探测对方是否能收属正常机制,不是故障本身
Zero Window Update接收方腾出空间重新通告窗口与首次零窗口的时间差就是应用停顿的时长
窗口很小但不为 0接收缓冲区接近耗尽同样指向消费端压力,只是尚未完全停发
伴随重传停发后恢复时的正常补偿不要误判成网络丢包
零窗口是接收侧压力信号,追查方向应是接收端应用(慢查询、锁等待、单线程处理、GC 停顿),而不是先去换网线或调网卡参数。

易错点

  • 看到零窗口就去找网络设备责任:它天然指向接收端应用消费太慢,查链路只会白费时间
  • 把 Zero Window Probe 当异常:这是发送方按协议规定的探活行为,本身不是故障
  • 只看单次事件不看持续时长:偶发几十毫秒的零窗口对业务无影响,持续数秒的才是真问题
  • 把零窗口恢复后的重传当丢包证据:这是停发期间累积数据恢复发送的正常现象

数据来源与参考

  • RFC 9293:窗口管理与零窗口探测
  • Wireshark 文档:tcp.analysis.zero_window

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌