TCP Part 2
TCP Part 2
TCP Part 2
v Tutorial 1 in Week 5
§ Problem solving prep for exam
v Assignment 1
§ Have you started?
§ Do not delay
§ Be careful about plagiarism
§ Read specification thoroughly
§ Post questions on forum
v Mid-semester Exam in Week 6
§ Monday, 29th August during regular lecture hours
§ Details at end of slide set
Transport Layer 3
Self Study
http://www-net.cs.umass.edu/kurose_ross/interactive/rdt22.php
Transport Layer 4
Pipelined protocols
pipelining: sender allows multiple, “in-flight”, yet-
to-be-acknowledged pkts
§ range of sequence numbers must be increased
§ buffering at sender and/or receiver
3L / R 3 x 125
U sender = = 100+125 = 1.67
RTT + L / R
Transport Layer 6
Pipelined protocols: overview
Go-back-N: Selective Repeat:
v sender can have up to v sender can have up to N
N unacked packets in unack’ed packets in
pipeline pipeline
v receiver only sends v rcvr sends individual ack
cumulative ack for each packet
§ doesn’t ack packet if
there’s a gap
v sender has timer for v sender maintains timer
oldest unacked packet for each unacked packet
§ when timer expires, § when timer expires,
retransmit all unacked retransmit only that
packets unacked packet
Transport Layer 7
Go-Back-N: sender
v k-bit seq # in pkt header
v “window” of up to N, consecutive unack’ed pkts allowed
Transport Layer 11
Selective repeat
v receiver individually acknowledges all correctly
received pkts
§ buffers pkts, as needed, for eventual in-order delivery
to upper layer
v sender only resends pkts for which ACK not
received
§ sender timer for each unACKed pkt
v sender window
§ N consecutive seq #’s
§ limits seq #s of sent, unACKed pkts
Applet: http://media.pearsoncmg.com/aw/aw_kurose_network_3/applets/SelectRepeat/SR.html
Transport Layer 12
Selective repeat: sender, receiver windows
Transport Layer 13
Selective repeat
sender receiver
data from above: pkt n in [rcvbase, rcvbase+N-1]
v if next available seq # in v send ACK(n)
window, send pkt v out-of-order: buffer
timeout(n): v in-order: deliver (also
v resend pkt n, restart deliver buffered, in-order
timer pkts), advance window to
next not-yet-received pkt
ACK(n) in [sendbase,sendbase+N]:
v mark pkt n as received
pkt n in [rcvbase-N,rcvbase-1]
v if n smallest unACKed
v ACK(n)
pkt, advance window base otherwise:
to next unACKed seq # v ignore
Transport Layer 14
Selective repeat in action
sender window (N=4) sender receiver
012345678 send pkt0
012345678 send pkt1
send pkt2 receive pkt0, send ack0
012345678
send pkt3 Xloss receive pkt1, send ack1
012345678
(wait)
receive pkt3, buffer,
012345678 rcv ack0, send pkt4 send ack3
012345678 rcv ack1, send pkt5 receive pkt4, buffer,
send ack4
record ack3 arrived receive pkt5, buffer,
send ack5
pkt 2 timeout
012345678 send pkt2
012345678 record ack4 arrived
012345678 rcv pkt2; deliver pkt2,
record ack5 arrived
012345678 pkt3, pkt4, pkt5; send ack2
Transport Layer 15
sender window receiver window
Selective repeat: (after receipt) (after receipt)
difference in two
receiver can’t see sender side.
scenarios! receiver behavior identical in both cases!
v duplicate data something’s (very) wrong!
accepted as new in
(b) 0123012 pkt0
0123012 pkt1 0123012
pkt2
Q: what relationship 0123012 0123012
X
between seq # size X
0123012
Transport Layer 17
Recap: components of a solution
v Checksums (for error detection)
v Timers (for loss detection)
v Acknowledgments
§ cumulative
§ selective
v Sequence numbers (duplicates, windows)
v Sliding Windows (for efficiency)
overwhelm receiver
writes data reads data
socket socket
door door
TCP TCP
send buffer receive buffer
segment
Transport Layer (contd.) 22
TCP segment structure
32 bits
URG: urgent data counting
(generally not used) source port # dest port #
by bytes
sequence number of data
ACK: ACK #
valid acknowledgement number (not segments!)
head not
PSH: push data now len used U A P R S F receive window
(generally not used) # bytes
checksum Urg data pointer rcvr willing
RST, SYN, FIN: to accept
options (variable length)
connection estab
(setup, teardown
commands)
application
Internet data
checksum (variable length)
(as in UDP)
(UDP was 8)
acknowledgement number
head not
len used
UAP R S F receive window
checksum Urg data pointer
application
data
(variable length)
Sequence number
Acknowledgment
Computed
over header HdrLen 0 Flags Advertised window
and data
Checksum Urgent pointer
Options (variable)
Data
Byte 80
Byte 0
Byte 1
Byte 2
Byte 3
Byte 80
Application @ Host B
Transport Layer (contd.) 30
.. Provided Using TCP “Segments”
Host A Byte 0
Byte 1
Byte 2
Byte 3
Byte 80
Segment sent when:
TCP Data 1. Segment full (Max Segment Size),
2. Not full, but times out
TCP Data
Host B
Byte 0
Byte 1
Byte 2
Byte 3
Byte 80
v IP packet
§ No bigger than Maximum Transmission Unit (MTU)
§ E.g., up to 1500 bytes with Ethernet
v TCP packet
§ IP packet with a TCP header and data inside
§ TCP header ≥ 20 bytes long
v TCP segment
§ No more than Maximum Segment Size (MSS) bytes
§ E.g., up to 1460 consecutive bytes from the stream
§ MSS = MTU – (IP header) – (TCP header)
Transport Layer (contd.) 32
Sequence Numbers
ISN (initial sequence number)
k bytes
Host A
Sequence number
= 1st byte in segment =
ISN + k
Host A
Host B
Data
acknowledgements:
§ seq # of next byte sender sequence number space
expected from other side
sent sent, not- usable not
§ cumulative ACK ACKed yet ACKed but not usable
(“in- yet sent
flight”)
incoming segment to sender
source port # dest port #
sequence number
acknowledgement number
A rwnd
checksum urg pointer
•
v So
So far,
far, we’ve
we’ve assumed
assumed
distinct
distinct“sender”
“sender”and
and
“receiver” roles
“receiver” roles
v In reality, usually both
• sides of a connection
In reality, usually both
send
sidessome data
of a connection
send some data
– request/response is a
… …
common pattern Without With
Piggybacking Piggybacking
Seq
= ?,
2 KB
ACK ytes of Seq = 2149
=? data
ACK = 1024 + 1024 = 2048
Transport Layer (contd.) 42
What does TCP do?
350
300
250
RTT (milliseconds)
RTT
200
sampleRTT
150
EstimatedRTT
100
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
time (seconds) Transport Layer (contd.) 47
SampleRTT Estimated RTT
TCP round trip time, timeout
v timeout interval: EstimatedRTT plus “safety margin”
§ large variation in EstimatedRTT -> larger safety margin
v estimate SampleRTT deviation from EstimatedRTT:
DevRTT = (1-β)*DevRTT +
β*|SampleRTT-EstimatedRTT|
(typically, β = 0.25)
Practice Problem:
http://wps.pearsoned.com/ecs_kurose_compnetw_6/216/55463/14198700.cw/index.html
Transport Layer (contd.) 48
Why exclude retransmissions in RTT
computation?
v How do we differentiate between the real ACK, and ACK of
the retransmitted packet?
Origin Origin
al Tran al Tran
smissi smissi
on on
ACK
Retra Retra
nsmis SampleRTT nsmis
sion sion
SampleRTT
ACK
SendBase=92
Seq=92, 8 bytes of data Seq=92, 8 bytes of data
timeout
ACK=100
X
ACK=100
ACK=120
SendBase=120
X
ACK=120
cumulative ACK
Transport Layer (contd.) 53
TCP ACK generation [RFC 1122, RFC 2581]
55
TCP fast retransmit
v time-out period often
relatively long: TCP fast retransmit
§ long delay before if sender receives 3
resending lost packet
duplicate ACKs for
v “Duplicate ACKs” are a same data
sign of an isolated loss
(“triple duplicate ACKs”),
§ The lack of ACK
progress means that resend unacked
packet hasn’t been segment with smallest
delivered seq #
§ Stream of ACKs means § likely that unacked
some packets are being segment is lost, so
delivered don’t wait for timeout
§ Could trigger resend on
receiving “k” duplicate
56
ACKs (TCP uses k = 3) Transport Layer (contd.)
TCP fast retransmit
Host A Host B
ACK=100
timeout
ACK=100
ACK=100
ACK=100
Seq=100, 20 bytes of data
IP
flow control code
receiver controls sender, so
sender won’t overflow
receiver’s buffer by transmitting from sender
too much, too fast
receiver protocol stack
application application
network network
v Practical issue
§ IP addresses and port #s uniquely identify a connection
§ Eventually, though, these port #s do get used again
§ … small chance an old packet is still in flight
§ Easy to hijack a TCP connection (security threat)
2-way handshake:
Q: will 2-way handshake
always work in
Let’s talk
network?
ESTAB v variable delays
OK
ESTAB v retransmitted messages
(e.g. req_conn(x)) due to
message loss
v message reordering
choose x
req_conn(x)
v can’t “see” other side
ESTAB
acc_conn(x)
ESTAB
choose x choose x
req_conn(x) req_conn(x)
ESTAB ESTAB
retransmit acc_conn(x) retransmit acc_conn(x)
req_conn(x) req_conn(x)
ESTAB ESTAB
data(x+1) accept
req_conn(x)
retransmit data(x+1)
data(x+1)
connection connection
client x completes server x completes server
client
terminates forgets x terminates forgets x
req_conn(x)
ESTAB ESTAB
data(x+1) accept
half open connection! data(x+1)
(no client!)
Transport Layer (contd.) 66
TCP 3-way handshake
A B
client state server state
CLOSED LISTEN
choose init seq num, x
send TCP SYN msg
SYNSENT SYNbit=1, Seq=x
choose init seq num, y
send TCP SYNACK
msg, acking SYN SYN RCVD
SYNbit=1, Seq=y
ACKbit=1; ACKnum=x+1
received SYNACK(x)
ESTAB indicates server is live;
send ACK for SYNACK;
this segment may contain ACKbit=1, ACKnum=y+1
client-to-server data
received ACK(y)
indicates client is live
ESTAB
closed
Socket connectionSocket =
welcomeSocket.accept();
Λ Socket clientSocket =
SYN(x) newSocket("hostname","port
number");
SYNACK(seq=y,ACKnum=x+1)
create new socket for SYN(seq=x)
communication back to client listen
SYN SYN
rcvd sent
SYNACK(seq=y,ACKnum=x+1)
ESTAB ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
Λ
LAST_ACK
FINbit=1, seq=y
TIMED_WAIT can no longer
send data
ACKbit=1; ACKnum=y+1
timed wait
for 2*max CLOSED
segment lifetime
CLOSED
TIMED_WAIT: Can retransmit ACK if ACK is lost
Transport Layer (contd.) 75
Normal Termination, Both Together
client state server state
ESTAB ESTAB
clientSocket.close()
FIN_WAIT_1 can no longer FINbit=1, seq=x
send but can
receive data CLOSE_WAIT
ACKbit=1; ACKnum=x+1 FIN + ACK
wait for server together LAST_ACK
close FINbit=1, seq=y
TIMED_WAIT can no longer
send data
CLOSED
SYN A
ACK
RST
ACK
RST
SYN
Data
Data
CK
A
time
LISTEN
Close/FIN FIN/ACK
FIN_WAIT_1 CLOSE_WAIT
A FIN/ACK
CK
ACK + Close/FIN
FI
N/
FIN_WAIT_2 A CLOSING LAST_ACK
CK
ACK Timeout after two ACK
segment lifetimes
FIN/ACK
TIME_WAIT CLOSED
TCP server
lifecycle
TCP client
lifecycle