Solution: Duplex Mismatch¶
Summary¶
The server NIC is forced to 1000Mbps full-duplex, while the switch port is set to auto-negotiate. Because the server is not participating in auto-negotiation, the switch cannot determine the duplex setting and falls back to half-duplex (per IEEE 802.3 spec). This creates a duplex mismatch: the server sends in full-duplex (no carrier sense), while the switch expects half-duplex, resulting in collisions, late collisions, and severe throughput degradation.
Senior Workflow¶
Step 1: Check the server NIC settings¶
Look for: - Speed: 1000Mb/s - Duplex: Full - Auto-negotiation: off <-- This is the problem
Step 2: Check the switch port settings¶
Look for: - "Half-duplex, 1000Mb/s" -- the switch fell back to half-duplex - Input errors, CRC, runts incrementing - "Late collisions" counter > 0
Step 3: Check error counters on the server¶
Expect: high collision counts, tx_errors.
Step 4: Understand the root cause¶
When the server forces 1000/full: 1. Server does NOT send auto-negotiation signals (FLP bursts) 2. Switch detects link (electrical signal present) at 1000Mbps 3. Switch cannot determine duplex -- defaults to half-duplex per IEEE 802.3 4. Server transmits without checking carrier (full-duplex behavior) 5. Switch interprets simultaneous send/receive as collisions
Step 5: Apply the fix¶
On the server:
ethtool -s eth0 autoneg on
# Or in /etc/network/interfaces or netplan config, remove forced settings
On the switch (if also forced):
sw-access-03(config)# interface GigabitEthernet0/12
sw-access-03(config-if)# speed auto
sw-access-03(config-if)# duplex auto
Step 6: Verify after fix¶
# Server side:
ethtool eth0
# Should show: Auto-negotiation: on, Speed: 1000Mb/s, Duplex: Full
# Switch side:
sw-access-03# show interface Gi0/12
# Should show: Full-duplex, 1000Mb/s, media type is 10/100/1000BaseTX
# Clear counters and monitor:
sw-access-03# clear counters Gi0/12
Step 7: Test throughput¶
Common Pitfalls¶
- "Auto-negotiation is unreliable": This was sometimes true for 10/100 Ethernet in the 1990s. For Gigabit Ethernet, auto-negotiation is mandatory per IEEE 802.3ab and is extremely reliable.
- Forcing only one side: If you force one side, you MUST force the other side to match. Best practice: use auto-negotiation on both.
- Confusing link-up with correct config: The link comes up in both cases because speed can be detected by signal characteristics. Duplex requires auto-negotiation to determine.
- Not checking error counters: Late collisions are the hallmark of duplex mismatch. Regular collisions in isolation could be other issues.
- Not clearing counters after fix: Old error counts persist. Clear them to confirm the fix is working.
- Ignoring Gigabit spec: 1000BASE-T technically requires auto-negotiation for proper operation. Some NICs tolerate forcing but behavior is undefined.