E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
1
EE 586 Communication andSwitching Networks
Lecture 16
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Overview
Segment structure
RTT Estimation
Reliable data transfer
Flow control
Connection management
Congestion control
(modified by Cheung for EE586; based on K&R original)
2
TCP: Transmission Control Protocol
underline_base
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Overview
Segment structure
RTT Estimation
Reliable data transfer
Flow control
Connection management
Congestion control
(modified by Cheung for EE586; based on K&R original)
3
TCP: Transmission Control Protocol
underline_base
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
TCP: Overview  RFCs: 793,1122,1323, 2018, 2581
full duplex data:
bi-directional data flowin same connection
MSS: maximumsegment size
connection-oriented:
handshaking (exchangeof control msgs) initssender, receiver statebefore data exchange
flow controlled:
sender will notoverwhelm receiver
point-to-point:
one sender, onereceiver
reliable, in-order bytesteam:
no messageboundaries
pipelined:
TCP congestion andflow control set windowsize
underline_base
(modified by Cheung for EE586; based on K&R original)
4
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
TCP segment structure
source port #
dest port #
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer
checksum
F
S
R
P
A
U
head
len
not
used
options (variable length)
URG: urgent data
(generally not used)
ACK: ACK #
valid
PSH: push data now
(generally not used)
RST, SYN, FIN:
connection estab
(setup, teardown
commands)
# bytes
rcvr willing
to accept
counting
by bytes
of data
(not segments!)
Internet
checksum
(as in UDP)
(modified by Cheung for EE586; based on K&R original)
5
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
TCP seq. numbers, ACKs
sequence numbers:
byte stream number offirst byte in segmentsdata
acknowledgements:
seq # of next byteexpected from other side
cumulative ACK
Q: how receiver handlesout-of-order segments
A: TCP spec doesnt say,- up to implementor
source port #
dest port #
sequence number
acknowledgement number
checksum
rwnd
urg pointer
incoming segment to sender
A
sent
ACKed
sent, not-yet ACKed
(in-flight)
usable
but not
yet sent
not
usable
window size
 N
sender sequence number space
source port #
dest port #
sequence number
acknowledgement number
checksum
rwnd
urg pointer
outgoing segment from sender
(modified by Cheung for EE586; based on K&R original)
6
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
TCP seq. numbers, ACKs
User
types
C
host ACKs
receipt
of echoed
C
host ACKs
receipt of
C, echoes
back C
simple texting scenario
Host B
Host A
Seq=42, ACK=79, data = C
Seq=79, ACK=43, data = C
Seq=43, ACK=80
desktop_computer_stylized_medium
desktop_computer_stylized_medium
(modified by Cheung for EE586; based on K&R original)
7
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
TCP round trip time, timeout
Q: how to set TCPtimeout value?
longer than RTT
but RTT varies
too short: prematuretimeout, unnecessaryretransmissions
too long: slow reactionto segment loss
Q: how to estimate RTT?
SampleRTT: measuredtime from segmenttransmission until ACKreceipt
ignore retransmissions
SampleRTT will vary, wantestimated RTT smoother
average several recentmeasurements, not justcurrent SampleRTT
(modified by Cheung for EE586; based on K&R original)
8
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
EstimatedRTT = (1- )*EstimatedRTT + *SampleRTT
exponential weighted moving average
influence of past sample decreases exponentially fast
typical value:  = 0.125
underline_base
TCP round trip time, timeout
RTT (milliseconds)
RTT: gaia.cs.umass.edu to fantasia.eurecom.fr
sampleRTT
EstimatedRTT
time (seconds)
9
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
timeout interval: EstimatedRTT plus safety margin
large variation in EstimatedRTT -> larger safety margin
estimate SampleRTT deviation from EstimatedRTT:
DevRTT = (1-)*DevRTT +
             *|SampleRTT-EstimatedRTT|
underline_base
TCP round trip time, timeout
(typically,  = 0.25)
TimeoutInterval = EstimatedRTT + 4*DevRTT
estimated RTT
safety margin
alarm_clock_ringing
(modified by Cheung for EE586; based on K&R original)
10
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Transport Layer
3-11
TCP reliable data transfer
TCP creates rdt serviceon top of IPs unreliableservice
pipelined segments
cumulative acks
single retransmissiontimer
retransmissionstriggered by:
timeout events
duplicate acks
lets initially considersimplified TCP sender:
ignore duplicate acks
ignore flow control,congestion control
underline_base
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Transport Layer
3-12
TCP sender events:
data rcvd from app:
create segment withseq #
seq # is byte-streamnumber of first databyte in  segment
start timer if notalready running
think of timer as foroldest unackedsegment
expiration interval:TimeOutInterval
timeout:
retransmit segmentthat caused timeout
restart timer
 ack rcvd:
if ack acknowledgespreviously unackedsegments
update what is knownto be ACKed
start timer if there arestill unacked segments
underline_base
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
3-13
underline_base
TCP sender (simplified)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
data received from application above
timeout
ACK received, with ACK field value y
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
3-14
underline_base
TCP sender (simplified)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
create segment, seq. #: NextSeqNum
pass segment to IP (i.e., send)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
    start timer
 
data received from application above
timeout
ACK received, with ACK field value y
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
3-15
underline_base
TCP sender (simplified)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
create segment, seq. #: NextSeqNum
pass segment to IP (i.e., send)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
    start timer
 
data received from application above
timeout
if (y > SendBase) {
    SendBase = y
    /* SendBase–1: last cumulatively ACKed byte */
    if (there are currently not-yet-acked segments)
         start timer
       else stop timer
     }
