Linux
Linux在插入電纜時禁用乙太網自動協商?
我最近注意到我的千兆家庭網路僅獲得 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 似乎以某種方式在我的乙太網埠的設置中禁用了自動協商:
奇怪的是,即使在知道 NetworkManager 可以更改乙太網連結模式之後,我什至無法在網上找到詳細說明該功能的單一來源。根據我發現的Google搜尋結果,唯一的方法是通過
ethtool
.
我有完全相同的問題,我很確定我從來沒有有意識地設置這個……
ethtool --change enp0s31f6 autoneg on
立即修復它,網路正確自動協商為 1Gbit 全雙工,然後當我查看 NetworkManager 時,它確實設置為 100mbit …