来自网络的数据在华硕 EEE 1001HA、Ubuntu 10.4 Lucid 上仅部分传输

来自网络的数据在华硕 EEE 1001HA、Ubuntu 10.4 Lucid 上仅部分传输

我妻子的上网本最近开始出现异常。我仔细检查后发现以下症状:

  • 网页浏览:速度极慢(一直在“加载”页面;可能会显示一半 Google 标志,然后就卡在“正在传输...”上)
  • apt-get:将传输前 5k 个数据包,然后卡住;重新启动后,它将增加到 10k;然后大约 16k。

使用 tcpdump 监控网络时,我注意到,最初的活动爆发,什么都没发生虽然网页还没有完全加载,浏览器还在等待。最后收到的数据包如下:

01:18:48.672286 IP 192.168.2.3.48010 > 72.14.234.104.80: Flags [P.], seq 618:1271, ack 5751, win 360, options [nop,nop,TS val 666336 ecr 2373881974], length 653
01:18:48.730567 IP 72.14.234.104.80 > 192.168.2.3.48010: Flags [.], ack 1271, win 129, options [nop,nop,TS val 2373882338 ecr 666336,nop,nop,sack 1 {618:1271}], length 0

值得了解的事项(按优先顺序):

  • 我尝试通过 Wi-Fi 连接两者(通过 Realtek 为 Asus 1001HA 定制的驱动程序)以太网,从我的 Mac“共享互联网连接”
  • 还尝试了 Ubuntu Netbook (10.4) 实时版本:同样的行为
  • 它在 Windows 下运行(唉..)
  • ping localhost 成功
  • 本地局域网 ping 成功
  • 我们搬了公寓;不过我的 Mac 和她的另一台电脑运行正常
  • Linux 上过去几个月没有进行任何更新
  • dmesg没有显示任何异常活动
  • 尝试了多个 DNS 服务器,结果都一样
  • 系统范围内没有代理
  • 整个浏览器没有代理,并且缓存/cookie 已被清除
  • 磁盘空间正常
  • CPU 使用率一如既往地低
  • 没有额外的默认路由

更新顺便说一句,我在她的 PC 上尝试了 Ubuntu,它的表现完全一样。我想知道是不是接入点 (D-Link) 搞乱了 Linux。


本文第一版注释

--我添加了这个注释,因为我已经收到了关于这个主题的答案,但是从那时起事情发生了变化--

至于行为ping;每个数据包都已发送/接收,但延迟很大:

root@katies:~# !ping
ping www.google.com
PING www.l.google.com (66.249.92.104) 56(84) bytes of data.
64 bytes from 66.249.92.104: icmp_seq=1 ttl=51 time=57.7 ms
64 bytes from 66.249.92.104: icmp_seq=2 ttl=51 time=82.4 ms
64 bytes from 66.249.92.104: icmp_seq=3 ttl=51 time=77.1 ms
64 bytes from 66.249.92.104: icmp_seq=4 ttl=51 time=82.9 ms
64 bytes from 66.249.92.104: icmp_seq=5 ttl=51 time=79.5 ms
^C64 bytes from 66.249.92.104: icmp_seq=6 ttl=51 time=78.8 ms

--- www.l.google.com ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 25704ms
rtt min/avg/max/mdev = 57.772/76.438/82.947/8.595 ms

最后两行表示:发送 6 个 PING 耗时 25 秒。但是,每个 ping 应该在 1 秒内发送,而不是 5 秒。此外,往返时间相当短,这是理所当然的。

答案1

  1. 延迟是否仅限于浏览网页?你尝试过其他应用程序吗?
  2. 她使用的是哪款浏览器?她打开了多少个标签?

如果我在 Iceweasel 中打开了太多选项卡,我也会在我的 Debian 笔记本电脑上看到类似的延迟。我还看到过有关导致类似问题的 mySQL 错误的参考资料。

答案2

您使用哪些具体的 ping(1) 命令参数?未显示。

如果将每个单个 ICMP 数据包所花费的时间相加:

57.7 毫秒 + 82.4 毫秒 + 77.1 毫秒 + 82.9 毫秒 + 79.5 毫秒 + 78.8 毫秒

是 458.40 毫秒。默认情况下,ping(1) 每次 ping 之间间隔 1 秒。通常,需要 1000 毫秒 * 5(因为每 6 次 ping 之间只有 5 个间隔)+ 458.40 毫秒 = 5458.40 毫秒,而不是 25704 毫秒。并且 ping 不会报告任何数据包丢失。

也许在您的 ping(1) 参数中您有类似“-i 5”的内容。

在每个 ICMP 请求之间添加 5 秒。更合理的是,5000 毫秒 * 5 + 458 毫秒 = 25458 毫秒

这接近输出中的总计 25704 毫秒。

答案3

问题原来出在一个非常非常糟糕的接入点/无线路由器上:D-Link G604T。显然,由于 DNS 代理或数据包转发和 IPv6 存在一些重大错误,它在 Linux(Ubuntu)中无法运行。

解决办法是把这个东西取下来,用更合适的东西代替它。

更新,2011-09-25

在我更换了旧路由器后,我的 Mac 也出现了类似的问题。这个问题影响了所有基于 UNIX 的设备(基本上,我所有来访的拥有 Mac 的朋友都出现了这个问题)。

有关该行为的一些细节:

  • 无法通过网络上传大文件(传输 49,152 字节后会挂起)
  • 奇怪的行为 vua ssh(将传输大小为 49,150 49,151 和 49,153 的文件,但不会传输 49,152
  • 可以通过 ssh 传输 100k 大小的文件,但之后会随机挂起
  • 通过 bittorrent 协议传输小块文件时,下载/上传速度非常不稳定

使固定:TCP 窗口缩放, 或者

sudo sysctl -w net.inet.tcp.rfc1323=0

相关内容