我遇到了一个奇怪的问题,导致我自己的 Web 服务器的 http 请求(本例中为 POST)出现长时间延迟。这种情况仅在以下情况下发生
- 使用 Linux 或 Mac 客户端(Windows 可以),并且
- 使用无线,有线连接正常。
它发生在 2.4 GHz 和 5 GHz 频段。在 5 GHz 频段,只有 3 个其他 AP 处于活动状态,而我选择了远离这些 AP 的信道(AP 自动设置也无法改善这种情况)。因此,我排除了无线的外部干扰是原因。大多数(所有?)通过相同无线的其他网站都正常。
Wireshark 告诉我有线和无线之间的区别是 TCP 重传。这会导致 10-20 秒的延迟。下图显示
- 无线上的 Linux -> 重传和延迟
- 无线上的 Windows(同一客户端)-> 重传,无延迟
- 有线上的 Linux -> 无重传
并非所有请求都会发生这种情况,但大多数请求都会发生这种情况。不过,重新传输总是在通信中的同一点(对 POST 请求的 200 OK 响应)。
最好的办法是找到数据包丢失/重传的原因,但即使认为这是不可避免的,我还是惊讶于这么少的丢失竟然会导致数十秒的延迟。我的理解是 TCP 应该能够更好地处理它。
以下是有关设置的一些详细信息:
- 服务器运行 Ubuntu 14.04、内核 3.13.0-042stab108.2(在 VM 内)
- 客户端设备运行 Ubuntu 12.04.5、内核 3.2.0-97-generic、iwlwifi 驱动程序、Centrino Advanced-N 6230 AGN REV=0xB0
- 设备在本地网络中,NAT 由路由器/wifi AP FritzBox 7390 完成,运行 FRITZ!OS 06.30
答案1
为时已晚,但我认为您的问题是由 RTO 引起的。WiFi 可能导致过多的重新传输,以至于您达到了重新传输超时。