Professional Documents
Culture Documents
Outline
Connection Establishment/Termination
Sliding Window Revisited
Flow Control
Adaptive Timeout
Spring 2002
CS 461
End-to-End Protocols
Underlying best-effort network
drop messages
re-orders messages
delivers duplicate copies of a given message
limits messages to some finite size
delivers messages after an arbitrarily long delay
Spring 2002
CS 461
Header format
16
31
SrcPort
DstPort
Length
Checksum
Data
Optional checksum
Spring 2002
CS 461
TCP Overview
Full duplex
Flow control: keep sender from
overrunning receiver
Congestion control: keep sender
from overrunning network
Connection-oriented
Byte-stream
app writes bytes
TCP sends segments
app reads bytes
Application process
Application process
Write
bytes
Read
bytes
TCP
TCP
Send buffer
Receive buffer
Spring 2002
CS 461
Spring 2002
CS 461
Segment Format
0
10
16
31
SrcPort
DstPort
SequenceNum
Acknowledgment
HdrLen
Flags
AdvertisedWindow
Checksum
UrgPtr
Options (variable)
Data
Spring 2002
CS 461
Sender
Flags
Acknowledgment +
AdvertisedWindow
Checksum
pseudo header + TCP header + data
Spring 2002
CS 461
Passive participant
(server)
Sequ
ence
Numx
=
x+1
=
t
,
yg,men
ACK ume=
+
d
N
SY
enNowl
c
n
k
e
c
Sequ A
ACK,
Ackn
owled
gmen
t =y+
1
Spring 2002
CS 461
Close
Close
LISTEN
SYN_RCVD
SYN/SYN + ACK
Send/SYN
SYN/SYN + ACK
ACK
SYN + ACK/ACK
ESTABLISHED
Close/FIN
Close/FIN
FIN/ACK
FIN_WAIT_1
ACK
CLOSE_WAIT
FIN/ACK
FIN_WAIT_2
Close/FIN
CLOSING
FIN/ACK
Spring 2002
SYN_SENT
LAST_ACK
ACK
CLOSED
CS 461
Receiving application
TCP
TCP
LastByteRead
LastByteWritten
LastByteAcked
LastByteSent
(a)
Sending side
LastByteAcked < =
LastByteSent
LastByteSent < =
LastByteWritten
buffer bytes between
LastByteAcked and
LastByteWritten
Spring 2002
NextByteExpected
LastByteRcvd
(b)
Receiving side
LastByteRead <
NextByteExpected
NextByteExpected < =
LastByteRcvd +1
buffer bytes between
NextByteRead and
LastByteRcvd
CS 461
10
Flow Control
Send buffer size: MaxSendBuffer
Receive buffer size: MaxRcvBuffer
Receiving side
LastByteRcvd - LastByteRead < = MaxRcvBuffer
AdvertisedWindow = MaxRcvBuffer - (NextByteExpected NextByteRead)
Sending side
LastByteSent - LastByteAcked < = AdvertisedWindow
EffectiveWindow = AdvertisedWindow - (LastByteSent LastByteAcked)
LastByteWritten - LastByteAcked < = MaxSendBuffer
block sender if (LastByteWritten - LastByteAcked) + y > MaxSenderBuffer
Spring 2002
CS 461
11
Sender
Receiver
Receiver-side solutions
after advertising zero window, wait for space equal to a
maximum segment size (MSS)
delayed acknowledgements
Spring 2002
CS 461
12
Nagles Algorithm
How long does sender delay sending data?
too long: hurts interactive applications
too short: poor network utilization
strategies: timer-based vs self-clocking
Spring 2002
CS 461
13
Spring 2002
CS 461
14
Spring 2002
CS 461
15
TCP Extensions
Implemented as header options
Store timestamp in outgoing segments
Extend sequence space with 32-bit timestamp
(PAWS)
Shift (scale) advertised window
Spring 2002
CS 461
16
Adaptive Retransmission
(Original Algorithm)
Measure SampleRTT for each segment / ACK pair
Compute weighted average of RTT
CS 461
17
Karn/Partridge Algorithm
Sender
Receiver
Sender
(a)
Receiver
(b)
CS 461
18
Notes
algorithm only as good as granularity of clock (500ms on Unix)
accurate timeout mechanism important to congestion control (later)
Spring 2002
CS 461
19