![高速下载大文件时无线流量停止:数据包丢失(Linksys WRT120N 路由器)](https://linux22.com/image/1316805/%E9%AB%98%E9%80%9F%E4%B8%8B%E8%BD%BD%E5%A4%A7%E6%96%87%E4%BB%B6%E6%97%B6%E6%97%A0%E7%BA%BF%E6%B5%81%E9%87%8F%E5%81%9C%E6%AD%A2%EF%BC%9A%E6%95%B0%E6%8D%AE%E5%8C%85%E4%B8%A2%E5%A4%B1%EF%BC%88Linksys%20WRT120N%20%E8%B7%AF%E7%94%B1%E5%99%A8%EF%BC%89.png)
问题
注意:首先我想了解为什么会发生这种情况。当然,如果有解决方案就更好了。:)
当通过 HTTP 高速下载大型文件时,我的无线流量基本停止:我无法打开网页,下载本身也会暂停。下载开始后几乎立即暂停;有时下载到 800 KB,有时下载到几 MB。一段时间后,下载(和其他流量)恢复,但问题在同一次下载过程中不断重现。
通过同一路由器(Linskys WRT120N)使用有线连接时不会出现此问题。另请注意,连接不是发生这种情况时,网络就会掉线。只是流量停止了,我无法浏览网页等。(SYN 数据包已发送,但没有收到任何内容等)
通过Wireshark检查发现,出现了以下情况:
- 服务器发送数据包,并由客户端确认
- 服务器发送了一个数据包,但是 SEQ 指示一些数据包丢失了(一次丢失了 6 个数据包)。
- 服务器发送更多数据包,客户端使用“选择性确认”来确认这些数据包
- 服务器暂时停止发送数据(因为丢失的数据包没有被确认或者路由器停止转发它们?
- 最终,服务器进行“重新传输”,流量恢复正常。
当发生数据包丢失时,这对我来说似乎是正常行为。令我困惑的是,在进行大量高速下载时,数据包持续丢失。
这可能是什么原因造成的?
我自己的想法是:我的互联网速度非常快(100 mbps),因此当开始下载大文件时,路由器会缓冲传入的数据(因为无线会引入一些轻微的延迟/较低的速度,部分原因是其他网络),但缓冲区溢出并且路由器会丢弃数据包以调节流量(因为它别无选择)。
但这怎么可能发生呢?TCP 窗口大小不是限制了可以不确认的数据量吗?那么如果只有 64 KB 的数据等待确认,路由器的缓冲区怎么会溢出呢?
笔记:我已经通过netsh
选项禁用了 TCP 窗口缩放和动态窗口大小,试图解决这个问题,但似乎没用。
还,Wireshark 显示,服务器发送 2 个数据包(1514 字节),客户端发送 ACK,那么这是否排除了可能的缓冲区溢出?还有一些后续数据包是已收到...
我有点不知所措。感谢您的见解。
可能不是原因的事情/我尝试过
- 浏览器
- Windows 7 中的各种 TCP 选项(
netsh
等等) - 路由器设置,例如 MTU、信标间隔、UPnP 等
答案1
解决方案
解决办法很简单禁用 WMM 支持在路由器配置中。显然,出于某种原因,Linksys WRT120N WMM 支持与 Windows 7 无线功能不兼容。
更多细节
通常,当问题发生时,流量最终会恢复(对于同一连接),就好像数据包在路由器排队了一段时间一样。这些暂停通常会持续 40 秒或更长时间。说实话,这仍然让我感到困惑。
在此期间,无法建立任何其他 (TCP) 连接:当尝试浏览网页等时,笔记本电脑会发送 SYN 数据包,但没有响应。但是,DNS 和 ARP 请求是正常處理。