我在 2 个 Linux 主机(2.6.x 内核、rhel 6.3 企业版 Linux)上运行简单的 TCP 客户端和服务器应用程序。在无限循环中,客户端发送一条 1024 字节的消息,服务器以 100 字节的确认进行响应。然后,客户端发送另一个 1024 字节的消息,依此类推。通过 ping 确定的 2 个主机之间的延迟(RTT)平均约为 0.23 毫秒。
我观察到,客户端和服务器通常每秒只发送 3200 条消息,但运行 2-3 分钟后,我会看到消息速率高达每秒 5100 条消息。此速率将持续几秒钟,然后回落到 3200。我如何找出导致吞吐量跳跃的原因?
更新:两台主机位于同一个 VLAN,通过 Cisco Catalytic 交换机连接,网络带宽为 1Gb/秒。
答案1
可能是 TCP 窗口大小发生变化,允许更多未完成字节在线路上传输,从而导致吞吐量增加。然后,网络上可能出现某种情况,导致数据包丢失,从而降低 TCP 窗口大小。
运行 wireshark 并查看 TCP 标头中的各个字段,了解吞吐量何时增加以及何时下降,如果是这种情况,那就应该非常清楚了。