TCP acks暂停,然后恢复,然后再次暂停。为什么?

时间:2015-03-16 16:10:06

标签: linux tcp wireshark

注意:此问题已移至serverfault.com

我希望能帮助我找到应用程序中降低数据传输速率的原因。

我有12个嵌入式系统和一个Linux服务器。嵌入式系统通过交换机在以太网链路上通过TCP向服务器发送数据。以下是一个TCP StreamGraph,由Wireshark捕获来自一块板的流量。

TCP StreamGraph

如您所见,数据传输速度约为5.8MBit / s,最高可达0.25秒。这跟我所期望的嵌入式系统一样快。在此之后,在传输中插入延迟。以下是图表的特写:

Zoomed StreamGraph

底部标有ACK的楼梯形曲线显示服务器在任何给定时间已确认了多少数据。标记为RWIN的相应曲线显示数据带上的缓冲区中有多少空间。标记为SENT DATA的较小垂直段是发送的实际包。

在A点,服务器以尽可能快的速度确认数据,但是在23ms的持续时间内,服务器不会发送任何消息。允许嵌入式系统在不等待ACK的情况下发送到RWIN,但它不会这样做,因为它需要保持发送的数据,直到它们被激活(如果需要重新发送)并且发送缓冲区空间是有限的。

然后,在B点,所有接收的数据立即被确认,正常的acking和发送恢复2.5ms,然后再发生暂停。

Wireshark捕获是从另一台PC上进行的,该PC连接到交换机上的一个端口,该端口设置为镜像在嵌入式系统所连接的端口上发送和接收的所有数据。

Linux服务器运行Java应用程序,该应用程序处理数据并将其存储在磁盘上。它没有显示出最大化CPU的迹象。操作系统是Ubuntu Server 12.04,具有默认网络设置。

我可以看到,我可能会从嵌入式系统中分配更多的发送缓冲区空间中获益,以匹配Linux服务器中的接收窗口空间量,但这似乎不是限制因素。

我的问题是:

  1. Linux服务器暂停ACK的原因可能是什么,即使它显然能够正常收到所有内容?
  2. 我该如何调试?

0 个答案:

没有答案
相关问题