我有 D-Link DSL-2500U/BRU/D,ADSL 模式为“ADSL2+ AnnexM EU-56”,配置为桥并连接到 Linux (Gentoo) 工作站。线路足够好,我的速度稳定在 2.09MiB/秒(即大约 18-20Mbps)...但我只有在下载种子或使用多个连接下载某些内容时(例如并行运行多个 wget 进程)才能看到这个速度。
单个 wget 进程的下载速度仅为 200KiB/秒平均而言,从任何地方(例如 kernel.org 或我尝试过的其他服务器)下载速度都差不多。当 wget 启动时,它可能开始以高达 400-500Kib 的速度下载,但很快速度会降低到大约 100Kib,然后慢慢增加到 150-200Kib。当然,这个问题适用于任何单个 TCP 连接,不仅仅适用于 wget。
我尝试在 WinXP SP3 和 OpenSUSE-11.3、Ubuntu-9.04 和 Ubuntu-6.10 的 LiveCD 中使用相同的 wget 访问 kernel.org - 只是为了排除我的 Gentoo 工作站配置错误的可能性。在所有这些操作系统中,我都遇到了同样的问题 - 单个 wget 无法以超过 200KiB/秒的速度下载,但我可以同时以该速度运行多个 wget,因此这不是 ADSL 线路的限制。
最初,我认为这个问题是由于某些 ISP 的整形器造成的,但后来我发现 WinSeven 能够以 1-2MiB/秒的速度从 kernel.org 进行 wget!此外,我尝试将调制解调器从桥接器切换到路由器模式,在我的 Gentoo 中单个 wget 的速度为 1-2MiB/秒,所以这个问题可能与 ISP 无关。
MTU 在 eth0 上设置为 1500,在 ppp0 上设置为 1492。我注意到 WinSeven 在 pppoe 接口上使用 MTU 1480,并在 linux 上尝试了相同的值 - 但没用。我还尝试使用 sysctl (rmem/wmem/etc.) 尝试不同的 tcp 优化 - 也没有成功。
有什么办法可以在不将调制解调器从桥接器切换到路由器的情况下解决这个问题吗?
答案1
可能是 PPPoE 客户端上的 MTU 问题。
pppoe 的手册页建议使用 -m 选项将 TCP 段大小限制为1412:
-m MSS
Causes pppoe to clamp the TCP maximum segment size at the specified value. Because of PPPoE overhead,
the maximum segment size for PPPoE is smaller than for normal Ethernet encapsulation. This could cause
problems for machines on a LAN behind a gateway using PPPoE. If you have a LAN behind a gateway, and the
gateway connects to the Internet using PPPoE, you are strongly recommended to use a -m 1412 option. This
avoids having to set the MTU on all the hosts on the LAN.