Drop Tail and RED–Two AQM Mechanisms
1. Why Active Queue Management (AQM) Mechanism
Network bandwidth is shared by users. Users want to get as much bandwidth as possible. However, there’s always limited bandwidth. When the bandwidth cannot satisfy what everyone is trying to get, congestion might occur. That’s why there’re congestion avoidance algorithms implemented in TCP at the users’ end.
But we cannot simply rely on end hosts to avoid congestion. Although TCP is designed to avoid congestion, hackers might change TCP implementation to grasp more bandwidth than other users; And how about UDP? Although TCP takes most of the Internet traffic, UDP senders can send lots of traffic which congest the network. Therefore, gateway/routers are identified as the most appropriate place to detect and avoid congestion, and allocate bandwidth fairly.
There’re two types of algorithms have been studied related to congestion control at gateways: queue management algorithms and scheduling algorithms. Scheduling algorithms work by scheduling which packet from which flow is going to be processed by the gateway. In this way, it allocates bandwidth among flows. On the other hand, queue management algorithms manage the flows by managing the buffer at the gateway.
2. Drop Tail
Drop Tail is a simple active queuing management (AQM) algorithm used in many routers. It doesn’t differentiate traffic from different sources. As long as the queue is filled up, it will drop subsequent packets arrived. In other words, drop the tail of sequence of packets.
Drop Tail is simple and easy to implement, however, it suffers from a couple of drawbacks.
● It doesn’t distribute buffer space fairly. Because Drop Tail doesn’t differentiate traffic from different sources, sources with higher traffic volume will take more buffer space.
● If multiple TCP connections exist in the system and a buffer overflow will cause TCP global synchronization, which reduce the network throughput and utility significantly.
3. Random Early Detection (RED)
Random Early Detection or Random Early Drop (RED) is another AQM. It monitors the average queue size and take actions on packet (either drop or mark) based on statistical probabilities.
RED is designed with the following goals,
● Provide connection avoidance by controlling the average queue size
● Avoid TCP global synchronization
● Avoid bias against bursty traffic
● Maintain an upper bound on average queue size even the transport-layer protocols doesn’t cooperate.
In order to achieve the goals, RED operates in three regions. When the average queue size lower than th_min, all packets are accepted; when the average queue size is between th_min and th_max, RED drops or marks a packet by a probability, which is calculated based on the average queue size, and the number of packets transmitted since the last dropped/marked packet in this flow; When average queue size goes beyond th_max, all packets will be dropped/marked.
In this way, RED monitors the average queue size to detect congestion, drops/marks the packet randomly to avoid global synchronization, and allows fluctuations in the actual queue size to accommodate bursty traffic and transient congestion. In case the transport-layer protocol doesn’t cooperate, RED can be configured to drop packets to maintain an upper bound.
Below is a figure illustrates how RED works in detail,
Figure 1. How RED Works
References
1. Floyd, S. and Jacobson, V. 1993. Random Early Detection Gateways for Congestion Avoidance. IEEE/ACM Transactions on Networking.
Leave a Reply Cancel reply
40% Discount on My Book — Android NDK Cookbook
Android NDK Cookbook ebook 40% discount with promotion code MREANC40 at Packt Publishing The promotion code is valid until 15th June.Categories
- Android Apps (18)
- Android Audio Editor (1)
- TS 2 (3)
- Video Converter Android (8)
- Video2Gif (1)
- Android Tutorial (26)
- Android Dev Tools (1)
- API illustrated (8)
- Multimedia API (3)
- ffmpeg on Android (4)
- NDK (6)
- UI (5)
- Animation (1)
- Code Snippet (2)
- Coding Beyond Technique (18)
- a word, a world (4)
- Bug Rectified (4)
- Programming Habit (1)
- Software as a Career (1)
- Software as User Experience (1)
- Compilers and Related (2)
- ELF (2)
- Computer Languages (31)
- C/C++ (13)
- Java (9)
- JavaScript (2)
- PHP (1)
- Python (8)
- Data Structure & Algorithms (29)
- Bits (1)
- Data Structure (5)
- Integers (10)
- BigInteger (1)
- Prime (4)
- Search (3)
- Sorting (5)
- Strings (5)
- Database (1)
- SQLite (1)
- Digital Signal Processing (33)
- Distributed Systems (17)
- Apache Cassandra (6)
- Apache Hadoop (8)
- Apache Avro (3)
- Apache Nutch (3)
- Apache Solr (1)
- Linux Study Notes (40)
- crontab (1)
- Linux Kernel Programming (8)
- Linux Programming (12)
- IPC (2)
- Linux Network Programming (5)
- Linux Signals (2)
- Linux Shell Scripting (1)
- ssh (3)
- Machinery (30)
- misc (1)
- My Ideas (1)
- My Project (3)
- Mobile Caching (1)
- Selective Decoding (2)
- My Publication (1)
- My Readings (1)
- Networking (15)
- Program for Performance (8)
- Uncategorized (1)
- Virtual Machine (2)
- Web Dev (8)
- web components (3)
- Android Apps (18)
Recent Comments
Archives
- May 2013 (1)
- April 2013 (1)
- March 2013 (4)
- December 2012 (2)
- November 2012 (6)
- October 2012 (6)
- September 2012 (3)
- August 2012 (13)
- July 2012 (15)
- June 2012 (3)
- May 2012 (8)
- April 2012 (4)
- March 2012 (13)
- February 2012 (19)
- January 2012 (9)
- December 2011 (11)
- November 2011 (12)
- October 2011 (4)
- September 2011 (12)
- August 2011 (16)
- July 2011 (15)
- June 2011 (6)
- May 2011 (10)
- April 2011 (13)
- March 2011 (20)
- February 2011 (4)
- November 2010 (2)
- May 2010 (1)
- April 2010 (1)
- February 2010 (1)




