Title: TCP Congestion Control
1 2TCP Congestion Control
Strategy Send packets into the network without
reservations and then react to observable events
that occur.
3End-to-End Congestion Control
- Distributed algorithm there is no central
observer monitoring whether packets are being
dropped by routers. Sources should get feedback
from endpoints. - A source sends a packet out. When it receives an
ACK, it concludes the packet arrived at the
destination (and has thus left the network). At
this point, it should be safe to insert a new
packet.
4Additive Increase/Multiplicative Decrease
- TCP is connection oriented for each open
connection, define a state variable
CongestionWindow. - The source uses this variable to determine how
much data it can have in transit at any given
time. - The maximum number of unACKed bytes is the
minimum of AdvertisedWindow and CongestionWindow.
- A TCP source can send no faster than the slowest
component (network or destination host) can
accommodate.
5Additive Increase/Multiplicative Decrease
- AdvertisedWindow is set by the receiving side of
a connection. - CongestionWindow should be decreased when
congestion is higher, and increased when
congestion is lower. - Use timeouts to sense congestion for every
timeout observed, halve the CongestionWindow
(multiplicative decrease). The variable is never
allowed to fall below on MSS. - For every ACKed packet, TCP adds one MSS to
CongestionWindow
6The Evolution of CongestionWindow
- Note that the algorithm states that the source is
willing to decrease the window at a much faster
rate than it is willing to increase it.
Question Why should the algorithm be more
conservative with increases than with decreases?
7A Fairy Tale
TCP
- Once upon a time
- There was a little transport protocol called TCP.
She was always eager to make the best use of the
available bandwidth. When a connection was
started, she tried to send as many packets as the
AdvertisedWindow allowed. Things didnt go very
well for TCP after that
BIG BAD PACKET LOSS WOLF
8Factoid
- TCP is used over connections with bandwidth
ranging from 9600 bps to 2.4 Gbps.
9Slow Start
- Set CongestionWindow to 1. Send as many packets
as indicated in CongestionWindow. - If all packets sent are ACKed, then double
CongestionWindow. - Send as many packets as indicated in
CongestionWindow. - If all packets sent are ACKed, then double
CongestionWindow. - Send as many packets as indicated in
CongestionWindow. - If all packets sent are ACKed, then double
CongestionWindow. -
16
CongestionWindow
8
4
2
1
time
10Packets in Transit
Additive Increase
Slow Start
11Ok but where does it stop?
- Eventually, one or more packets are not ACKed
because somewhere along the way they got dropped. - If the connection times our waiting for an ACK,
halve the CongestionWindow. - The last value of used before there was packet
loss is the target congestion window. Since
this is useful information, we save it in a
variable called CongestionThreshold. - Reset CongestionWindow to one packet and start
over. For every ACK received, increment
CongestionWindow by one until CongestionThreshold.
- After that, increment CongestionWindow slowly, by
one packet for every elapsed RTT.
12TCP Congestion Control in action
Timeout CW halved, CT set
Packet loss no new packets sent
Linear ramp up
Exponential ramp up
Exponential ramp up til CT
Linear ramp up
Packet loss no new packets sent
13Fast Retransmit
- Implementation detail TCP timers were too
coarse-grained. - Consequence Long periods of time in which the
connection would go dead waiting for a timer to
expire. - Heuristic Sometimes it may be beneficial to
trigger a retransmit before a timer expires. - Fast retransmit Every time a packet arrives at
the receiver, ACK it, even if this SeqNo has
already been ACKed. Clearly, this will lead to
duplicate ACKs. The sender uses this information
as a hint that some packet has been lost. TCP
waits for three duplicate ACKs before
retransmitting a packet.
14Fast Retransmit in action
15Fast Recovery
- Fast retransmit may signal congestion. When that
happens, instead of dropping the CongestionWindow
down to one packet and run slow start, use the
ACKs in transit to trigger the sending of new
packets.