我解决了我的网速问题,但我仍然感到困惑。我不明白发生了什么。
我的情况:一个小型内部网通过连接到电缆调制解调器(Motorola SBV5121)的 Linux 网关连接到互联网,我的提供商为我提供静态 IP,标称速度为 3Mbps/512Kbps。
Linux网关是旧的Centos 5.10,带有iptables和Dhcp服务器,带有两个NIC:
eth0 (Intranet) # 3Com Corporation 3c905C-TX/TX-M [Tornado]
eth1 (Internet) # Sundance Technology Inc / IC Plus Corp IC Plus IP100A Integrated 10/100 Ethernet MAC + PHY
[INTERNET]---[Motorola CableModem]----[eth1 LINUX-GW eth0]-----[LAN]---[desktop machines]
一切都很标准,而且它工作了很长时间;但最近我遇到了网速慢的问题,尤其是在下载时。通常的测试(例如http://www.speakeasy.net/speedtest/) 报告称从美国(我在南美)下载时(持续)速度非常低(约 200Kpbs);从我的国家下载时速度不错(但从未达到我的 3Mbps 限制):1Mbps 到 1.5 Mbps。上传速度合适,接近 512Kbps 限制。我 ping 时没有问题,没有丢失数据包,两个 NIC 都报告 100Mbps 全双工连接。测试是在 LAN 内的台式 Windows 机器上进行的,但行为与我从 Linux GW 内部下载时得到的结果一致。禁用 iptables 没有任何区别。
我非常确定这是我的提供商的路由或整形问题。打电话时,他们让我测试将一台普通的 Windows 计算机连接到电缆调制解调器的速度。我非常怀疑这是否会有什么不同。
[INTERNET]---[Motorola CableModem]----[Windows desktop machine]
令我惊讶的是,它确实如此:速度是正确的(3Mbps/512Kbps,无论目标是什么)。
我非常困惑,我仔细检查了所有东西,什么也没发现。跟踪路由是一样的。作为最后的手段,我尝试切换 GW 中的 NIC。我没有更改电缆,也没有更改配置,我做了最简单的事情:我在“ifcfg-ethX”配置文件中更改了 MAC,以便 eth1 保持连接到 Internet,但 NIC 已切换:
eth0 (Intranet) # Sundance Technology Inc / IC Plus Corp IC Plus IP100A Integrated 10/100 Ethernet MAC + PHY
eth1 (Internet) # 3Com Corporation 3c905C-TX/TX-M [Tornado]
[INTERNET]---[Motorola CableModem]----[eth1 LINUX-GW eth0]-----[LAN]---[desktop machines]
现在它运行完美!这是怎么回事?
请注意,这不仅仅是“Sundance”网卡有问题,因为在当前配置下,当我从 LAN 机器进行测试时,我仍然像以前一样检查这两张卡(只是顺序不同)。此外,当我在 LAN 内传输时(桌面 <-> GW),以太网速度良好。
有人能给出合理的解释吗,或者经历过类似的行为吗?
答案1
我能想到的唯一解释是连接网关和调制解调器的电缆坏了。
也许基带芯片(实际进行线路编码/解码的芯片)出了问题,或者从一开始就不是那么好,因此线路噪声的增加(由于电缆质量下降)会造成严重混乱。
尝试使用以下方法检查错误率ethtool;将结果与其他 NIC 进行比较。这可能会有所帮助。
答案2
一个合理的解释是 Sundance 卡和 DSL 调制解调器之间的双工协商失败。
10/100Mbit 以太网因糟糕的双工协商而臭名昭著。许多人建议对两端的速度和双工进行硬编码。我不太喜欢这个,但这不是不合理的。
多年来,这个问题已经不是什么问题了。千兆以太网自动协商是可靠的——部分原因是没有半双工千兆这种东西。我想,随着新芯片组的出现,10/100 自动协商也变得更加智能了。