Eth0速度慢,会产生错误

在我的一台Linux电脑上,这个networking很怪异。 当连接到本地networking以外的任何计算机时,速度确实很慢(无论使用什么服务器,约1.5 Kb / s)。 同时它在本地networking内具有良好的速度(> 4 Mb / s)。

Dmesg不报告与加载模块相关的任何错误,DNS正在工作,MTU大小是好的。 我正在使用有线连接,而不是wlan。 我尝试了不同的电缆和路由器上的不同端口,问题依然存在。

一些统计:

ip -s -s link eth0 <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped overrun mcast 161453 227 49 0 0 0 RX errors: length crc frame fifo missed 0 0 0 49 109 

Tx没有错误。

ethtool说:

 ethtool eth0 Settings for eth0: Supported ports: [ TP MII ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full Supported pause frame use: No Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full Advertised pause frame use: No Advertised auto-negotiation: Yes Link partner advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full Link partner advertised pause frame use: Symmetric Link partner advertised auto-negotiation: Yes Speed: 100Mb/s Duplex: Full Port: MII PHYAD: 32 Transceiver: internal Auto-negotiation: on Supports Wake-on: pumbg Wake-on: d Current message level: 0x00000007 (7) drv probe link Link detected: yes ethtool -S eth0 NIC statistics: tx_ok: 17330 rx_ok: 24344 tx_err: 0 rx_err: 0 rx_fifo: 1034 frame_align: 0 tx_ok_1col: 0 tx_ok_mcol: 0 rx_ok_phys: 24295 rx_ok_bcast: 49 rx_ok_mcast: 0 tx_abort: 0 tx_underrun: 0 rx_frags: 0 

好的,所以我只是通过另一台本地机器代理stream量,并设法得到xorg,firefox等,我只是意识到:

  1. 如果我加载一个重量级的网页,所有行为都如预期,速度很好
  2. 如果我只有一个文件,没有其他的TCP连接运行,行为依然存在

所以它似乎与有less量活动连接有关(我也得到更高程度的fifo错误,当有一个单一的连接)。 这可能是一个驱动程序的问题?

1.5Kb / s是每秒一个数据包的正确大小。 我见过TCP Delayed Ack无法正常工作,数据包以200毫秒的延迟发送,但1000毫秒是完全不同的。 这是我打破数据包嗅探器,看看电线上发生了什么。

既然你看到了networking和networking外stream量的不同行为,我会抓住三个方面:

  1. 本地到本地的stream量
  2. 本地到远程的stream量,在您的边界设备(例如在本地服务器本身通过TCPDump)
  3. 本地到远程的stream量,在您的边界设备之外(好的:在边界设备本身,更好的是在交换边界设备的互联网连接的交换机上)。

2和3是非常重要的,因为它可以帮助你弄清楚你的边界设备是不是在过滤不应该被过滤的东西,或者如果远程端在做它不应该做的事情。 你正在寻找exception,而且有很多方法可能会以这种方式失败,所以我不能告诉你如何识别那里的东西。 Wireshark有一些非常好的错误突出显示,可以通过加载捕获来告诉你发生了什么。

缓慢的原因可能是:

  • 网卡双工和速度不兼容

  • 布线不好

  • 电气干扰

ethtool eth0 (以root身份运行)显示了什么? 与另一台PC进行比较。 ethtool -S eth0显示更详细的错误报告。