TCP传输速率慢,接收端出现Zero Window,与Window Update有250ms延迟

1. 问题概述

系统运行5天左右,发现节点之间的TCP连接传输速度降低,由最开始的70-80Mbps降低为20-40Mbps,抓包中有如下现象:

  • 发送端上netstat显示tcp连接的Snd-Q存在大量数据未发送; 图片说明
  • 抓包显示接收端出现Zero Window,但在接收端节点上netstat查看该连接的Recv-Q未发现有堆积; 图片说明
  • 我们在交换机上通过镜像端口,抓包了发送端的数据包,发现接收端出现了较多的Zero Window,大部分Window Update很快就能发出,**很少的Window Update是由发送端的零窗口探测触发的,期间经历了约250ms的延迟**; 图片说明
  • 时序图上可见有大量停顿,时长为250ms 图片说明

恳请大佬分析一下,为何会出现这种情况?该情况需要从哪方面解决。

2. 环境信息及拓扑

整个系统由8个嵌入式节点组成,各节点均配置千兆网卡,内核版本为Linux 3.10。每个节点上运行EC和REC进程,REC为接收端监听30005,EC为发送端,绝大部分情况下EC往REC发送大量数据,EC不回应任何数据,图为1、2节点连接示意图,其余节点类似:
图片说明

出现传输速率降低时,我们在交换机上镜像了出现问题的发送端,并使用电脑抓取报文。
图片说明

3. 数据包

20200825_1447_3节点到2节点.pcapng 文件为抓取到报文,其中172.31.17.3:53158 -> 172.31.17.2:30005 该连接出现传输速率降低情况。

百度网盘链接: https://pan.baidu.com/s/14m9UDVhiyJ-ZjZx7w0bRAA 密码: q1ei

https://zhuanlan.zhihu.com/p/80043707