100M Full-Duplex vs Auto-Negotiate.

Problem descriptions:

I have a system running on an Intel pro VE running 100mbps full-duplex. The default option is auto-negotiate but I explicitly set it to 100mbp full-duplex.

I’m behind a router.

Interestingly, my internet connection starts giving problems: connection timeouts; page not loading; extreme ping times, etc etc etc

Yet another system’s Internet connection is fine.

I was puzzled. To solve the problem, I changed the settings from 100mbps full duplex back to auto negotiate.

And my internet connection worked fine again. What’s wrong with a 100mbps full duplex?

OK, here we go:

FastEthernet Auto-Negotiation uses something called Fast Link Pulse or FLP to signal to each other speed and duplex information. Its a modification of the original ethernet hearbeat signal and operates strictly on the physical layer before the link comes up. Its akin to the ethernet jam signal, its critical to ethernet operation but a user doesn’t really need to know about it.

So when you connect two auto-negotiation devices they signal each other and hopefully agree on a speed and duplex, although this is still sometimes problematic between vendors.

If you disable auto-negotiation on one end by fixing the speed and duplex, FLPs are no longer sent. So one end is sending and listening for FLP and the other end isn’t. Its fixed. The auto end must now ‘guess’ what the non-negotiating partner is doing and it does this by criteria set down by the IEEE.

Now Speed it can work out by listening for a preamble and deriving a clock from it, no problem. But duplex must really be guessed and it does this on the basis of what is most likely (in the IEEE’s eyes)to be compatible. In all cases the IEEE decided that Half Duplex is more likely to be compatible than full because there are more half duplex devices around than full, go figure.

So the auto end will end up as 100M half duplex. If you set your end to 100M full duplex then you have a mismatch. The Full end will transmit while the half end is transmitting and the half end will treat that as a collision, back off and send the jam signal and everyone clears down as per normal binary exponential backoff.

This will cause more and more errors the more loaded the link becomes. Often you will find that pings work fine, but when you try to do anything serious with the link it all goes wrong. Classic symtoms.

If you want to go full duplex, as we often do with routers, servers
and switch trunks where the consequences of auto-negotiation failing are much greater, then you need to set both ends to FULL.

Auto-Half you would get away with, but I don’t personally recommend it. Go for either Auto-Auto, Full-Full or Half-Half.