ACK received, with ACK field value y
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
3-16
underline_base
TCP sender (simplified)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
create segment, seq. #: NextSeqNum
pass segment to IP (i.e., send)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
    start timer
 
data received from application above
retransmit not-yet-acked segmentwith smallest seq. #
start timer
timeout
if (y > SendBase) {
    SendBase = y
    /* SendBase–1: last cumulatively ACKed byte */
    if (there are currently not-yet-acked segments)
         start timer
       else stop timer
     }
ACK received, with ACK field value y
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Transport Layer
3-17
TCP: retransmission scenarios
lost ACK scenario
Host B
Host A
Seq=92, 8 bytes of data
ACK=100
Seq=92, 8 bytes of data
X
timeout
ACK=100
Host B
Host A
underline_base
desktop_computer_stylized_medium
desktop_computer_stylized_medium
desktop_computer_stylized_medium
desktop_computer_stylized_medium
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Transport Layer
3-18
TCP: retransmission scenarios
lost ACK scenario
Host B
Host A
Seq=92, 8 bytes of data
ACK=100
Seq=92, 8 bytes of data
X
timeout
ACK=100
premature timeout
Host B
Host A
Seq=92, 8 bytes of data
ACK=100
Seq=92,  8
bytes of data
timeout
ACK=120
Seq=100, 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
underline_base
desktop_computer_stylized_medium
desktop_computer_stylized_medium
desktop_computer_stylized_medium
desktop_computer_stylized_medium
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Transport Layer
3-19
TCP: retransmission scenarios
X
cumulative ACK
Host B
Host A
Seq=92, 8 bytes of data
ACK=100
Seq=120,  15 bytes of data
timeout
Seq=100, 20 bytes of data
ACK=120
underline_base
desktop_computer_stylized_medium
desktop_computer_stylized_medium
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Transport Layer
3-20
TCP ACK generation [RFC 1122, RFC 2581]
event at receiver
arrival of in-order segment with
expected seq #. All data up to
expected seq # already ACKed
arrival of in-order segment with
expected seq #. One other
segment has ACK pending
arrival of out-of-order segment
higher-than-expect seq. # .
Gap detected
arrival of segment that
partially or completely fills gap
TCP receiver action
underline_base
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Transport Layer
3-21
TCP ACK generation [RFC 1122, RFC 2581]
event at receiver
arrival of in-order segment with
expected seq #. All data up to
expected seq # already ACKed
arrival of in-order segment with
expected seq #. One other
segment has ACK pending
arrival of out-of-order segment
higher-than-expect seq. # .
Gap detected
arrival of segment that
partially or completely fills gap
TCP receiver action
delayed ACK. Wait up to 500ms
for next segment. If no next segment,
send ACK
underline_base
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Transport Layer
3-22
TCP ACK generation [RFC 1122, RFC 2581]
event at receiver
arrival of in-order segment with
expected seq #. All data up to
expected seq # already ACKed
arrival of in-order segment with
expected seq #. One other
segment has ACK pending
arrival of out-of-order segment
higher-than-expect seq. # .
Gap detected
arrival of segment that
partially or completely fills gap
TCP receiver action
delayed ACK. Wait up to 500ms
for next segment. If no next segment,
send ACK
immediately send single cumulative
ACK, ACKing both in-order segments
underline_base
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Transport Layer
3-23
TCP ACK generation [RFC 1122, RFC 2581]
event at receiver
arrival of in-order segment with
expected seq #. All data up to
expected seq # already ACKed
arrival of in-order segment with
expected seq #. One other
segment has ACK pending
arrival of out-of-order segment
higher-than-expect seq. # .
Gap detected
arrival of segment that
partially or completely fills gap
TCP receiver action
delayed ACK. Wait up to 500ms
for next segment. If no next segment,
send ACK
immediately send single cumulative
ACK, ACKing both in-order segments
immediately send duplicate ACK,
indicating seq. # of next expected byte
underline_base
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Transport Layer
3-24
TCP ACK generation [RFC 1122, RFC 2581]
event at receiver
arrival of in-order segment with
expected seq #. All data up to
expected seq # already ACKed
arrival of in-order segment with
expected seq #. One other
segment has ACK pending
arrival of out-of-order segment
higher-than-expect seq. # .
Gap detected
arrival of segment that
partially or completely fills gap
TCP receiver action
delayed ACK. Wait up to 500ms
for next segment. If no next segment,
send ACK
immediately send single cumulative
ACK, ACKing both in-order segments
immediately send duplicate ACK,
indicating seq. # of next expected byte
immediate send ACK, provided that
segment starts at lower end of gap
underline_base
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Transport Layer
3-25
TCP fast retransmit
time-out period oftenrelatively long:
long delay beforeresending lost packet
detect lost segmentsvia duplicate ACKs.
sender often sendsmany segments back-to-back
if segment is lost, therewill likely be manyduplicate ACKs.
underline_base
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Transport Layer
3-26
TCP fast retransmit
time-out period oftenrelatively long:
long delay beforeresending lost packet
detect lost segmentsvia duplicate ACKs.
sender often sendsmany segments back-to-back
if segment is lost, therewill likely be manyduplicate ACKs.
if sender receives 3ACKs for same data
(triple duplicate ACKs),
resend unackedsegment with smallestseq #
likely that unackedsegment lost, so dontwait for timeout
TCP fast retransmit
(triple duplicate ACKs),
underline_base
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Transport Layer
3-27
X
fast retransmit after sender
receipt of triple duplicate ACK
Host B
Host A
Seq=92, 8 bytes of data
ACK=100
timeout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
underline_base
Seq=100, 20 bytes of data
Seq=100, 20 bytes of data
desktop_computer_stylized_medium
desktop_computer_stylized_medium