Reliable Byte-Stream (TCP)
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
Common end-to-end services
guarantee message delivery
deliver messages in the same order they are sent
deliver at most one copy of each message
support arbitrarily large messages
support synchronization
allow the receiver to flow control the sender
support multiple application processes on each host
Spring 2002
CS 461
Simple Demultiplexor (UDP)
Unreliable and unordered datagram service
Adds multiplexing
No flow control
Endpoints identified by ports
servers have well-known ports
see /etc/services on Unix
Header format
16
31
SrcPort
DstPort
Length
Checksum
Data
Optional checksum
psuedo header + UDP header + data
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
Segment Segment Segment
Transmit segments
Spring 2002
CS 461
Data Link Versus Transport
Potentially connects many different hosts
need explicit connection establishment and termination
Potentially different RTT
need adaptive timeout mechanism
Potentially long delay in network
need to be prepared for arrival of very old packets
Potentially different capacity at destination
need to accommodate different node capacity
Potentially different network capacity
need to be prepared for network congestion
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
Segment Format (cont)
Each connection identified with 4-tuple:
(SrcPort, SrcIPAddr, DsrPort, DstIPAddr)
Sliding window + flow control
acknowledgment, SequenceNum, AdvertisedWinow
Data (SequenceNum)
Receiver
Sender
Flags
Acknowledgment +
AdvertisedWindow
SYN, FIN, RESET, PUSH, URG, ACK
Checksum
pseudo header + TCP header + data
Spring 2002
CS 461
Connection Establishment and
Termination
Active participant
(client)
SYN,
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
State Transition Diagram
CLOSED
Active open/SYN
Passive open
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 Timeout after two
segment lifetimes
TIME_WAIT
ACK
CLOSED
CS 461
Sliding Window Revisited
Sending application
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
Always send ACK in response to arriving data segment
Persist when AdvertisedWindow = 0
Spring 2002
CS 461
11
Silly Window Syndrome
How aggressively does sender exploit open window?
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
When application generates additional data
if fills a max segment (and window open): send it
else
if there is unacked data in transit: buffer it until ACK arrives
else: send it
Spring 2002
CS 461
13
Protection Against Wrap Around
32-bit SequenceNum
Bandwidth
T1 (1.5 Mbps)
Ethernet (10 Mbps)
T3 (45 Mbps)
FDDI (100 Mbps)
STS-3 (155 Mbps)
STS-12 (622 Mbps)
STS-24 (1.2 Gbps)
Spring 2002
Time Until Wrap Around
6.4 hours
57 minutes
13 minutes
6 minutes
4 minutes
55 seconds
28 seconds
CS 461
14
Keeping the Pipe Full
16-bit AdvertisedWindow
Bandwidth Delay x Bandwidth Product
T1 (1.5 Mbps)18KB
Ethernet (10 Mbps)
122KB
T3 (45 Mbps) 549KB
FDDI (100 Mbps)
1.2MB
STS-3 (155 Mbps)
1.8MB
STS-12 (622 Mbps) 7.4MB
STS-24 (1.2 Gbps)
14.8MB
assuming 100ms RTT
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
EstRTT = x EstRTT + x SampleRTT
where + = 1
between 0.8 and 0.9
between 0.1 and 0.2
Set timeout based on EstRTT
TimeOut = 2 x EstRTT
Spring 2002
CS 461
17
Karn/Partridge Algorithm
Sender
Receiver
Sender
(a)
Receiver
(b)
Do not sample RTT when retransmitting
Double timeout after each retransmission
Spring 2002
CS 461
18
Jacobson/ Karels Algorithm
New Calculations for average RTT
Diff = SampleRTT - EstRTT
EstRTT = EstRTT + ( x Diff)
Dev = Dev + ( |Diff| - Dev)
where is a factor between 0 and 1
Consider variance when setting timeout value
TimeOut = x EstRTT + x Dev
where = 1 and = 4
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