Let us say we have switch with multiple gigabit interfaces and there is two machines connected to that switch, one with gigabit NIC and one with 100 mbps NIC and we start copying file from the gigabit machine to the fast ethernet machine. The file copy speed will be maximum 100 mbps but how the 1 gbps machine will know about the second party speed and send slower? Is it through TCP messages? And in case we are sending ICMP/UDP packets what will happen?
Fundamentally, if the switch can only forward packets at 100M, then the switch buffers will overflow and drop packets.
If you're using TCP, the sender will react to no ACKs by slowing down until an equilibrium (more or less) is reached.
If TCP is in use and Ethernet flow control is not the following will happen.
- The sender will start sending packets, initially slowly but then increasing the rate over time.
- When the data rate gets too high the packet buffer on the switch will fill up and a packet will be dropped.
- The sender will then back off the data rate, the rate on the line will remain around the capacity of the line gradually increasing until a packet is dropped and then backing off again.
Other protocol combinations may vary. In some cases large volumes of packets may end up being dropped by the switch.
The first and most commonly implemented flow control system for Ethernet used "pause frames". Pause frames were intended as a means of implementing "back pressure" within the Ethernet network so that switch buffers did not overflow as the speed of sending nodes was limited to what the downstream devices could tag. Unfortunately they created problems where one congested flow could cause blocking of other uncongested flows, so they are often disabled in practice.