36 Chapter 2: End-to-End QoS: Quality of Service at Layer 3 and Layer 2
Unlike UDP, which has no acknowledgment mechanism, with TCP, when a packet is
received, the receiver acknowledges receipt of that packet by sending a message back to the
sender. If no acknowledgment is received within a period of time, the sender first assumes
that data is being sent too rapidly and reduces the TCP window size, and then the sender
resends the unacknowledged packet(s). Gradually, the sender increases the rate at which
packets are being sent by increasing the window size.
Without congestion avoidance, when a particular queue becomes completely full,
something called tail drop occurs. Tail drop is the term used to describe what happens when
the (n +1) packet arrives at a queue that is only capable of holding n packets. That packet
is dropped and, consequently, no acknowledgment is sent to the sender of that packet. As
previously mentioned, this causes a reduction in the window size and a retransmission.
Tail drop presents several problems, however. Most troublesome is the fact that tail drop
does not use any intelligence to determine which packet(s) should be dropped; rather the
(n + 1) packet is just dropped, regardless of what type of packet it is. This could mean that
a packet of the most important traffic type in your network is dropped, whereas a packet
from the least important traffic type is transmitted. Another problem associated with tail
drop is global synchronization, which reduces the overall throughput of a link with many
flows (but is beyond the scope of this discussion).
All Catalyst switches experience tail drop when transmit queues become full. However,
several Catalyst switches support configuration of tail-drop thresholds among various
queues to minimize full conditions with higher-priority traffic. Chapters 6 and 8 discuss
tail-drop thresholds and configuration options available on the Catalyst 3550 Family and
Catalyst 6500 Family of switches, respectively.
Random Early Detection (RED)
The problems of tail drop and global synchronization can both be addressed with
congestion avoidance. Congestion avoidance is sometimes called active queue
management, or Random Early Detection (RED). The Introduction section of RFC 2309
defines the need for active queue management as follows:
The traditional technique for managing router queue lengths is to set a maximum length (in terms of
packets) for each queue, accept packets for the queue until the maximum length is reached, then reject
(drop) subsequent incoming packets until the queue decreases because a packet from the queue has been
transmitted. This technique is known as “tail drop”, since the packet that arrived most recently (i.e., the one
on the tail of the queue) is dropped when the queue is full. This method has served the Internet well for
years, but it has two important drawbacks.
1. Lock-Out
In some situations tail drop allows a single connection or a few flows to monopolize queue space,
preventing other connections from getting room in the queue. This “lock-out” phenomenon is often the
result of synchronization or other timing effects.