Like every other website on the planet, SmallNetBuilder uses cookies. Our cookies track login status, but we only allow admins to log in anyway, so those don't apply to you. Any other cookies you pick up during your visit come from advertisers, which we don't control. If you continue to use the site, you agree to tolerate our use of cookies. Thank you!

The problems usually arise when there is a mixture of gigabit and Fast Ethernet (100 Mbps) clients. The problem scenario usually involves simultaneous transfers from a single gigabit-equipped client to a mix of gigabit and Fast Ethernet clients. Figure 1 illustrates the troublesome setup. (The Netgear switch is just used for illustration. The problem is common to virtually all non-managed gigabit switches.)

Figure 1: Flow Control test setup

The expected behavior in this configuration is for the sender's gigabit bandwidth to be divided between the two receivers. Each receiver would lose some throughput due to the overhead of the simultaneous tranfers. But both would still function at speeds near those experienced when running solo.

But what readers have reported are instances of gigabit links being forced to Fast Ethernet speeds. One reader said that merely plugging a NIC running at 100 Mbps into a gigabit switch was enough to force all gigabit links to 100 Mbps speed. But the more common scenario requires simultaneous transfers from a single gigabit machine to a mix of gigabit and 100 Mbps computers.

The Culprit - Flow Control

Once a helpful reader (thanks, Walken!) provided a detailed description of the problem and some links to supporting documentation, the reason for this behavior made sense. The problem is caused by 802.3x Flow Control.

Flow control was intended to handle the situation where a transmitting computer is sending data faster than a receiving machine can handle it. The IEEE 802.3x standard specifies a PAUSE flow control mechanism communicated via MAC Control frames in full duplex Ethernet link segments. Like jumbo frames, the PAUSE mechanism requires all device in the data flow path to support it, which includes the switch.

Unfortunately, it seems (at least in small networks) that 802.3x does more harm than good. This may be partly because it duplicates the loss-based flow control mechanism already built into the TCP protocol. But whatever, the reason, I was able to confirm that the throughput loss that some people were attributing to "defective" or "low performance" switches, was in fact, due to Flow Control.