I’ve been slowly reworking my home network over the past few months and ran into a new problem today - my desktop, wired to a gigabit switch via Cat6 cabling, would never reach speeds above 100Mbps. Bypassing the switch resulted in the expected speeds that were double that.
My network looks approximately like this: [ROUTER] cat6 [SWITCH] cat6 [SWITCH] cat6 [NIC]
(Yes, I have multiple switches inline).
I found my solution in the Arch forums here.
It turns out the problem was caused by auto-negotiation being enabled at both ends of the link and not agreeing on who sets speed/duplex for link at gigabit speeds, resulting in the NIC staying at Fast Ethernet (10/100 Mbps) speeds.
The solution was simple.
- Install ethtool
- I use Arch, ethtool is in the standard repos. Not sure for Deb/*buntu/etc users.
- Find your NIC identifier
ip link. In my case it was
- Disable Auto-negotiation and manually set the speed.
sudo ethtool -s eno1 autoneg off speed 1000 duplex full
And that’s it.