TCP AIMD
The AIMD approach to congestion control involves increasing/decreasing the size of packet windows to control congestion.
- Senders can increase sending rate until packet loss (i.e. congestion occurs)
- Decrease sending rate on loss events
- Additive increase
- Increase sending rate by 1 maximum segment size until loss is detected (
cwnd
)
- Max window size ⇒ number of segments sent at once
- Multiplicative Decrease
- Sending rate is cut in half on loss detected by triplicate duplicate (ACK) - Reno
- Sending rate is cut to 1 MSS (max segment size) when loss is detected by timeout
- Worst case ⇒ all packets in a window were dropped
AIMD has sawtooth behavior:

AIMD is a distributed, asynchronous algorithm that has been shown to:
- Optimize congested flow rates network wide
- Have desirable stabaility properties
Details:
- TCP sender behavior (roughly) is to send
cwnd
bytes, wait RTT for ACKs, then send more bytes
- TCP rate $\approx \frac{\text{cwnd}}{RTT}$ bytes/second
- TCP sender will limit transmission
LastByteSent - LastByteAcked ≤ cwnd
cwnd
is dynamically adjusted in response to observed network congestion

TCP slow start is used for the initial increase in packet send rate:
- When connection begins, increase rate exponentially until the first loss event occurs
cwnd
starts at 1 MSS
cwnd
is doubled every RTT
- Implemented by incrementing
cwnd
for every ACK received