10 congestion control.tmp...tcp congestion control 11 䡦each tcp connection has a window! controls...

196
Lecture 10: Congestion Control Revised 2/9/2014 CS 3700 Networks and Distributed Systems

Upload: others

Post on 18-Aug-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Lecture 10: Congestion Control

Revised 2/9/2014

CS 3700Networks and Distributed Systems

Page 2: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Transport Layer2

Function: ! Demultiplexing of data streams Optional functions: ! Creating long lived connections ! Reliable, in-order packet delivery ! Error detection ! Flow and congestion control Key challenges: ! Detecting and responding to congestion ! Balancing fairness against high utilization

Application

Presentation

Session

Transport

Network

Data Link

Physical

Page 3: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

❑ Congestion Control ❑ Evolution of TCP ❑ Problems with TCP

Outline3

Page 4: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

What is Congestion?4

Load on the network is higher than capacity

Page 5: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

What is Congestion?4

Load on the network is higher than capacity! Capacity is not uniform across networks■ Modem vs. Cellular vs. Cable vs. Fiber Optics

! There are multiple flows competing for bandwidth■ Residential cable modem vs. corporate datacenter

! Load is not uniform over time■ 10pm, Sunday night = Bittorrent Game of Thrones

Page 6: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Why is Congestion Bad?5

Results in packet loss ! Routers have finite buffers ! Internet traffic is self similar, no buffer can prevent all drops ! When routers get overloaded, packets will be dropped Practical consequences ! Router queues build up, delay increases ! Wasted bandwidth from retransmissions ! Low network goodput

Page 7: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

The Danger of Increasing Load6

Knee – point after which ! Throughput increases very

slow ! Delay increases fast In an M/M/1 queue ! Delay = 1/(1 – utilization) Cliff – point after which ! Throughput ! 0 ! Delay ! ∞

Load

Load

Goo

dput

Del

ay

Knee Cliff

Page 8: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

The Danger of Increasing Load6

Knee – point after which ! Throughput increases very

slow ! Delay increases fast In an M/M/1 queue ! Delay = 1/(1 – utilization) Cliff – point after which ! Throughput ! 0 ! Delay ! ∞

Load

Load

Goo

dput

Del

ay

Knee Cliff

Ideal point

Page 9: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

The Danger of Increasing Load6

Knee – point after which ! Throughput increases very

slow ! Delay increases fast In an M/M/1 queue ! Delay = 1/(1 – utilization) Cliff – point after which ! Throughput ! 0 ! Delay ! ∞

Congestion Collapse

Load

Load

Goo

dput

Del

ay

Knee Cliff

Ideal point

Page 10: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Cong. Control vs. Cong. Avoidance7

Congestion Collapse

Goo

dput

Knee Cliff

Load

Page 11: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Cong. Control vs. Cong. Avoidance7

Congestion Collapse

Goo

dput

Knee Cliff

Load

Congestion Avoidance: Stay left of the knee

Page 12: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Cong. Control vs. Cong. Avoidance7

Congestion Collapse

Goo

dput

Knee Cliff

Load

Congestion Avoidance: Stay left of the knee

Congestion Control: Stay left of the cliff

Page 13: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Advertised Window, Revisited8

Does TCP’s advertised window solve congestion?

Page 14: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Advertised Window, Revisited8

Does TCP’s advertised window solve congestion?NO

The advertised window only protects the receiverA sufficiently fast receiver can max the window! What if the network is slower than the receiver?! What if there are other concurrent flows?

Page 15: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Advertised Window, Revisited8

Does TCP’s advertised window solve congestion?NO

The advertised window only protects the receiverA sufficiently fast receiver can max the window! What if the network is slower than the receiver?! What if there are other concurrent flows?Key points! Window size determines send rate! Window must be adjusted to prevent congestion collapse

Page 16: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Goals of Congestion Control9

Page 17: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Goals of Congestion Control9

1. Adjusting to the bottleneck bandwidth 2. Adjusting to variations in bandwidth 3. Sharing bandwidth between flows 4. Maximizing throughput

Page 18: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

General Approaches10

Do nothing, send packets indiscriminately! Many packets will drop, totally unpredictable performance! May lead to congestion collapse

Page 19: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

General Approaches10

Do nothing, send packets indiscriminately! Many packets will drop, totally unpredictable performance! May lead to congestion collapseReservations! Pre-arrange bandwidth allocations for flows! Requires negotiation before sending packets! Must be supported by the network

Page 20: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

General Approaches10

Do nothing, send packets indiscriminately! Many packets will drop, totally unpredictable performance! May lead to congestion collapseReservations! Pre-arrange bandwidth allocations for flows! Requires negotiation before sending packets! Must be supported by the networkDynamic adjustment! Use probes to estimate level of congestion! Speed up when congestion is low! Slow down when congestion increases! Messy dynamics, requires distributed coordination

Page 21: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

General Approaches10

