Linux

Linux在插入電纜時禁用乙太網自動協商?

  • June 30, 2021

我最近注意到我的千兆家庭網路僅獲得 100Mbit/s 的吞吐量。

當我查看它時,ethtool我發現我的 ArchLinux Box 使用100baseT/Half的是連結速度,而不是1000baseT/Full它的 NIC 和連接到它的交換機支持。我不知道為什麼,但 NIC 似乎沒有根據以下內容宣傳其連結模式ethtool

Settings for enp0s31f6:
   Supported ports: [ TP ]
   Supported link modes:   10baseT/Half 10baseT/Full
                           100baseT/Half 100baseT/Full
                           1000baseT/Full
   Supported pause frame use: No
   Supports auto-negotiation: Yes
   Advertised link modes:  Not reported
   Advertised pause frame use: No
   Advertised auto-negotiation: No
   Speed: 100Mb/s
   Duplex: Half
   Port: Twisted Pair
   PHYAD: 1
   Transceiver: internal
   Auto-negotiation: off
   MDI-X: on (auto)
   Supports Wake-on: pumbg
   Wake-on: g
   Current message level: 0x00000007 (7)
                          drv probe link
   Link detected: yes

當通過執行顯式啟用自動協商時,ethtool --change enp0s31f6 autoneg on它似乎將其所有模式通告給交換機並使用1000baseT/Full.

不過,這只在大部分時間和一段時間內有效。當我拔下電纜並將其重新插入時,大多數時候會自動關閉,但並非總是如此。此外,有時將 autoneg 設置為 on 會立即再次禁用它。重新啟動也會再次禁用它。

請注意,自動協商不會在拔出時禁用,而是在重新插入時禁用。dsmeg在啟用 autoneg 並插入電纜時記錄此內容:

[153692.029252] e1000e: enp0s31f6 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
[153699.577779] e1000e: enp0s31f6 NIC Link is Up 100 Mbps Half Duplex, Flow Control: None
[153699.577782] e1000e 0000:00:1f.6 enp0s31f6: 10/100 speed: disabling TSO

我正在使用我的 asrock 主機板的英特爾 NIC(從 ~2015 年開始)和一個非託管交換機(Netgear GS208)。

經過數小時的搜尋,我在最明顯的地方找到了解決方案:

NetworkManager 似乎以某種方式在我的乙太網埠的設置中禁用了自動協商:

連接 - KDE 系統設置

奇怪的是,即使在知道 NetworkManager 可以更改乙太網連結模式之後,我什至無法在網上找到詳細說明該功能的單一來源。根據我發現的Google搜尋結果,唯一的方法是通過ethtool.

我有完全相同的問題,我很確定我從來沒有有意識地設置這個……

ethtool --change enp0s31f6 autoneg on

立即修復它,網路正確自動協商為 1Gbit 全雙工,然後當我查看 NetworkManager 時,它確實設置為 100mbit …

引用自:https://unix.stackexchange.com/questions/420066