Informally, congestion is when too many sources are sending too much data at a rate too fast for the network to handle.
This can manifest in several ways:
- Long delays ( from queueing in router buffers)
- Packet loss (from buffer overflow at routers)
This is a different problem flow control (congestion is more of an overall issue with the network).
- Flow control ⇒ one sender is sending too fast for one receiver
- Congestion control ⇒ too many senders are sending too fast
- Note that this is also one of the top 10 problems to solve for the internet
The causes/costs of congestion include:
- Premature timeout ⇒ packets are retransmitted ⇒ unnecessary duplicates are sent
- When packets are lost (i.e. dropped at router due to full buffer), they must be retransmitted
- Sender timer can time out prematurely ⇒ 2 copies are sent, both of which are delivered


- In practice, we often send more data than can be handled (i.e. packets will be retransmited, leading to duplicates) - higher rate than $\lambda_{in}$ ⇒ actual rate is $\lambda_{in}'$
- Throughput for output is not higher, as duplicates are not considered
- $\lambda_{out} < \lambda_{in}$
- Hosts will assume timeout in practice ⇒ unnecessary retransmissions lead to slowdown of network
- While routers may be operating at maximum speed, this may not be enough to match the throughput of links
- More work is needed for given receiver throughput due to retransmission
- Unneeded retransmsissions occur, as links carry multiple copies of a packet (lower max achievable throughput)
For example, consider the following case: