多个持久 TCP 连接同时丢失数据包的原因?

多个持久 TCP 连接同时丢失数据包的原因?

在分析一些应用程序日志时发现了这个问题,这些日志报告称,当服务器收到来自多个客户端的消息时,会出现几秒钟的峰值,但延迟时间较长(最多几秒钟)。应用程序本身使用持久连接,客户端和服务器通过该连接每秒交换几十次短消息(远小于 MTU)(想想语音数据/游戏流量)。

为了深入挖掘,我录制了一个 tcpdump,并发现来自多个(但不是全部)客户端的随机段在这些峰值期间丢失(因此服务器会发送大量 SACK),并且在最佳情况下重新传输大约需要 300 毫秒,因此在应用程序级别上存在延迟,而服务器则等待丢失的片段。对于特定受影响的客户端,它不仅仅是每个峰值一次重新传输,而是一系列重新传输。像ifconfig -a不报告任何数据包丢失这样的命令/var/log/syslog是干净的。信道是 10Gbit,而高峰时段的传入/传出流量仅为 10Mbit。

问题是:什么原因可能导致这种情况?哪些工具可以帮助发现潜在问题?在哪里查找?这与服务器提供商有关吗?

相关内容