module14-tcp2V9
-
Upload
furqan-ali-khan -
Category
Documents
-
view
6 -
download
0
description
Transcript of module14-tcp2V9
-
5/27/2018 module14-tcp2V9
1/52
1
TCP - Part II
-
5/27/2018 module14-tcp2V9
2/522
What is Flow/Congestion/Error Control ?
Flow Control: Algorithms to prevent that the senderoverruns the receiver with information
Error Control: Algorithms to recover or conceal the
effects from packet losses
Congestion Control:Algorithms to prevent that the sender
overloads the network
The goal of each of the control mechanisms are different.
In TCP, the implementation of these algorithms is combined
-
5/27/2018 module14-tcp2V9
3/523
Acknowledgements in TCP
TCP receivers use acknowledgments (ACKs) to confirm thereceipt of data to the sender
Acknowledgment can be added (piggybacked) to a data
segment that carries data in the opposite direction
ACK information is included in the the TCP header Acknowledgements are used for flow control, error control,
and congestion control
Data for B
A BData for A ACK
ACK
-
5/27/2018 module14-tcp2V9
4/524
Sequence Numbers and Acknowledgments in TCP
TCP uses sequence numbers to keeptrack of transmitted and acknowledged
data
Each transmitted byte of payload data is
associated with a sequence number
Sequence numbers count bytes and
not segments
Sequence number of first byte in payload
is written in SeqNofield
Sequence numbers wrap when they
reach 232-1
The sequence number of the first
sequence number (Initial sequence
number) is negotiated during connection
setup
Sequence number (SeqNo) (32 bits)
Source Port Number Destination Port Number
Acknowledgement number (AckNo)(32 bits)
window sizeheader
length 0 Flags
TCP checksum urgent pointer
-
5/27/2018 module14-tcp2V9
5/525
Sequence Numbers and Acknowledgments in TCP
An acknowledgment is a confirmationof delivery of data
When a TCP receiver wants toacknowledge data, it
writes a sequence number in theAckNo field, and
sets the ACK flag
IMPORTANT: An acknowledgmentconfirms receipt for allunacknowledged data that has a
smaller sequence number thangiven in the AckNo field
Example: AckNo=5 confirms delivery for1,2,3,4 (but not 5).
Sequence number (SeqNo) (32 bits)
Source Port Number Destination Port Number
Acknowledgement number (AckNo)(32 bits)
window sizeheader
length 0 Flags
TCP checksum urgent pointer
-
5/27/2018 module14-tcp2V9
6/526
Cumulative Acknowledgements
TCP has cumulative acknowledgements:An acknowledgment confirms the receipt of all
unacknowledged data with a smaller sequence number
A
B
-
5/27/2018 module14-tcp2V9
7/527
Cumulative Acknowledgements
With cumulative ACKs, the receiver can only acknowledge asegment if all previous segments have been received
With cumulative ACKs, receiver cannot selectivelyacknowledge blocks of segments:e.g., ACK for S0-S3and S5-S7 (but not for S4)
Note: The use of cumulative ACKs imposes constraints on the
retransmission schemes:
In case of an error, the sender may need to retransmit alldata that has not been acknowledged
-
5/27/2018 module14-tcp2V9
8/528
Rules for sending Acknowledgments
TCP has rules that influence the transmission ofacknowledgments
Rule 1: Delayed Acknowledgments
Goal:Avoid sending ACK segments that do not carry data
Implementation:Delay the transmission of (some) ACKs
Rule 2: Nagles rule
Goal:Reduce transmission of small segments
Implementation:A sender cannot send multiple segments
with a 1-byte payload (i.e., it must wait for an ACK)
-
5/27/2018 module14-tcp2V9
9/529
Observing Delayed Acknowledgements
Remote terminal applications (e.g., Telnet) send characters
to a server. The server interprets the character and sends
the output at the server to the client.
For each character typed, you see three packets:1. Client Server:Send typed character
2. Server Client:Echo of character (or user output) and
acknowledgement for first packet
3. Client Server:Acknowledgement for second packet
-
5/27/2018 module14-tcp2V9
10/5210
Observing Delayed Acknowledgements
Argon Neon
Telnet sessionfrom Argon
to Neon
This is the output of typing 3 (three) characters :
Time 44.062449: Argon Neon: Push, SeqNo 0:1(1), AckNo 1
Time 44.063317: Neon Argon: Push, SeqNo 1:2(1), AckNo 1
Time 44.182705: Argon Neon: No Data, AckNo 2
Time 48.946471: Argon Neon: Push, SeqNo1:2(1), AckNo 2
Time 48.947326: Neon Argon: Push, SeqNo 2:3(1), AckNo 2Time 48.982786: Argon Neon: No Data, AckNo 3
Time 55.116581: Argon Neon: Push, SeqNo2:3(1) AckNo 3
Time 55.117497: Neon Argon: Push, SeqNo 3:4(1) AckNo 3
Time 55.183694: Argon Neon: No Data, AckNo 4
-
5/27/2018 module14-tcp2V9
11/5211
Why 3 segments per character?
We would expect four segmentsper character:
But we only see three segments
per character:
This is due to delayed
acknowledgements
character
ACKofcharacter
ACKofechoedcharacter
echoofcharacter
character
ACKandechoofcharacte
r
ACKofechoedcharacter
-
5/27/2018 module14-tcp2V9
12/5212
Delayed Acknowledgement
TCP delays transmission of ACKs for up to 200ms
Goal:Avoid to send ACK packets that do not carry data.
The hope is that, within the delay, the receiver will have
data ready to be sent to the receiver. Then, the ACK canbe piggybacked with a data segment
In Example:
Delayed ACK explains why the ACK of character and the echo of character
are sent in the same segment
The duration of delayed ACKs can be observed in the example when Argon
sends ACKs
Exceptions:
ACK should be sent for every second full sized segment
Delayed ACK is not used when packets arrive out of order
-
5/27/2018 module14-tcp2V9
13/5213
Because of delayed ACKs, an ACK is often observed forevery other segment
Delayed Acknowledgement
A
B
Max. Delayfor an ACK
-
5/27/2018 module14-tcp2V9
14/5214
Observing Nagles Rule
argon.cs.virginia.edu
3000
miles
tenet.cs.berkeley.edu
Telnet sessionbetween argon.cs.virginia.edu
and
tenet.cs.berkeley.edu
This is the output of typing 7 characters :
Time 16.401963: Argon Tenet: Push, SeqNo 1:2(1), AckNo 2
Time 16.481929: Tenet Argon: Push, SeqNo 2:3(1), AckNo 2
Time 16.482154: Argon Tenet: Push, SeqNo 2:3(1), AckNo 3
Time 16.559447: Tenet Argon: Push, SeqNo 3:4(1), AckNo 3
Time 16.559684: Argon Tenet: Push, SeqNo 3:4(1), AckNo 4
Time 16.640508: Tenet Argon: Push, SeqNo4:5(1) AckNo 4
Time 16.640761: Argon Tenet: Push, SeqNo 4:8(4)AckNo 5
Time 16.728402: Tenet Argon: Push, SeqNo5:9(4)AckNo 8
-
5/27/2018 module14-tcp2V9
15/52
15
Observing Nagles Rule
Observation:Transmission ofsegments follows a different
pattern, i.e., there are only two
segments per character typed
Delayed acknowledgment doesnot kick in at Argon
The reason is that there is always
data at Argon ready to sent when
the ACK arrives
Why is Argon not sending the data(typed character) as soon as it is
available?
char1
ACKofchar1+echoofcha
r1
ACK+char2
ACK+echoofchar2
ACK+char3
ACK+echoofcha
r3
ACK+char4-7
ACK+echoofchar3
-
5/27/2018 module14-tcp2V9
16/52
16
Observing Nagles Rule
Observations: Argon never has multiple unacknowledged segments outstanding There are fewer transmissions than there are characters.
This is due to Nagles Rule:
Each TCP connection can have only one small (1-byte) segment
outstanding that has not been acknowledged
Implementation:Send one byte and buffer all subsequent bytes untilacknowledgement is received.Then send all buffered bytes in a singlesegment. (Only enforced if byte is arriving from application one byte at
a time)
Goal of Nagles Rule:Reduce the amount of small segments.
The algorithm can be disabled.
-
5/27/2018 module14-tcp2V9
17/52
17
Only one 1-byte segment can be in transmission (Here: Since
no data is sent from B to A, we also see delayed ACKs)
A
B
Nagles Rule
Typed
characters
Delayed ACKDelayed ACK Delayed ACK
-
5/27/2018 module14-tcp2V9
18/52
18
TCP Flow Control
-
5/27/2018 module14-tcp2V9
19/52
19
TCP Flow Control
TCP uses a version of the sliding window flow control,where
Sending acknowledgements is separated from setting
the window size at sender
Acknowledgements do not automatically increase thewindow size
During connection establishment, both ends of a TCPconnection set the initial size of the sliding window
-
5/27/2018 module14-tcp2V9
20/52
20
Window Management in TCP
The receiver is returning two parameters to the sender
The interpretation is:
I am ready to receive new data with
SeqNo= AckNo, AckNo+1, ., AckNo+Win-1
Receiver can acknowledge data without opening the window
Receiver can change the window size without acknowledging
data
AckNowindow size
(win)
32 bits 16 bits
-
5/27/2018 module14-tcp2V9
21/52
21
Sliding Window Flow Control
1 2 3 4 5 6 7 8 9 10 11
Advertised window
sent but not
acknowledged can be sent
USABLE
WINDOW
sent and
acknowledged
can't sent
Sliding Window Protocol is performed at the byte level:
Here: Sender can transmit sequence numbers 6,7,8.
-
5/27/2018 module14-tcp2V9
22/52
22
Sliding Window: Window Closes
1 2 3 4 5 6 7 8 9 10 11
1 2 3 4 5 6 7 8 9 10 11
Transmit Byte 6
1 2 3 4 5 6 7 8 9 10 11
AckNo = 5, Win = 4
is received
Transmission of a single byte (with SeqNo = 6) and acknowledgement isreceived (AckNo = 5, Win=4):
-
5/27/2018 module14-tcp2V9
23/52
23
Sliding Window: Window Opens
1 2 3 4 5 6 7 8 9 10 11
1 2 3 4 5 6 7 8 9 10 11
AckNo = 5, Win = 6
is received
Acknowledgement is received that enlarges the window to the right(AckNo = 5, Win=6):
A receiver opens a window when TCP buffer empties (meaning that datais delivered to the application).
-
5/27/2018 module14-tcp2V9
24/52
24
Sliding Window: Window Shrinks
1 2 3 4 5 6 7 8 9 10 11
1 2 3 4 5 6 7 8 9 10 11
AckNo = 5, Win = 3
is received
Acknowledgement is received that reduces the window from the right(AckNo = 5, Win=3):
Shrinking a window should not be used
-
5/27/2018 module14-tcp2V9
25/52
25
Sliding Window: Example
3K
2K SeqNo=0
Receiver
Buffer
0 4KSender
sends 2K
of data
2K
AckNo=2048Win=20
48
Sender
sends 2K
of data 2K SeqNo=20484K
AckNo=4096Win=0
AckNo=4096Win=10
24
Sender
blocked
-
5/27/2018 module14-tcp2V9
26/52
26
TCP Error Control
-
5/27/2018 module14-tcp2V9
27/52
27
Error Control in TCP
TCP maintains a Retransmission Timer for eachconnection:
The timer is started during a transmission. A timeoutcauses a retransmission
TCP couples error control and congestion control(i.e., itassumes that errors are caused by congestion)
Retransmission mechanism is part of congestion controlalgorithm
Here:How to set the timeout value of the retransmissiontimer?
-
5/27/2018 module14-tcp2V9
28/52
28
TCP Retransmission Timer
Retransmission Timer: The setting of the retransmission timer is crucial for
efficiency
Timeout value too small results in unnecessary
retransmissions Timeout value too large long waiting time before a
retransmission can be issued
A problem is that the delays in the network are not fixed Therefore, the retransmission timers must be adaptive
-
5/27/2018 module14-tcp2V9
29/52
29
Round-Trip Time Measurements
The retransmission mechanism of TCP is adaptive The retransmission timers are set based on round-trip time
(RTT) measurements that TCP performs
Segment1
Segment4
ACKforSegment1
Segment2
Segment3
ACKforSegmen
t2+3
Segment5
ACKforSegme
nt4
ACKforSegme
nt5
RTT#1
RTT#2
RTT#3
The RTT is based on time difference
between segment transmission and
ACK
But:
TCP does not ACK each
segment
Each connection has only one
timer
-
5/27/2018 module14-tcp2V9
30/52
30
Round-Trip Time Measurements
Retransmission timer is set to a Retransmission Timeout(RTO) value.
RTO is calculated based on the RTTmeasurements.
The RTT measurements are smoothed by the following
estimators srttand rttvar:srttn+1= a RTT + (1- a) srttn
rttvarn+1=b( | RTT - srttn+1| ) + (1-b) rttvarn
RTOn+1= srttn+1+ 4 rttvarn+1
The gains are set toa=1/4 andb=1/8
srtt0= 0 sec, rttvar0 = 3 sec, Also: RTO1= srtt1+ 2 rttvar1
-
5/27/2018 module14-tcp2V9
31/52
31
Karns Algorithm
If an ACK for a retransmittedsegment is received, the sender
cannot tell if the ACK belongs to
the original or the
retransmission.
segment
ACK
retransmissionofsegment
Timeout !
RTT
?RTT
?
Karns Algorithm:
Dont updatesrtt on any segments that have been retransmitted.
Each time when TCP retransmits, it sets:RTOn+1= max ( 2 RTOn, 64) (exponential backoff)
-
5/27/2018 module14-tcp2V9
32/52
32
Measuring TCP Retransmission Timers
ellington.cs.virginia.edu satchmo.cs.virginia.edu
ftp session
from ellington
to satchmo
Transfer file from ellington to satchmo
Unplug Ethernet cable in the middle of file transfer
-
5/27/2018 module14-tcp2V9
33/52
33
Exponential Backoff
Scenario: File transferbetween two machines.Disconnect cable.
The interval betweenretransmission attempts inseconds is:
1.03, 3, 6, 12, 24, 48, 64,64, 64, 64, 64, 64, 64.
Time between retrans-missions is doubled eachtime (Exponential Backoff
Algorithm) Timer is not increasedbeyond 64 seconds
TCP gives up after 13thattempt and 9 minutes.
0
100
200
300
400
500
600
Secon
d
0 2 4 6 8 10 12
Transmission Attempts
-
5/27/2018 module14-tcp2V9
34/52
34
TCP Congestion Control
-
5/27/2018 module14-tcp2V9
35/52
35
TCP Congestion Control
TCP has a mechanism for congestion control. Themechanism is implemented at the sender
The window size at the sender is set as follows:
Send Window = MIN (flow control window, congestion window)
where
flow control windowis advertised by the receiver
congestion windowis adjusted based on feedback from the
network
-
5/27/2018 module14-tcp2V9
36/52
36
TCP Congestion Control
TCP congestion control is governed by two parameters: Congestion Window(cwnd)
Slow-start threshhold Value(ssthresh)
Initial value is 216-1
Congestion control works in two modes:
slow start (cwnd < ssthresh)
congestion avoidance (cwnd ssthresh
-
5/27/2018 module14-tcp2V9
37/52
37
Slow Start
Initial value: Set cwnd = 1 Note: Unit is a segment size. TCP actually is based on bytes andincrements by 1 MSS (maximum segment size)
The receiver sends an acknowledgement (ACK) for each Segment
Note: Generally, a TCP receiver sends an ACK for every other
segment.
Each time an ACK is received by the sender, the congestion window isincreased by 1 segment:
cwnd = cwnd + 1
If an ACK acknowledges two segments, cwnd is still increased
by only 1 segment. Even if ACK acknowledges a segment that is smaller than MSS bytes
long, cwnd is increased by 1.
Does Slow Start increment slowly? Not really.In fact, the increase of cwnd is exponential
-
5/27/2018 module14-tcp2V9
38/52
38
Slow Start Example
The congestionwindow size grows
very rapidly
For every ACK, we
increase cwnd by1 irrespective of
the number of
segments ACKed
TCP slows down the
increase of cwnd
when
cwnd > ssthresh
segment1
ACKforsegment1
cwnd = 1
cwnd = 2 segment2
segment3
ACKforsegments2
cwnd = 4 segment4
segment5
segment6
ACKforsegments4
cwnd = 7
ACKforsegments3
ACKforsegments5
ACKforsegments6
-
5/27/2018 module14-tcp2V9
39/52
39
Congestion Avoidance
Congestion avoidance phase is started if cwnd has reachedthe slow-start threshold value
If cwnd ssthreshthen each time an ACK is received,
increment cwnd as follows: cwnd = cwnd + 1/ cwnd
So cwndis increased by one only if all cwndsegments havebeen acknowledged.
Example of
-
5/27/2018 module14-tcp2V9
40/52
40
Example of
Slow Start/Congestion Avoidance
Assume that ssthresh = 8cwnd = 1
cwnd = 2
cwnd = 4
cwnd = 8
cwnd = 9
cwnd = 10
0
2
4
6
8
1012
14
t=0
t=2
t=4
t=6
Roundtr ip t imes
Cwn
d(insegmen
ts)
ssthresh
-
5/27/2018 module14-tcp2V9
41/52
41
Responses to Congestion
So, TCP assumes there is congestion if it detects a packetloss
A TCP sender can detect lost packets via:
Timeout of a retransmission timer
Receipt of a duplicate ACK
TCP interprets a Timeout as a binary congestion signal. When a timeout
occurs, the sender performs:
cwnd is reset to one:cwnd = 1
ssthresh is set to half the current size of the congestion window:
ssthressh = cwnd / 2
and slow-start is entered
-
5/27/2018 module14-tcp2V9
42/52
42
Summary of TCP congestion control
Initially:
cwnd = 1;
ssthresh =advertised window size;
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;
-
5/27/2018 module14-tcp2V9
43/52
43
Slow Start / Congestion Avoidance
A typical plot of cwnd for a TCP connection (MSS = 1500bytes) with TCP Tahoe:
-
5/27/2018 module14-tcp2V9
44/52
44
Flavors of TCP Congestion Control
TCP Tahoe(1988, FreeBSD 4.3 Tahoe) Slow Start
Congestion Avoidance
Fast Retransmit
TCP Reno(1990, FreeBSD 4.3 Reno)
Fast Recovery
New Reno(1996)
SACK(1996)
RED(Floyd and Jacobson 1993)
-
5/27/2018 module14-tcp2V9
45/52
45
Acknowledgments in TCP
Receiver sends ACK to sender
ACK is used for flow control, error
control, and congestion control
ACK number sent is the next
sequence number expected
Delayed ACK: TCP receiver normally
delays transmission of an ACK (for
about 200ms)
ACKs are not delayed when packetsare received out of sequence
Why?
1K SeqNo=0
AckNo=1024
1K SeqNo=1024
AckNo=2048
SeqNo=2048
SeqNo=3072
AckNo=2048
1K
1K
Lostsegment
-
5/27/2018 module14-tcp2V9
46/52
46
Acknowledgments in TCP
Receiver sends ACK to sender
ACK is used for flow control, error
control, and congestion control
ACK number sent is the next
sequence number expected
Delayed ACK: TCP receiver normally
delays transmission of an ACK (for
about 200ms)
Why?
ACKs are not delayed when packetsare received out of sequence
Why?
1K SeqNo=0
AckNo=1024
1K SeqNo=1024
AckNo=2048
SeqNo=3072
AckNo=2048
SeqNo=2048 1K1K
Out-of-order arrivals
-
5/27/2018 module14-tcp2V9
47/52
47
Fast Retransmit
If three or more duplicateACKs are received in a row,
the TCP sender believes that
a segment has been lost.
Then TCP performs aretransmission of what seems
to be the missing segment,
without waiting for a timeout to
happen.
Enter slow start:
ssthresh = cwnd/2
cwnd = 1
1K SeqNo=0
AckNo=1024
AckNo=1024
1K SeqNo=1024
SeqNo=20481K
AckNo=1024
SeqNo=30721K
SeqNo=40961K
1. duplicate
2. duplicate
AckNo=1024
SeqNo=10241K
SeqNo=51201K
3. duplicate
-
5/27/2018 module14-tcp2V9
48/52
48
Fast Recovery
Fast recovery avoids slow start after a
fast retransmit
Intuition:Duplicate ACKs indicatethat data is getting through
After three duplicate ACKs set:
Retransmit packet that ispresumed lost
ssthresh = cwnd/2
cwnd = cwnd+3
(note the order of operations)
Increment cwnd by one for each
additional duplicate ACK
When ACK arrives that acknowledgesnew data (here: AckNo=6148), set:
cwnd=ssthresh
enter congestion avoidance
1K SeqNo=0
AckNo=1024
AckNo=1024
1K SeqNo=1024
SeqNo=20481K
AckNo=1024
SeqNo=30721K
SeqNo=40961K
1. duplicate
2. duplicate
AckNo=1024
SeqNo=10241K
SeqNo=51201K
3. duplicate
cwnd=12sshtresh=5
cwnd=12sshtresh=5
cwnd=12sshtresh=5
cwnd=12sshtresh=5
cwnd=15sshtresh=6
AckNo=6148cwnd=6
sshtresh=6
ACK for new data
-
5/27/2018 module14-tcp2V9
49/52
49
TCP Reno
Duplicate ACKs: Fast retransmit
Fast recovery
Fast Recovery avoids slow start
Timeout:
Retransmit
Slow Start
TCP Reno improves upon TCP Tahoe when a single packet
is dropped in a round-trip time.
TCP Tahoe and TCP Reno
-
5/27/2018 module14-tcp2V9
50/52
50
TCP Tahoe and TCP Reno(for single segment losses)
Reno
time
cwnd
time
cwn
d
Taho
-
5/27/2018 module14-tcp2V9
51/52
51
TCP New Reno
When multiple packets are dropped, Reno has problems Partial ACK:
Occurs when multiple packets are lost
A partial ACK acknowledges some, but not all packets that are
outstanding at the start of a fast recovery, takes sender out of fast
recoverySender has to wait until timeout occurs
New Reno:
Partial ACK does not take sender out of fast recovery
Partial ACK causes retransmission of the segmentfollowing the acknowledged segment
New Reno can deal with multiple lost segments without going to slow
start
-
5/27/2018 module14-tcp2V9
52/52
SACK
SACK = Selective acknowledgment
Issue: Reno and New Reno retransmit at most 1 lost packet per round triptime
Selective acknowledgments:The receiver can acknowledge non-continuous blocks of data (SACK 0-1023, 1024-2047)
Multiple blocks can be sent in a single segment.
TCP SACK:
Enters fast recovery upon 3 duplicate ACKs Sender keeps track of SACKs and infers if segments are lost. Senderretransmits the next segment from the list of segments that aredeemed lost.