TCP: overview RFCs: 793,1122, 2018, 5681, 7323
Transport Layer: 3-1
TCP Send and Receive buffers
3-2
Dividing file data into TCP segments
Transport Layer: 3-3
TCP segment structure
Transport Layer: 3-4
source port #
dest port #
32 bits
not
used
receive window
flow control: # bytes receiver willing to accept
sequence number
segment seq #: counting bytes of data into bytestream (not segments!)
application
data
(variable length)
data sent by application into TCP socket
A
acknowledgement number
ACK: seq # of next expected byte; A bit: this is an ACK
options (variable length)
TCP options
head
len
length (of TCP header)
checksum
Internet checksum
RST, SYN, FIN: connection management
F
S
R
Urg data pointer
P
U
C
E
C, E: congestion notification
TCP sequence numbers, ACKs
Transport Layer: 3-5
Sequence numbers:
source port #
dest port #
sequence number
acknowledgement number
checksum
rwnd
urg pointer
outgoing segment from receiver
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
Acknowledgements:
Q: how receiver handles out-of-order segments
TCP sequence numbers, ACKs
Transport Layer: 3-6
host ACKs receipt of echoed ‘C’
host ACKs receipt of‘C’, echoes back ‘C’
simple telnet scenario
Host B
Host A
User types‘C’
Seq=42, ACK=79, data = ‘C’
Seq=79, ACK=43, data = ‘C’
Seq=43, ACK=80
TCP round trip time, timeout
Transport Layer: 3-7
Q: how to set TCP timeout value?
Q: how to estimate RTT?
TCP round trip time, timeout
Transport Layer: 3-8
EstimatedRTT = (1- α)*EstimatedRTT + α*SampleRTT
RTT (milliseconds)
RTT: gaia.cs.umass.edu to fantasia.eurecom.fr
sampleRTT
EstimatedRTT
time (seconds)
TCP round trip time, timeout
Transport Layer: 3-9
TimeoutInterval = EstimatedRTT + 4*DevRTT
estimated RTT
“safety margin”
* Check out the online interactive exercises for more examples: http://gaia.cs.umass.edu/kurose_ross/interactive/
DevRTT = (1-β)*DevRTT + β*|SampleRTT-EstimatedRTT|
(typically, β = 0.25)
TCP Sender (simplified)
Transport Layer: 3-10
event: data received from application
event: timeout
event: ACK received
TCP Receiver: ACK generation [RFC 5681]
Transport Layer: 3-11
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
TCP: retransmission scenarios
Transport Layer: 3-12
lost ACK scenario
Host B
Host A
Seq=92, 8 bytes of data
Seq=92, 8 bytes of data
ACK=100
X
ACK=100
timeout
premature timeout
Host B
Host A
Seq=92, 8
bytes of data
ACK=120
timeout
ACK=100
ACK=120
SendBase=100
SendBase=120
SendBase=120
Seq=92, 8 bytes of data
Seq=100, 20 bytes of data
SendBase=92
send cumulative
ACK for 120
TCP: retransmission scenarios
Transport Layer: 3-13
cumulative ACK covers for earlier lost ACK
Host B
Host A
Seq=92, 8 bytes of data
Seq=120, 15 bytes of data
Seq=100, 20 bytes of data
X
ACK=100
ACK=120
TCP fast retransmit
Transport Layer: 3-14
Host B
Host A
timeout
ACK=100
ACK=100
ACK=100
ACK=100
X
Seq=92, 8 bytes of data
Seq=100, 20 bytes of data
Seq=100, 20 bytes of data
Receipt of three duplicate ACKs indicates 3 segments received after a missing segment – lost segment is likely. So retransmit!
if sender receives 3 additional ACKs for same data (“triple duplicate ACKs”), resend unACKed segment with smallest seq #
TCP fast retransmit
Chapter 3: roadmap
Transport Layer: 3-15
TCP flow control
Transport Layer: 3-16
application
process
TCP socket
receiver buffers
TCP
code
IP
code
receiver protocol stack
Q: What happens if network layer delivers data faster than application layer removes data from socket buffers?
Network layer delivering IP datagram payload into TCP socket buffers
from sender
Application removing data from TCP socket buffers
TCP flow control
Transport Layer: 3-17
application
process
TCP socket
receiver buffers
TCP
code
IP
code
receiver protocol stack
Q: What happens if network layer delivers data faster than application layer removes data from socket buffers?
Network layer delivering IP datagram payload into TCP socket buffers
from sender
Application removing data from TCP socket buffers
TCP flow control
Transport Layer: 3-18
application
process
TCP socket
receiver buffers
TCP
code
IP
code
receiver protocol stack
Q: What happens if network layer delivers data faster than application layer removes data from socket buffers?
from sender
Application removing data from TCP socket buffers
receive window
flow control: # bytes receiver willing to accept
TCP flow control
Transport Layer: 3-19
application
process
TCP socket
receiver buffers
TCP
code
IP
code
receiver protocol stack
Q: What happens if network layer delivers data faster than application layer removes data from socket buffers?
receiver controls sender, so sender won’t overflow receiver’s buffer by transmitting too much, too fast
flow control
from sender
Application removing data from TCP socket buffers
TCP flow control
Transport Layer: 3-20
buffered data
free buffer space
rwnd
RcvBuffer
TCP segment payloads
to application process
TCP receiver-side buffering
TCP flow control
Transport Layer: 3-21
flow control: # bytes receiver willing to accept
receive window
TCP segment format
TCP connection management
Transport Layer: 3-22
before exchanging data, sender/receiver “handshake”:
connection state: ESTAB
connection variables:
seq # client-to-server
server-to-client
rcvBuffer size
at server,client
application
network
connection state: ESTAB
connection Variables:
seq # client-to-server
server-to-client
rcvBuffer size
at server,client
application
network
Socket clientSocket =
newSocket("hostname","port number");
Socket connectionSocket = welcomeSocket.accept();
Agreeing to establish a connection
Transport Layer: 3-23
Q: will 2-way handshake always work in network?
2-way handshake:
Let’s talk
OK
ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB
acc_conn(x)
2-way handshake scenarios
Transport Layer: 3-24
connection
x completes
choose x
req_conn(x)
ESTAB
ESTAB
acc_conn(x)
data(x+1)
accept
data(x+1)
ACK(x+1)
No problem!
2-way handshake scenarios
Transport Layer: 3-25
ESTAB
retransmit
req_conn(x)
req_conn(x)
client terminates
server
forgets x
connection
x completes
choose x
req_conn(x)
ESTAB
ESTAB
acc_conn(x)
acc_conn(x)
Problem: half open connection! (no client)
2-way handshake scenarios
client terminates
ESTAB
choose x
req_conn(x)
ESTAB
acc_conn(x)
data(x+1)
accept
data(x+1)
connection
x completes
server
forgets x
Problem: dup data
accepted!
data(x+1)
retransmit
data(x+1)
accept
data(x+1)
retransmit
req_conn(x)
ESTAB
req_conn(x)
TCP 3-way handshake
Transport Layer: 3-27
SYNbit=1, Seq=x
choose init seq num, x
send TCP SYN msg
ESTAB
SYNbit=1, Seq=y
ACKbit=1; ACKnum=x+1
choose init seq num, y
send TCP SYNACK
msg, acking SYN
ACKbit=1, ACKnum=y+1
received SYNACK(x)
indicates server is live;
send ACK for SYNACK;
this segment may contain
client-to-server data
received ACK(y)
indicates client is live
SYNSENT
ESTAB
SYN RCVD
Client state
LISTEN
Server state
LISTEN
clientSocket = socket(AF_INET, SOCK_STREAM)
serverSocket = socket(AF_INET,SOCK_STREAM)
serverSocket.bind((‘’,serverPort))
serverSocket.listen(1)
connectionSocket, addr = serverSocket.accept()
clientSocket.connect((serverName,serverPort))
A human 3-way handshake protocol
Transport Layer: 3-28
1. On belay?
2. Belay on.
3. Climbing.
TCP three-way handshake: segment exchange
Transport Layer: 3-29
Closing a TCP connection
Transport Layer: 3-30
Closing a TCP connection Time
Transport Layer: 3-31