Do nothing, send packets indiscriminately! Many packets will drop, totally unpredictable performance! May lead to congestion collapseReservations! Pre-arrange bandwidth allocations for flows! Requires negotiation before sending packets! Must be supported by the networkDynamic adjustment! Use probes to estimate level of congestion! Speed up when congestion is low! Slow down when congestion increases! Messy dynamics, requires distributed coordination

Page 22: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP Congestion Control11

Each TCP connection has a window! Controls the number of unACKed packetsSending rate is ~ window/RTTIdea: vary the window size to control the send rate

Page 23: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP Congestion Control11

Each TCP connection has a window! Controls the number of unACKed packetsSending rate is ~ window/RTTIdea: vary the window size to control the send rateIntroduce a congestion window at the sender! Congestion control is sender-side problem

Page 24: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Congestion Window (cwnd)12

Limits how much data is in transit Denominated in bytes

1. wnd = min(cwnd, adv_wnd); 2. effective_wnd = wnd – (last_byte_sent – last_byte_acked);

Page 25: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Congestion Window (cwnd)12

Limits how much data is in transit Denominated in bytes

1. wnd = min(cwnd, adv_wnd); 2. effective_wnd = wnd – (last_byte_sent – last_byte_acked);

last_byte_acked last_byte_sent

wnd

Page 26: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Congestion Window (cwnd)12

Limits how much data is in transit Denominated in bytes

1. wnd = min(cwnd, adv_wnd); 2. effective_wnd = wnd – (last_byte_sent – last_byte_acked);

last_byte_acked last_byte_sent

wnd

effective_wnd

Page 27: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Two Basic Components13

1. Detect congestion

Page 28: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Two Basic Components13

1. Detect congestion! Packet dropping is most reliably signal■ Delay-based methods are hard and risky

! How do you detect packet drops? ACKs■ Timeout after not receiving an ACK■ Several duplicate ACKs in a row (ignore for now)

Page 29: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Two Basic Components13

1. Detect congestion! Packet dropping is most reliably signal■ Delay-based methods are hard and risky

! How do you detect packet drops? ACKs■ Timeout after not receiving an ACK■ Several duplicate ACKs in a row (ignore for now)

Except on wireless networks

Page 30: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Two Basic Components13

1. Detect congestion! Packet dropping is most reliably signal■ Delay-based methods are hard and risky

! How do you detect packet drops? ACKs■ Timeout after not receiving an ACK■ Several duplicate ACKs in a row (ignore for now)

2. Rate adjustment algorithm! Modify cwnd! Probe for bandwidth! Responding to congestion

Except on wireless networks

Page 31: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Rate Adjustment14

Recall: TCP is ACK clocked! Congestion = delay = long wait between ACKs! No congestion = low delay = ACKs arrive quickly

Page 32: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Rate Adjustment14

Recall: TCP is ACK clocked! Congestion = delay = long wait between ACKs! No congestion = low delay = ACKs arrive quicklyBasic algorithm! Upon receipt of ACK: increase cwnd■ Data was delivered, perhaps we can send faster■ cwnd growth is proportional to RTT

! On loss: decrease cwnd■ Data is being lost, there must be congestion

Page 33: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Rate Adjustment14

Recall: TCP is ACK clocked! Congestion = delay = long wait between ACKs! No congestion = low delay = ACKs arrive quicklyBasic algorithm! Upon receipt of ACK: increase cwnd■ Data was delivered, perhaps we can send faster■ cwnd growth is proportional to RTT

! On loss: decrease cwnd■ Data is being lost, there must be congestion

Question: increase/decrease functions to use?

Page 34: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Utilization and Fairness15

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 35: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Utilization and Fairness15

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 36: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Utilization and Fairness15

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 37: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Utilization and Fairness15

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Max throughput for

flow 2

Zero throughput for

flow 1

Page 38: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Utilization and Fairness15

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Max throughput for

flow 1

Zero throughput for

flow 2

Page 39: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Utilization and Fairness15

Flow 1 Throughput

Flow

2 T

hrou

ghpu

tLess than full utilization

Page 40: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Utilization and Fairness15

Flow 1 Throughput

Flow

2 T

hrou

ghpu

tLess than full utilization

More than full utilization

(congestion)

Page 41: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Utilization and Fairness15

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Equal throughput (fairness)

Page 42: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Utilization and Fairness15

Flow 1 Throughput

Flow

2 T

hrou

ghpu

tIdeal point

• Max efficiency • Perfect fairness

Page 43: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Multiplicative Increase, Additive Decrease16

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 44: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Multiplicative Increase, Additive Decrease16

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 45: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Multiplicative Increase, Additive Decrease16

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 46: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Multiplicative Increase, Additive Decrease16

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 47: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Multiplicative Increase, Additive Decrease16

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 48: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Multiplicative Increase, Additive Decrease16

Not stable!

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 49: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Multiplicative Increase, Additive Decrease16

