家里的以太网连接偶尔会断开

家里的以太网连接偶尔会断开

我家里的以太网端口连接出现了一个奇怪的问题。我在家里用适当的工具和测试完成了自己的以太网布线。一切似乎都正常。ping 速度很快,传输速度很快(千兆连接),没有丢失任何数据包。在确信一切正常后,我开始使用我的以太网。我的树莓派在以太网上工作正常,但是,联想 T450s 上的 Ubuntu 14.04 LTS 会随机断开连接。以下是症状:

  • 以太网连接指示器不显示连接丢失。
  • 它主要发生在我浏览时以及打开新页面/单击新链接时。
  • 网站需要很长时间才能加载,最终导致浏览器出现错误。
  • 每当我看到网站加载时间异常长时,我就会 ping 我的电缆调制解调器,数据包会到达调制解调器并返回。然后连接恢复经过一些测试,我意识到仅当 ping 调制解调器后,连接才能恢复!有趣的是,第一个包(在连接问题之后)需要约 1007 毫秒,其余的需要约 0.5 毫秒。不知何故,第一个包花费的时间太长了。此外,我开始每隔 2-3 秒对调制解调器进行 ping 操作, 哪个已预防任何进一步的干扰。
  • 通过 WiFi 或以太网连接到调制解调器和互联网的所有其他设备均可正常工作!包括树莓派、Windows 机器等。
  • 同一台笔记本电脑,在以太网上工作时也能正常工作。

不知何故,我的 Ubuntu 笔记本与我的小型家庭以太网网络出现了问题。我当时的假设是 Ubuntu 关闭了我的以太网卡或进行了一些省电,这导致它无法访问。ping 可以恢复或保持唤醒状态。但我在给笔记本电脑充电时遇到了这个问题。

我该如何解决这个问题?有什么想法吗?

忘了说了……我编写了一个脚本来通过ethtool连接丢失和恢复后立即显示(用于比较)。没有明显差异(使用 diff 检查)。但这是连接丢失后(期间)的输出。

--version
_________
ethtool version 3.13
-a
_________
Pause parameters for eth0:
Autonegotiate:  on
RX:     on
TX:     on

-c
_________
Coalesce parameters for eth0:
Adaptive RX: off  TX: off
stats-block-usecs: 0
sample-interval: 0
pkt-rate-low: 0
pkt-rate-high: 0

rx-usecs: 3
rx-frames: 0
rx-usecs-irq: 0
rx-frames-irq: 0

tx-usecs: 0
tx-frames: 0
tx-usecs-irq: 0
tx-frames-irq: 0

rx-usecs-low: 0
rx-frame-low: 0
tx-usecs-low: 0
tx-frame-low: 0

rx-usecs-high: 0
rx-frame-high: 0
tx-usecs-high: 0
tx-frame-high: 0

-i
_________
driver: e1000e
version: 2.3.2-k
firmware-version: 0.2-3
bus-info: 0000:00:19.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no
-g
_________
Ring parameters for eth0:
Pre-set maximums:
RX:     4096
RX Mini:    0
RX Jumbo:   0
TX:     4096
Current hardware settings:
RX:     256
RX Mini:    0
RX Jumbo:   0
TX:     256

-S
_________
NIC statistics:
     rx_packets: 4923045
     tx_packets: 2764542
     rx_bytes: 6044576522
     tx_bytes: 515265291
     rx_broadcast: 140452
     tx_broadcast: 1805
     rx_multicast: 34355
     tx_multicast: 972
     rx_errors: 0
     tx_errors: 0
     tx_dropped: 0
     multicast: 34355
     collisions: 0
     rx_length_errors: 0
     rx_over_errors: 0
     rx_crc_errors: 0
     rx_frame_errors: 0
     rx_no_buffer_count: 0
     rx_missed_errors: 0
     tx_aborted_errors: 0
     tx_carrier_errors: 0
     tx_fifo_errors: 0
     tx_heartbeat_errors: 0
     tx_window_errors: 0
     tx_abort_late_coll: 0
     tx_deferred_ok: 0
     tx_single_coll_ok: 0
     tx_multi_coll_ok: 0
     tx_timeout_count: 0
     tx_restart_queue: 0
     rx_long_length_errors: 0
     rx_short_length_errors: 0
     rx_align_errors: 0
     tx_tcp_seg_good: 41837
     tx_tcp_seg_failed: 0
     rx_flow_control_xon: 0
     rx_flow_control_xoff: 0
     tx_flow_control_xon: 0
     tx_flow_control_xoff: 0
     rx_csum_offload_good: 4888272
     rx_csum_offload_errors: 69
     rx_header_split: 0
     alloc_rx_buff_failed: 0
     tx_smbus: 0
     rx_smbus: 1274
     dropped_smbus: 0
     rx_dma_failed: 0
     tx_dma_failed: 0
     rx_hwtstamp_cleared: 0
     uncorr_ecc_errors: 0
     corr_ecc_errors: 0
-t (test)
_________
The test result is PASS
The test extra info:
Register test  (offline)     0
Eeprom test    (offline)     0
Interrupt test (offline)     0
Loopback test  (offline)     0
Link test   (on/offline)     0


编辑: 我尝试编译并安装最近的3.3.5版本 e1000e... 两者都运行正常,没有任何错误。但无论是否重新启动,ethtool -i eth0都告诉我我仍然有2.3.2-k。以下是 make install 的输出:

make -C /lib/modules/3.13.0-93-generic/build CC=gcc SUBDIRS=/home/<username>/Desktop/IT/e1000e-3.3.5/src modules
make[1]: Entering directory `/usr/src/linux-headers-3.13.0-93-generic'
  Building modules, stage 2.
  MODPOST 1 modules
make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-93-generic'
gzip -c ../e1000e.7 > e1000e.7.gz
# remove all old versions of the driver
find /lib/modules/3.13.0-93-generic -name e1000e.ko -exec rm -f {} \; || true
find /lib/modules/3.13.0-93-generic -name e1000e.ko.gz -exec rm -f {} \; || true
install -D -m 644 e1000e.ko /lib/modules/3.13.0-93-generic/updates/drivers/net/ethernet/intel/e1000e/e1000e.ko
/sbin/depmod -a 3.13.0-93-generic || true
install -D -m 644 e1000e.7.gz /usr/share/man/man7/e1000e.7.gz
man -c -P'cat > /dev/null' e1000e || true
e1000e.

信息: 我终于创建了 dkms.conf

MAKE="make -C src/ KERNELDIR=/lib/modules/${kernelver}/build"
CLEAN="make -C src/ clean"
BUILT_MODULE_NAME=e1000e
BUILT_MODULE_LOCATION=src/
DEST_MODULE_LOCATION="/kernel/updates/dkms"
PACKAGE_NAME=e1000e
PACKAGE_VERSION=3.3.5
REMAKE_INITRD=yes

我也关注了这些指示。

遗憾的是,新的驱动程序也存在同样的问题。

答案1

正如我们上面讨论的...下载较新的 e1000e 驱动程序https://sourceforge.net/projects/e1000/files/e1000e%20stable/3.3.5/,使用以下方法编译制作进行安装。这将安装新的内核模块,但旧内核模块仍加载在当前内核中。因此,在终端中,执行sudo rmmod e1000e(你的以太网连接现在会断开),然后执行sudo modprobe e1000e,这将加载新的内核模块并重新启动以太网连接。然后你可以执行sudo modinfo e1000e确认您正在运行新的内核模块。

那么,您是否在源代码的顶层找到了 dkms.conf 文件?如果找到了,那么使用 dkms 的艰苦工作已经完成。使用 Synaptic 安装 dkms(如果尚未安装)。简短的回答是……您将源代码复制到 /usr/src,然后执行 dkms add、build、install。您必须查看 man 以了解更多信息。dkms 状态命令将显示当前状态。

相关内容