Linux TCP确认暂停,然后恢复,然后再次暂停。为什么?

Linux TCP确认暂停,然后恢复,然后再次暂停。为什么?,linux,tcp,wireshark,Linux,Tcp,Wireshark,注意:此问题已移至 我想得到一些帮助,找出我的应用程序中数据传输速率降低的原因 我有12个嵌入式系统和一个Linux服务器。嵌入式系统通过交换机通过以太网链路上的TCP向服务器发送数据。下面是一个TCP流图,由Wireshark从一块电路板捕获的流量制成 如您所见,数据传输速度约为5.8MBit/s,最长可达0.25秒。这是我所期望的嵌入式系统的最快速度。在此之后,在传输中插入延迟。下图显示了该图的特写: 底部标有ACK的阶梯形曲线显示服务器在任何给定时间已确认的数据量。标记为RWIN的对应

注意:此问题已移至

我想得到一些帮助,找出我的应用程序中数据传输速率降低的原因

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

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

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

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

然后,在B点,所有接收到的数据都会立即确认,正常确认和发送会在另一次暂停发生之前继续2.5毫秒

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

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

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

我的问题是:

  • Linux服务器暂停ACK的原因可能是什么,尽管它显然能够很好地接收所有内容
  • 我如何进行调试

  • 能否在服务器上运行
    latencytop
    ?其他拥塞控制算法也会发生这种情况吗?这是一个非常好的框架和研究问题,但离题了。请尝试networkengineering.stackexchange.com。我投票将此问题作为离题题题结束,因为它属于networkengineering.stackexchange.com。@ninjalj感谢您提供了指向latencytop的指针。我要试一试。我没有尝试过其他拥塞控制算法,但我也会尝试。你认为有什么算法最适合我的场景吗?这是一种完全有线的设置,网络中没有数据包丢失或长时间延迟。交换机和服务器网卡的带宽都没有达到最大值。没有编程内容。这是离题的。