Not stable!Veers away from fairness

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 50: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Additive Increase, Additive Decrease17

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 51: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Additive Increase, Additive Decrease17

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 52: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Additive Increase, Additive Decrease17

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 53: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Additive Increase, Additive Decrease17

Stable

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 54: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Additive Increase, Additive Decrease17

StableBut does not converge to fairness

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 55: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Multiplicative Increase, Multiplicative Decrease18

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 56: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Multiplicative Increase, Multiplicative Decrease18

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 57: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Multiplicative Increase, Multiplicative Decrease18

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 58: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Multiplicative Increase, Multiplicative Decrease18

Stable

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 59: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Multiplicative Increase, Multiplicative Decrease18

StableBut does not converge to fairness

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 60: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Additive Increase, Multiplicative Decrease19

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 61: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Additive Increase, Multiplicative Decrease19

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 62: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Additive Increase, Multiplicative Decrease19

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 63: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Additive Increase, Multiplicative Decrease19

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 64: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Additive Increase, Multiplicative Decrease19

Converges to stable and fair cycle

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 65: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Additive Increase, Multiplicative Decrease19

Converges to stable and fair cycle

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 66: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Additive Increase, Multiplicative Decrease19

Converges to stable and fair cycleSymmetric around y=x

Flow 1 Throughput

Flow

2 T

hrou

ghpu

t

Page 67: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Implementing Congestion Control

Maintains three variables:! cwnd: congestion window! adv_wnd: receiver advertised window ! ssthresh: threshold size (used to update cwnd)For sending, use: wnd = min(cwnd, adv_wnd)

20

20

Page 68: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Implementing Congestion Control

Maintains three variables:! cwnd: congestion window! adv_wnd: receiver advertised window ! ssthresh: threshold size (used to update cwnd)For sending, use: wnd = min(cwnd, adv_wnd)Two phases of congestion control1. Slow start (cwnd < ssthresh)■ Probe for bottleneck bandwidth

2. Congestion avoidance (cwnd >= ssthresh)■ AIMD

20

20

Page 69: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Slow Start

Goal: reach knee quicklyUpon starting (or restarting) a connection! cwnd =1! ssthresh = adv_wnd! Each time a segment is ACKed, cwnd++

21

Load

Goo

dput

Knee Cliff

Page 70: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Slow Start

Goal: reach knee quicklyUpon starting (or restarting) a connection! cwnd =1! ssthresh = adv_wnd! Each time a segment is ACKed, cwnd++Continues until…! ssthresh is reached! Or a packet is lost

21

Load

Goo

dput

Knee Cliff

Page 71: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Slow Start

Goal: reach knee quicklyUpon starting (or restarting) a connection! cwnd =1! ssthresh = adv_wnd! Each time a segment is ACKed, cwnd++Continues until…! ssthresh is reached! Or a packet is lostSlow Start is not actually slow! cwnd increases exponentially

21

Load

Goo

dput

Knee Cliff

Page 72: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Slow Start Example22

cwnd = 1

Page 73: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Slow Start Example22

1cwnd = 1

cwnd = 2

Page 74: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Slow Start Example22

1

23

cwnd = 1

cwnd = 2

cwnd = 4

Page 75: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Slow Start Example22

1

23

4567

cwnd = 1

cwnd = 2

cwnd = 4

cwnd = 8

Page 76: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Slow Start Example22

1

23

4567

cwnd = 1

cwnd = 2

cwnd = 4

cwnd = 8

cwnd grows rapidly Slows down when… ! cwnd >= ssthresh ! Or a packet drops

Page 77: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Congestion Avoidance

AIMD mode ssthresh is lower-bound guess about location of the knee If cwnd >= ssthresh then each time a segment is ACKed increment cwnd by 1/cwnd (cwnd += 1/cwnd). So cwnd is increased by one only if all segments have been acknowledged

23

Page 78: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Congestion Avoidance Example24

0

3

6

9

12

t=0 t=1 t=2 t=3 t=4 t=5 t=6 t=7

Round Trip Times

cwnd

(in

segm

ents

)

cwnd = 1

cwnd = 2

cwnd = 4

cwnd = 8

cwnd = 9

ssthresh = 8

Page 79: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Congestion Avoidance Example24

0

3

6

9

12

t=0 t=1 t=2 t=3 t=4 t=5 t=6 t=7

Round Trip Times

cwnd

(in

segm

ents

)

Slow Start

cwnd = 1

cwnd = 2

cwnd = 4

cwnd = 8

cwnd = 9

ssthresh = 8

Page 80: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Congestion Avoidance Example24

0

3

6

9

12

t=0 t=1 t=2 t=3 t=4 t=5 t=6 t=7

Round Trip Times

cwnd

(in

segm

ents

)

Slow Start

cwnd >= ssthresh

cwnd = 1

cwnd = 2

cwnd = 4

cwnd = 8

cwnd = 9

ssthresh = 8

Page 81: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP Pseudocode

Initially:cwnd = 1; ssthresh = adv_wnd;

New ack received: if (cwnd < ssthresh) /* Slow Start*/ cwnd = cwnd + 1; else /* Congestion Avoidance */ cwnd = cwnd + 1/cwnd;

Timeout:/* Multiplicative decrease */ ssthresh = cwnd/2; cwnd = 1;

25

Page 82: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

The Big Picture

Time

cwnd

26

ssthresh

Page 83: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

The Big Picture

Time

cwnd

Slow Start

26

ssthresh

Page 84: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

The Big Picture

Time

cwnd

Timeout

Slow Start

26

ssthresh

Page 85: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

The Big Picture

Time

cwnd

Timeout

Slow Start

26

ssthresh

Page 86: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

The Big Picture

Time

cwnd

Timeout

Slow Start

Congestion Avoidance

26

ssthresh

Page 87: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

The Big Picture

Time

cwnd

Timeout

Slow Start

Congestion Avoidance

26

ssthresh

Page 88: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

The Big Picture

Time

cwnd

Timeout

Slow Start

Congestion Avoidance

26

ssthresh

Page 89: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

❑ Congestion Control ❑ Evolution of TCP ❑ Problems with TCP

Outline27

Page 90: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

The Evolution of TCP28

Thus far, we have discussed TCP Tahoe! Original version of TCPHowever, TCP was invented in 1974!! Today, there are many variants of TCP

Page 91: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

The Evolution of TCP28

Thus far, we have discussed TCP Tahoe! Original version of TCPHowever, TCP was invented in 1974!! Today, there are many variants of TCPEarly, popular variant: TCP Reno! Tahoe features, plus…! Fast retransmit! Fast recovery

Page 92: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP Reno: Fast Retransmit29

Problem: in Tahoe, if segment is lost, there is a long wait until the RTO Reno: retransmit after 3 duplicate ACKs

1

23

4567

cwnd = 1

cwnd = 2

cwnd = 4

2

34

444

Page 93: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP Reno: Fast Retransmit29

Problem: in Tahoe, if segment is lost, there is a long wait until the RTO Reno: retransmit after 3 duplicate ACKs

1

23

4567

cwnd = 1

cwnd = 2

cwnd = 4

2

34

444

3 Duplicate ACKs

Page 94: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP Reno: Fast Recovery

After a fast-retransmit set cwnd to ssthresh/2 ! i.e. don’t reset cwnd to 1 ! Avoid unnecessary return to slow start ! Prevents expensive timeouts But when RTO expires still do cwnd = 1 ! Return to slow start, same as Tahoe ! Indicates packets aren’t being delivered at all ! i.e. congestion must be really bad

30

Page 95: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Fast Retransmit and Fast Recovery31

Time

cwnd

ssthresh

Page 96: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Fast Retransmit and Fast Recovery31

Time

cwnd

Slow Start

ssthresh

Page 97: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Fast Retransmit and Fast Recovery31

Time

cwnd

Timeout

Slow Start

ssthresh

Page 98: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Fast Retransmit and Fast Recovery31

Time

cwnd

Timeout

Slow Start

ssthresh

Page 99: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Fast Retransmit and Fast Recovery31

Time

cwnd

Timeout

Slow Start

Congestion Avoidance Fast Retransmit/Recovery

ssthresh

Page 100: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Fast Retransmit and Fast Recovery31

Time

cwnd

Timeout

Slow Start

Congestion Avoidance Fast Retransmit/Recovery

ssthresh

Timeout

Page 101: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Fast Retransmit and Fast Recovery

At steady state, cwnd oscillates around the optimal window size

31

Time

cwnd

Timeout

Slow Start

Congestion Avoidance Fast Retransmit/Recovery

ssthresh

Timeout

Page 102: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Fast Retransmit and Fast Recovery

At steady state, cwnd oscillates around the optimal window sizeTCP always forces packet drops

31

Time

cwnd

Timeout

Slow Start

Congestion Avoidance Fast Retransmit/Recovery

ssthresh

Timeout

Page 103: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Many TCP Variants…32

Tahoe: the original! Slow start with AIMD! Dynamic RTO based on RTT estimateReno: fast retransmit and fast recovery

Page 104: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Many TCP Variants…32

Tahoe: the original! Slow start with AIMD! Dynamic RTO based on RTT estimateReno: fast retransmit and fast recoveryNewReno: improved fast retransmit! Each duplicate ACK triggers a retransmission! Problem: >3 out-of-order packets causes pathological

retransmissions

Page 105: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Many TCP Variants…32

Tahoe: the original! Slow start with AIMD! Dynamic RTO based on RTT estimateReno: fast retransmit and fast recoveryNewReno: improved fast retransmit! Each duplicate ACK triggers a retransmission! Problem: >3 out-of-order packets causes pathological

retransmissionsVegas: delay-based congestion avoidance

Page 106: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Many TCP Variants…32

Tahoe: the original! Slow start with AIMD! Dynamic RTO based on RTT estimateReno: fast retransmit and fast recoveryNewReno: improved fast retransmit! Each duplicate ACK triggers a retransmission! Problem: >3 out-of-order packets causes pathological

retransmissionsVegas: delay-based congestion avoidanceAnd many, many, many more…

Page 107: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP in the Real World33

What are the most popular variants today? ! Key problem: TCP performs poorly on high bandwidth-delay

product networks (like the modern Internet) ! Compound TCP (Windows) ■ Based on Reno ■ Uses two congestion windows: delay based and loss based ■ Thus, it uses a compound congestion controller

! TCP CUBIC (Linux) ■ Enhancement of BIC (Binary Increase Congestion Control) ■ Window size controlled by cubic function ■ Parameterized by the time T since the last dropped packet

Page 108: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

High Bandwidth-Delay Product34

Key Problem: TCP performs poorly when! The capacity of the network (bandwidth) is large! The delay (RTT) of the network is large! Or, when bandwidth * delay is large■ b * d = maximum amount of in-flight data in the network■ a.k.a. the bandwidth-delay product

Page 109: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

High Bandwidth-Delay Product34

Key Problem: TCP performs poorly when! The capacity of the network (bandwidth) is large! The delay (RTT) of the network is large! Or, when bandwidth * delay is large■ b * d = maximum amount of in-flight data in the network■ a.k.a. the bandwidth-delay product

Why does TCP perform poorly?! Slow start and additive increase are slow to converge! TCP is ACK clocked■ i.e. TCP can only react as quickly as ACKs are received■ Large RTT ! ACKs are delayed ! TCP is slow to react

Page 110: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Poor Performance of TCP Reno CC35

Bottleneck Bandwidth (Mb/s)

Avg. TCP Utilization 50 flows in both directions

Buffer = BW x Delay RTT = 80 ms

Round Trip Delay (sec)

Avg. TCP Utilization

50 flows in both directions Buffer = BW x Delay

BW = 155 Mb/s

Page 111: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Goals36

Fast window growth! Slow start and additive increase are too slow when

bandwidth is large! Want to converge more quickly

Page 112: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Goals36

Fast window growth! Slow start and additive increase are too slow when

bandwidth is large! Want to converge more quicklyMaintain fairness with other TCP varients! Window growth cannot be too aggressive

Page 113: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Goals36

Fast window growth! Slow start and additive increase are too slow when

bandwidth is large! Want to converge more quicklyMaintain fairness with other TCP varients! Window growth cannot be too aggressiveImprove RTT fairness! TCP Tahoe/Reno flows are not fair when RTTs vary widely

Page 114: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Goals36

Fast window growth! Slow start and additive increase are too slow when

bandwidth is large! Want to converge more quicklyMaintain fairness with other TCP varients! Window growth cannot be too aggressiveImprove RTT fairness! TCP Tahoe/Reno flows are not fair when RTTs vary widelySimple implementation

Page 115: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Compound TCP Implementation37

Default TCP implementation in WindowsKey idea: split cwnd into two separate windows! Traditional, loss-based window! New, delay-based window

Page 116: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Compound TCP Implementation37

Default TCP implementation in WindowsKey idea: split cwnd into two separate windows! Traditional, loss-based window! New, delay-based windowwnd = min(cwnd + dwnd, adv_wnd)! cwnd is controlled by AIMD! dwnd is the delay window

Page 117: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Compound TCP Implementation37

Default TCP implementation in WindowsKey idea: split cwnd into two separate windows! Traditional, loss-based window! New, delay-based windowwnd = min(cwnd + dwnd, adv_wnd)! cwnd is controlled by AIMD! dwnd is the delay windowRules for adjusting dwnd:! If RTT is increasing, decrease dwnd (dwnd >= 0)! If RTT is decreasing, increase dwnd! Increase/decrease are proportional to the rate of change

Page 118: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Compound TCP Example38

Time

cwnd

Page 119: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Compound TCP Example38

Time

cwnd

Timeout

Slow Start

Page 120: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Compound TCP Example38

Time

cwnd

Timeout

Slow Start

Page 121: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

High RTT

Compound TCP Example38

Time

cwnd

Timeout

Slow Start

Page 122: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

High RTT

Compound TCP Example38

Time

cwnd

Timeout

Slow Start

Slower cwnd

growth

Page 123: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

High RTT

Compound TCP Example38

Time

cwnd

Timeout

Slow Start

Slower cwnd

growth

Page 124: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Low RTT

High RTT

Compound TCP Example38

Time

cwnd

Timeout

Slow Start

Slower cwnd

growth

Page 125: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Low RTT

High RTT

Compound TCP Example38

Time

cwnd

Timeout

Slow Start

Slower cwnd

growth

Faster cwnd

growth

Page 126: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Low RTT

High RTT

Compound TCP Example38

Time

cwnd

Timeout

Slow Start

TimeoutSlower cwnd

growth

Faster cwnd

growth

Page 127: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Low RTT

High RTT

Compound TCP Example

Aggressiveness corresponds to changes in RTT

38

Time

cwnd

Timeout

Slow Start

TimeoutSlower cwnd

growth

Faster cwnd

growth

Page 128: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Low RTT

High RTT

Compound TCP Example

Aggressiveness corresponds to changes in RTTAdvantages: fast ramp up, more fair to flows with different RTTs

38

Time

cwnd

Timeout

Slow Start

TimeoutSlower cwnd

growth

Faster cwnd

growth

Page 129: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Low RTT

High RTT

Compound TCP Example

Aggressiveness corresponds to changes in RTTAdvantages: fast ramp up, more fair to flows with different RTTsDisadvantage: must estimate RTT, which is very challenging

38

Time

cwnd

Timeout

Slow Start

TimeoutSlower cwnd

growth

Faster cwnd

growth

Page 130: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP CUBIC Implementation39

Default TCP implementation in Linux Replace AIMD with cubic function

! B ! a constant fraction for multiplicative increase ! T ! time since last packet drop ! W_max ➔ cwnd when last packet dropped

Page 131: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP CUBIC Example40

Time

cwnd

Page 132: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP CUBIC Example40

Time

cwnd

Timeout

Slow Start

Page 133: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP CUBIC Example40

Time

cwnd

Timeout

Slow Start

cwndmax

Page 134: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP CUBIC Example40

Time

cwnd

Timeout

Slow Start

cwndmax

Page 135: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP CUBIC Example40

Time

cwnd

Timeout

Slow Start

cwndmax

Fast ramp up

Page 136: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP CUBIC Example40

Time

cwnd

Timeout

Slow Start

cwndmax

Fast ramp up

Stable Region

Page 137: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP CUBIC Example40

Time

cwnd

Timeout

Slow Start

cwndmax

Fast ramp up

Stable Region

Slowly accelerate to probe for bandwidth

Page 138: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP CUBIC Example40

Time

cwnd

Timeout

Slow Start

CUBIC Function

cwndmax

Page 139: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP CUBIC Example40

Time

cwnd

Timeout

Slow Start

CUBIC Function

cwndmax

Page 140: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP CUBIC Example40

Time

cwnd

Timeout

Slow Start

CUBIC Function

cwndmax

Page 141: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP CUBIC Example40

Time

cwnd

Timeout

Slow Start

CUBIC Function

cwndmax

Page 142: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP CUBIC Example40

Time

cwnd

Timeout

Slow Start

CUBIC Function

cwndmax

Page 143: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP CUBIC Example

Less wasted bandwidth due to fast ramp up

40

Time

cwnd

Timeout

Slow Start

CUBIC Function

cwndmax

Page 144: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP CUBIC Example

Less wasted bandwidth due to fast ramp upStable region and slow acceleration help maintain fairness ! Fast ramp up is more aggressive than additive increase ! To be fair to Tahoe/Reno, CUBIC needs to be less aggressive

40

Time

cwnd

Timeout

Slow Start

CUBIC Function

cwndmax

Page 145: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Simulations of CUBIC Flows41

Page 146: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Simulations of CUBIC Flows41

CUBIC

CUBIC

RenoReno

Page 147: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Deploying TCP Variants

TCP assumes all flows employ TCP-like congestion control! TCP-friendly or TCP-compatible! Violated by UDP :(

42

Page 148: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Deploying TCP Variants

TCP assumes all flows employ TCP-like congestion control! TCP-friendly or TCP-compatible! Violated by UDP :(If new congestion control algorithms are developed, they must be TCP-friendly

42

Page 149: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Deploying TCP Variants

TCP assumes all flows employ TCP-like congestion control! TCP-friendly or TCP-compatible! Violated by UDP :(If new congestion control algorithms are developed, they must be TCP-friendlyBe wary of unforeseen interactions! Variants work well with others like themselves! Different variants competing for resources may trigger unfair,

pathological behavior

42

Page 150: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP Perspectives

Cerf/Kahn! Provide flow control! Congestion handled by retransmission

43

Page 151: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP Perspectives

Cerf/Kahn! Provide flow control! Congestion handled by retransmissionJacobson / Karels! Need to avoid congestion! RTT estimates critical! Queuing theory can help

43

Page 152: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

TCP Perspectives

Cerf/Kahn! Provide flow control! Congestion handled by retransmissionJacobson / Karels! Need to avoid congestion! RTT estimates critical! Queuing theory can helpWinstein/Balakrishnan! TCP is maximizing an objective function

■ Fairness/efficiency■ Throughput/delay

! Let a machine pick the best fit for your environment43

Page 153: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

❑ Congestion Control ❑ Evolution of TCP ❑ Problems with TCP

Outline44

Page 154: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Common TCP Options45

Options

Destination Port0 16 31

Sequence NumberSource Port

Acknowledgement NumberAdvertised Window

Urgent PointerFlags

Checksum

4

HLen

Page 155: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Common TCP Options45

Options

Destination Port0 16 31

Sequence NumberSource Port

Acknowledgement NumberAdvertised Window

Urgent PointerFlags

Checksum

4

HLen

Page 156: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Common TCP Options45

Window scaling

Options

Destination Port0 16 31

Sequence NumberSource Port

Acknowledgement NumberAdvertised Window

Urgent PointerFlags

Checksum

4

HLen

Page 157: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Common TCP Options45

Window scalingSACK: selective acknowledgement

Options

Destination Port0 16 31

Sequence NumberSource Port

Acknowledgement NumberAdvertised Window

Urgent PointerFlags

Checksum

4

HLen

Page 158: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Common TCP Options45

Window scalingSACK: selective acknowledgementMaximum segment size (MSS)

Options

Destination Port0 16 31

Sequence NumberSource Port

Acknowledgement NumberAdvertised Window

Urgent PointerFlags

Checksum

4

HLen

Page 159: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Common TCP Options45

Window scalingSACK: selective acknowledgementMaximum segment size (MSS)Timestamp

Options

Destination Port0 16 31

Sequence NumberSource Port

Acknowledgement NumberAdvertised Window

Urgent PointerFlags

Checksum

4

HLen

Page 160: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Window Scaling46

Problem: the advertised window is only 16-bits! Effectively caps the window at 65536B, 64KB! Example: 1.5Mbps link, 513ms RTT

Page 161: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Window Scaling46

Problem: the advertised window is only 16-bits! Effectively caps the window at 65536B, 64KB! Example: 1.5Mbps link, 513ms RTT

(1.5Mbps * 0.513s) = 94KB64KB / 94KB = 68% of maximum possible speed

Page 162: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Window Scaling46

Problem: the advertised window is only 16-bits! Effectively caps the window at 65536B, 64KB! Example: 1.5Mbps link, 513ms RTT

(1.5Mbps * 0.513s) = 94KB64KB / 94KB = 68% of maximum possible speed

Solution: introduce a window scaling value! wnd = adv_wnd << wnd_scale;! Maximum shift is 14 bits, 1GB maximum window

Page 163: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

SACK: Selective Acknowledgment47

891011

4567

Page 164: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

SACK: Selective Acknowledgment47

Problem: duplicate ACKs only tell us about 1 missing packet ! Multiple rounds of dup ACKs needed to

fill all holes 891011

4

4567

4

444

Page 165: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

SACK: Selective Acknowledgment47

Problem: duplicate ACKs only tell us about 1 missing packet ! Multiple rounds of dup ACKs needed to

fill all holesSolution: selective ACK ! Include received, out-of-order

sequence numbers in TCP header ! Explicitly tells the sender about holes in

the sequence

891011

4

4567

4

444

Page 166: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Other Common Options48

Maximum segment size (MSS)! Essentially, what is the hosts MTU! Saves on path discovery overhead

Page 167: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Other Common Options48

Maximum segment size (MSS)! Essentially, what is the hosts MTU! Saves on path discovery overheadTimestamp! When was the packet sent (approximately)?! Used to prevent sequence number wraparound! PAWS algorithm

Page 168: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Issues with TCP49

The vast majority of Internet traffic is TCP However, many issues with the protocol ! Lack of fairness ! Synchronization of flows ! Poor performance with small flows ! Really poor performance on wireless networks ! Susceptibility to denial of service

Page 169: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Fairness50

Problem: TCP throughput depends on RTT

Page 170: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Fairness50

Problem: TCP throughput depends on RTT

Page 171: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Fairness50

Problem: TCP throughput depends on RTT

1 Mbps 1 Mbps1 Mbps1 Mbps

1 Mbps

Page 172: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Fairness50

Problem: TCP throughput depends on RTT

1 Mbps 1 Mbps1 Mbps1 Mbps

1 Mbps

Page 173: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Fairness50

Problem: TCP throughput depends on RTT

1 Mbps 1 Mbps1 Mbps1 Mbps

1 Mbps

100 ms

Page 174: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Fairness50

Problem: TCP throughput depends on RTT

1 Mbps 1 Mbps1 Mbps1 Mbps

1 Mbps

100 ms

1000 ms

Page 175: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Fairness50

Problem: TCP throughput depends on RTT

1 Mbps 1 Mbps1 Mbps1 Mbps

1 Mbps

100 ms

1000 ms

Page 176: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Fairness50

Problem: TCP throughput depends on RTT

1 Mbps 1 Mbps1 Mbps1 Mbps

1 Mbps

100 ms

1000 ms

ACK clocking makes TCP inherently unfair Possible solution: maintain a separate delay window ! Implemented by Microsoft’s Compound TCP

Page 177: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Synchronization of Flows

Ideal bandwidth sharing

51

cwnd

Page 178: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Synchronization of Flows

Ideal bandwidth sharing

51

cwnd

cwnd

Oscillating, but high overall utilization

Page 179: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Synchronization of Flows

Ideal bandwidth sharing

51

cwnd

cwnd

cwnd

Oscillating, but high overall utilization

In reality, flows synchronize

Page 180: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Synchronization of Flows

Ideal bandwidth sharing

51

cwnd

cwnd

cwnd

Oscillating, but high overall utilization

In reality, flows synchronize

One flow causes all flows to drop

packets

Page 181: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Synchronization of Flows

Ideal bandwidth sharing

51

cwnd

cwnd

cwnd

Oscillating, but high overall utilization

In reality, flows synchronize

One flow causes all flows to drop

packets

Periodic lulls of low utilization

Page 182: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Small Flows52

Problem: TCP is biased against short flows! 1 RTT wasted for connection setup (SYN, SYN/ACK)! cwnd always starts at 1

Page 183: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Small Flows52

Problem: TCP is biased against short flows! 1 RTT wasted for connection setup (SYN, SYN/ACK)! cwnd always starts at 1Vast majority of Internet traffic is short flows! Mostly HTTP transfers, <100KB! Most TCP flows never leave slow start!

Page 184: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Small Flows52

Problem: TCP is biased against short flows! 1 RTT wasted for connection setup (SYN, SYN/ACK)! cwnd always starts at 1Vast majority of Internet traffic is short flows! Mostly HTTP transfers, <100KB! Most TCP flows never leave slow start!Proposed solutions (driven by Google):! Increase initial cwnd to 10! TCP Fast Open: use cryptographic hashes to identify

receivers, eliminate the need for three-way handshake

Page 185: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Wireless Networks53

Problem: Tahoe and Reno assume loss = congestion! True on the WAN, bit errors are very rare! False on wireless, interference is very common

Page 186: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Wireless Networks53

Problem: Tahoe and Reno assume loss = congestion! True on the WAN, bit errors are very rare! False on wireless, interference is very commonTCP throughput ~ 1/sqrt(drop rate)! Even a few interference drops can kill performance

Page 187: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Wireless Networks53

Problem: Tahoe and Reno assume loss = congestion! True on the WAN, bit errors are very rare! False on wireless, interference is very commonTCP throughput ~ 1/sqrt(drop rate)! Even a few interference drops can kill performancePossible solutions:! Break layering, push data link info up to TCP! Use delay-based congestion detection (TCP Vegas)! Explicit congestion notification (ECN)

Page 188: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Denial of Service54

Problem: TCP connections require state! Initial SYN allocates resources on the server! State must persist for several minutes (RTO)

Page 189: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Denial of Service54

Problem: TCP connections require state! Initial SYN allocates resources on the server! State must persist for several minutes (RTO)SYN flood: send enough SYNs to a server to allocate all memory/meltdown the kernel

Page 190: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

Denial of Service54

Problem: TCP connections require state! Initial SYN allocates resources on the server! State must persist for several minutes (RTO)SYN flood: send enough SYNs to a server to allocate all memory/meltdown the kernelSolution: SYN cookies! Idea: don’t store initial state on the server! Securely insert state into the SYN/ACK packet! Client will reflect the state back to the server

Page 191: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

SYN Cookies55

Sequence Number0

Page 192: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

SYN Cookies55

Sequence NumberTimestamp310 5

MSS8

Crypto Hash of Client IP & Port

Page 193: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

SYN Cookies55

Did the client really send me a SYN recently? ! Timestamp: freshness check ! Cryptographic hash: prevents spoofed packets

Sequence NumberTimestamp310 5

MSS8

Crypto Hash of Client IP & Port

Page 194: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

SYN Cookies55

Did the client really send me a SYN recently? ! Timestamp: freshness check ! Cryptographic hash: prevents spoofed packetsMaximum segment size (MSS) ! Usually stated by the client during initial SYN ! Server should store this value… ! Reflect the clients value back through them

Sequence NumberTimestamp310 5

MSS8

Crypto Hash of Client IP & Port

Page 195: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

SYN Cookies in Practice56

Advantages! Effective at mitigating SYN floods! Compatible with all TCP versions! Only need to modify the server! No need for client support

Page 196: 10 Congestion Control.tmp...TCP Congestion Control 11 䡦Each TCP connection has a window! Controls the number of unACKed packets 䡦Sending rate is ~ window/RTT 䡦Idea: vary the

SYN Cookies in Practice56

Advantages! Effective at mitigating SYN floods! Compatible with all TCP versions! Only need to modify the server! No need for client supportDisadvantages! MSS limited to 3 bits, may be smaller than clients actual MSS! Server forgets all other TCP options included with the client’s

SYN■ SACK support, window scaling, etc.