Documente Academic
Documente Profesional
Documente Cultură
Transport Layer
Computer Networking:
A Top Down Approach
5th edition.
Jim Kurose, Keith Ross
Addison-Wesley, April
2009.
Chapter 3 outline
3.1 Transport-layer
services
3.2 Multiplexing and
demultiplexing
3.3 Connectionless
transport: UDP
3.4 Principles of reliable
data transfer
3.5 Connection-oriented
transport: TCP
segment structure
reliable data transfer
flow control
connection management
3.6 Principles of
congestion control
3.7 TCP congestion control
le
ca
nd
-e
nd
a
tr
rt
po
ns
gi
lo
application
transport
network
data link
physical
application
transport
network
data link
physical
Household analogy:
12 kids sending letters to
12 kids
processes = kids
app messages = letters
in envelopes
hosts = houses
transport protocol = Ann
and Bill who demux to
in-house siblings
network-layer protocol =
postal service
reliable, in-order
delivery (TCP)
rt
po
ns
network
data link
physicalnetwork
a
tr
no-frills extension of
best-effort IP
nd
-e
nd
unreliable, unordered
delivery: UDP
network
data link
physical
le
ca
network
data link
physical
gi
lo
congestion control
flow control
connection setup
application
transport
network
data link
physical
network
data link
physical
data link
physical
network
data link
physical
application
transport
network
data link
physical
delay guarantees
bandwidth guarantees
Chapter 3 outline
3.1 Transport-layer
services
3.2 Multiplexing and
demultiplexing
3.3 Connectionless
transport: UDP
3.4 Principles of reliable
data transfer
3.5 Connection-oriented
transport: TCP
segment structure
reliable data transfer
flow control
connection management
3.6 Principles of
congestion control
3.7 TCP congestion control
Multiplexing/demultiplexing
Multiplexing at send host:
gathering data from multiple
sockets, enveloping data with
header (later used for
demultiplexing)
= process
P3
P1
P1
application
transport
network
P2
P4
application
transport
network
link
link
physical
host 1
physical
host 2
physical
host 3
32 bits
source port #
dest port #
application
data
(message)
TCP/UDP segment format
Connectionless demultiplexing
IP datagrams with
different source IP
addresses and/or source
port numbers directed
to same socket
Transport Layer 3-
SP: 6428
DP: 9157
client
IP: A
P1
P1
P3
SP: 9157
DP: 6428
SP: 6428
DP: 5775
server
IP: C
SP: 5775
DP: 6428
Client
IP:B
Transport Layer 3-
Connection-oriented demux
source IP address
source port number
dest IP address
dest port number
Transport Layer 3-
Connection-oriented demux
(cont)
P1
P4
P5
P2
P6
P1P3
SP: 5775
DP: 80
S-IP: B
D-IP:C
client
IP: A
SP: 9157
DP: 80
S-IP: A
D-IP:C
server
IP: C
SP: 9157
DP: 80
S-IP: B
D-IP:C
Client
IP:B
Transport Layer 3-
Connection-oriented demux:
Threaded Web Server
P1
P2
P4
P1P3
SP: 5775
DP: 80
S-IP: B
D-IP:C
client
IP: A
SP: 9157
DP: 80
S-IP: A
D-IP:C
server
IP: C
SP: 9157
DP: 80
S-IP: B
D-IP:C
client
IP:B
Transport Layer 3-
Chapter 3 outline
3.1 Transport-layer
services
3.2 Multiplexing and
demultiplexing
3.3 Connectionless
transport: UDP
3.4 Principles of reliable
data transfer
3.5 Connection-oriented
transport: TCP
segment structure
reliable data transfer
flow control
connection management
3.6 Principles of
congestion control
3.7 TCP congestion control
Transport Layer 3-
[RFC 768]
no connection
establishment (which can
add delay)
simple: no connection state
at sender, receiver
small segment header
no congestion control: UDP
can blast away as fast as
desired
Transport Layer 3-
UDP: more
bytes of UDP
segment,
including
header
DNS
SNMP
32 bits
source port #
dest port #
length
checksum
Application
data
(message)
UDP segment format
Transport Layer 3-
UDP checksum
Goal: detect errors (e.g., flipped bits) in transmitted
segment
Sender:
Receiver:
Transport Layer 3-
wraparound 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1
sum 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0
checksum 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
Transport Layer 3-
Chapter 3 outline
3.1 Transport-layer
services
3.2 Multiplexing and
demultiplexing
3.3 Connectionless
transport: UDP
3.4 Principles of reliable
data transfer
3.5 Connection-oriented
transport: TCP
segment structure
reliable data transfer
flow control
connection management
3.6 Principles of
congestion control
3.7 TCP congestion control
Transport Layer 3-
characteristics of unreliable channel will determine complexity of reliable data transfer protocol
(rdt)
Transport Layer 3-
characteristics of unreliable channel will determine complexity of reliable data transfer protocol
(rdt)
Transport Layer 3-
characteristics of unreliable channel will determine complexity of reliable data transfer protocol
(rdt)
Transport Layer 3-
send
side
deliver_data(): called by
rdt to deliver data to upper
receive
side
Transport Layer 3-
state
1
event
actions
state
2
Transport Layer 3-
Rdt1.0:
Wait for
call from
above
rdt_send(data)
packet = make_pkt(data)
udt_send(packet)
sender
Wait for
call from
below
rdt_rcv(packet)
extract (packet,data)
deliver_data(data)
receiver
Transport Layer 3-
Transport Layer 3-
Transport Layer 3-
sender
receiver
rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
udt_send(NAK)
Wait for
call from
below
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
Transport Layer 3-
rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
udt_send(NAK)
Wait for
call from
below
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
Transport Layer 3-
rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
udt_send(NAK)
Wait for
call from
below
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
Transport Layer 3-
Handling duplicates:
Transport Layer 3-
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt)
Wait for
call 0 from
above
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
udt_send(sndpkt)
Wait for
ACK or
NAK 0
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
udt_send(sndpkt)
Wait for
ACK or
NAK 1
Wait for
call 1 from
above
rdt_send(data)
sndpkt = make_pkt(1, data, checksum)
udt_send(sndpkt)
Transport Layer 3-
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) &&
has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
Transport Layer 3-
rdt2.1: discussion
Sender:
seq # added to pkt
two seq. #s (0,1) will
suffice. Why?
must check if received
ACK/NAK corrupted
twice as many states
state must remember
whether current pkt
has 0 or 1 seq. #
Receiver:
must check if received
packet is duplicate
state indicates whether
0 or 1 is expected pkt
seq #
Transport Layer 3-
Transport Layer 3-
rdt_rcv(rcvpkt) &&
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
Wait for
0 from
below
( corrupt(rcvpkt) ||
isACK(rcvpkt,1) )
udt_send(sndpkt)
Wait for
ACK
0
sender FSM
fragment
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,0)
receiver FSM
fragment
Transport Layer 3-
retransmits if no ACK
received in this time
if pkt (or ACK) just delayed
(not lost):
retransmission will be
duplicate, but use of seq.
#s already handles this
receiver must specify seq
# of pkt being ACKed
requires countdown timer
Transport Layer 3-
rdt3.0 sender
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
start_timer
rdt_rcv(rcvpkt)
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,1)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isACK(rcvpkt,0) )
timeout
udt_send(sndpkt)
start_timer
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,0)
stop_timer
stop_timer
timeout
udt_send(sndpkt)
start_timer
Wait
for
ACK0
Wait for
call 0from
above
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isACK(rcvpkt,1) )
Wait
for
ACK1
Wait for
call 1 from
above
rdt_rcv(rcvpkt)
rdt_send(data)
sndpkt = make_pkt(1, data, checksum)
udt_send(sndpkt)
start_timer
Transport Layer 3-
rdt3.0 in action
Transport Layer 3-
rdt3.0 in action
Transport Layer 3-
Performance of rdt3.0
d trans
U
sender
L 8000bits
9
8 microseconds
R 10 bps
sender
L/R
RTT + L / R
.008
30.008
if RTT=30 msec, 1KB pkt every 30 msec -> 33kB/sec thruput over 1 Gbps link
network protocol limits use of physical resources!
= 0.00027
microsec
onds
Transport Layer 3-
receiver
RTT
=
sender
L/R
RTT + L / R
.008
30.008
= 0.00027
microsec
onds
Transport Layer 3-
Pipelined protocols
pipelining: sender allows multiple, in-flight, yet-tobe-acknowledged pkts
range of sequence numbers must be increased
buffering at sender and/or receiver
receiver
RTT
Increase utilization
by a factor of 3!
sender
3*L/R
RTT + L / R
.024
30.008
= 0.0008
microsecon
ds
Transport Layer 3-
Pipelined Protocols
Go-back-N: big picture:
sender can have up to
N unacked packets in
pipeline
rcvr only sends
cumulative acks
doesnt ack packet if
theres a gap
Transport Layer 3-
Go-Back-N
Sender:
Transport Layer 3-
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
&& corrupt(rcvpkt)
udt_send(sndpkt[nextseqnum1])
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
Transport Layer 3-
Wait
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnum,ACK,chksum)
rdt_rcv(rcvpkt)
&& notcurrupt(rcvpkt)
&& hasseqnum(rcvpkt,expectedseqnum)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(expectedseqnum,ACK,chksum)
udt_send(sndpkt)
expectedseqnum++
out-of-order pkt:
discard (dont buffer) -> no receiver buffering!
Re-ACK pkt with highest in-order seq #
Transport Layer 3-
GBN in
action
Transport Layer 3-
Selective Repeat
sender window
N consecutive seq #s
again limits seq #s of sent, unACKed pkts
Transport Layer 3-
Transport Layer 3-
Selective repeat
sender
data from above :
timeout(n):
receiver
pkt n in [rcvbase, rcvbase+N-1]
ACK(n) in [sendbase,sendbase+N]:
send ACK(n)
out-of-order: buffer
in-order: deliver (also
deliver buffered, in-order
pkts), advance window to
next not-yet-received pkt
pkt n in
[rcvbase-N,rcvbase-1]
ACK(n)
otherwise:
ignore
Transport Layer 3-
Transport Layer 3-
Selective repeat:
dilemma
Example:
seq #s: 0, 1, 2, 3
window size=3
receiver sees no
difference in two
scenarios!
incorrectly passes
duplicate data as new in
(a)
Q: what relationship
between seq # size and
window size?
Transport Layer 3-
Chapter 3 outline
3.1 Transport-layer
services
3.2 Multiplexing and
demultiplexing
3.3 Connectionless
transport: UDP
3.4 Principles of reliable
data transfer
3.5 Connection-oriented
transport: TCP
segment structure
reliable data transfer
flow control
connection management
3.6 Principles of
congestion control
3.7 TCP congestion control
Transport Layer 3-
TCP: Overview
point-to-point:
pipelined:
socket
door
a p p lic a t io n
w r ite s d a ta
a p p lic a t io n
re a d s d a ta
TC P
s e n d b u ffe r
TC P
r e c e iv e b u f f e r
connection-oriented:
handshaking (exchange
of control msgs) inits
sender, receiver state
before data exchange
socket
door
flow controlled:
sender will not
overwhelm receiver
segm ent
Transport Layer 3-
source port #
dest port #
sequence number
acknowledgement number
head not
UA P R S F
len used
checksum
Receive window
Urg data pnter
counting
by bytes
of data
(not segments!)
# bytes
rcvr willing
to accept
application
data
(variable length)
Transport Layer 3-
Host B
Host A
User
types
C
Seq=4
2, AC
K
=79, d
ata =
C
= C
a
t
a
d
=43,
K
C
A
79,
Seq=
host ACKs
receipt
of echoed
C
Seq=4
3, ACK
host ACKs
receipt of
C, echoes
back C
=80
time
Transport Layer 3-
too short:
premature timeout
unnecessary
retransmissions
too long: slow
reaction to segment
loss
Transport Layer 3-
Transport Layer 3-
Transport Layer 3-
DevRTT = (1-)*DevRTT +
*|SampleRTT-EstimatedRTT|
(typically, = 0.25)
Then set timeout interval:
TimeoutInterval = EstimatedRTT + 4*DevRTT
Transport Layer 3-
Chapter 3 outline
3.1 Transport-layer
services
3.2 Multiplexing and
demultiplexing
3.3 Connectionless
transport: UDP
3.4 Principles of reliable
data transfer
3.5 Connection-oriented
transport: TCP
segment structure
reliable data transfer
flow control
connection management
3.6 Principles of
congestion control
3.7 TCP congestion control
Transport Layer 3-
retransmissions are
triggered by:
timeout events
duplicate acks
initially consider
simplified TCP sender:
ignore duplicate acks
ignore flow control,
congestion control
Transport Layer 3-
timeout:
retransmit segment
that caused timeout
restart timer
Ack rcvd:
If acknowledges
previously unacked
segments
update what is known to
be acked
start timer if there are
outstanding segments
Transport Layer 3-
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
loop (forever) {
switch(event)
event: data received from application above
create TCP segment with sequence number NextSeqNum
if (timer currently not running)
start timer
pass segment to IP
NextSeqNum = NextSeqNum + length(data)
event: timer timeout
retransmit not-yet-acknowledged segment with
smallest sequence number
start timer
event: ACK received, with ACK field value of y
if (y > SendBase) {
SendBase = y
if (there are currently not-yet-acknowledged segments)
start timer
}
} /* end of loop forever */
TCP
sender
(simplified)
Comment:
SendBase-1: last
cumulatively
acked byte
Example:
SendBase-1 = 71;
y= 73, so the rcvr
wants 73+ ;
y > SendBase, so
that new data is
acked
Transport Layer 3-
Seq=92 timeout
=100
K
C
A
loss
Seq=9
2,
8 byte
=
AC K
s data
100
SendBase
= 100
SendBase
= 100
SendBase
= 120
SendBase
= 120
Host B
Seq=9
2, 8 b
ytes d
ata
2, 8 b
ytes d
ata
Seq=
100,
20 by
tes d
at a
0
10
=
K
120
=
C
K
A AC
Seq=9
2, 8
Seq=92 timeout
timeout
Seq=9
time
Host A
Host B
time
bytes
data
20
1
=
K
AC
premature timeout
Transport Layer 3-
Host B
timeout
Seq=9
SendBase
= 120
Seq=1
2, 8 b
ytes d
ata
=100
K
C
A
00, 20
bytes
data
loss
=
AC K
120
time
Cumulative ACK scenario
Transport Layer 3-
Event at Receiver
Transport Layer 3-
Fast Retransmit
if sender receives 3
ACKs for the same
data, it supposes that
segment after ACKed
data was lost:
fast retransmit: resend
segment before timer
expires
Transport Layer 3-
Host A
Host B
timeout
resen
d 2 nd s
egme
nt
time
Figure 3.37 Resending a segment after triple duplicate ACK
Transport Layer 3-
fast retransmit
Transport Layer 3-
Chapter 3 outline
3.1 Transport-layer
services
3.2 Multiplexing and
demultiplexing
3.3 Connectionless
transport: UDP
3.4 Principles of reliable
data transfer
3.5 Connection-oriented
transport: TCP
segment structure
reliable data transfer
flow control
connection management
3.6 Principles of
congestion control
3.7 TCP congestion control
Transport Layer 3-
flow control
speed-matching
service: matching the
send rate to the
receiving apps drain
rate
Transport Layer 3-
= RcvWindow
= RcvBuffer-[LastByteRcvd LastByteRead]
Transport Layer 3-
Chapter 3 outline
3.1 Transport-layer
services
3.2 Multiplexing and
demultiplexing
3.3 Connectionless
transport: UDP
3.4 Principles of reliable
data transfer
3.5 Connection-oriented
transport: TCP
segment structure
reliable data transfer
flow control
connection management
3.6 Principles of
congestion control
3.7 TCP congestion control
Transport Layer 3-
Transport Layer 3-
client
close
close
FIN
timed wait
FIN
ACK
server
A CK
closed
Transport Layer 3-
client
closing
closing
FIN
timed wait
Connection closed.
FIN
ACK
server
A CK
closed
closed
Transport Layer 3-
TCP server
lifecycle
TCP client
lifecycle
Transport Layer 3-
Chapter 3 outline
3.1 Transport-layer
services
3.2 Multiplexing and
demultiplexing
3.3 Connectionless
transport: UDP
3.4 Principles of reliable
data transfer
3.5 Connection-oriented
transport: TCP
segment structure
reliable data transfer
flow control
connection management
3.6 Principles of
congestion control
3.7 TCP congestion control
Transport Layer 3-
Transport Layer 3-
Host A
Host B
out
in : original data
unlimited shared
output link buffers
large delays
when congested
maximum
achievable
throughput
Transport Layer 3-
out
retransmitted data
Host B
Host A
Transport Layer 3-
out
R/2
in
in : original data
'in: original data, plus
copy
R/2
out
retransmitted data
Host B
Host A
Transport Layer 3-
in : original data
'in: original data, plus
copy
out
retransmitted data
Host B
Host A
no buffer space!
Transport Layer 3-
R/2
out
in
in : original data
'in: original data, plus
R/2
when sending at
R/2, some packets
are retransmissions
but asymptotic
goodput is still R/2
(why?)
out
retransmitted data
Host B
Host A
Transport Layer 3-
R/2
when sending at
R/2, some packets
are retransmissions
including duplicated
that are delivered!
out
in
in
'in
copy
timeout
R/2
out
Host B
Host A
Transport Layer 3-
R/2
when sending at
R/2, some packets
are retransmissions
including duplicated
that are delivered!
out
in
R/2
costs of congestion:
Transport Layer 3-
four senders
multihop paths
timeout/retransmit
Q: what happens as
in
and increase ?
in
Host A
out
in : original data
'in : original data, plus
retransmitted data
Host B
Transport Layer 3-
o
u
t
H
o
s
t
B
Transport Layer 3-
network-assisted
congestion control:
Transport Layer 3-
elastic service
if senders path
underloaded:
sender should use
available bandwidth
if senders path
congested:
sender throttled to
minimum guaranteed
rate
RM (resource management)
cells:
Transport Layer 3-
Transport Layer 3-
Chapter 3 outline
3.1 Transport-layer
services
3.2 Multiplexing and
demultiplexing
3.3 Connectionless
transport: UDP
3.4 Principles of reliable
data transfer
3.5 Connection-oriented
transport: TCP
segment structure
reliable data transfer
flow control
connection management
3.6 Principles of
congestion control
3.7 TCP congestion control
Transport Layer 3-
additive increase,
multiplicative decrease
saw tooth
behavior: probing
for bandwidth
c o n g e s tio n
w in d o w
2 4 K b y te s
1 6 K b y te s
8 K b y te s
time
tim e
Transport Layer 3-
roughly,
rate =
cwnd
RTT
Bytes/sec
Transport Layer 3-
Host A
RTT
Host B
one segm
en
two segm
ents
four segm
ents
time
Transport Layer 3-
Philosophy:
Transport Layer 3-
Refinement
Q: when should the
exponential increase
switch to linear?
A: when cwnd gets to
1/2 of its value
before timeout.
Implementation:
variable ssthresh
on loss event, ssthresh is
set to 1/2 of cwnd just
before loss event
Transport Layer 3-
cwnd = 1 MSS
ssthresh = 64 KB
dupACKcount = 0
slow
start
timeout
ssthresh = cwnd/2
cwnd = 1 MSS
dupACKcount = 0
retransmit missing segment
dupACKcount == 3
ssthresh= cwnd/2
cwnd = ssthresh + 3
retransmit missing segment
New
New
ACK!
new ACK
cwnd = cwnd+MSS
dupACKcount = 0
transmit new segment(s), as allowed
cwnd > ssthresh
timeout
ssthresh = cwnd/2
cwnd = 1 MSS
dupACKcount = 0
retransmit missing segment
timeout
ssthresh = cwnd/2
cwnd = 1
dupACKcount = 0
retransmit missing segment
ACK!
new ACK
cwnd = cwnd + MSS (MSS/cwnd)
dupACKcount = 0
transmit new segment(s), as allowed
congestion
avoidance
duplicate ACK
dupACKcount++
New
ACK!
New ACK
cwnd = ssthresh
dupACKcount = 0
fast
recovery
dupACKcount == 3
ssthresh= cwnd/2
cwnd = ssthresh + 3
retransmit missing segment
duplicate ACK
cwnd = cwnd + MSS
transmit new segment(s), as allowed
Transport Layer 3-
TCP throughput
Transport Layer 3-
1.22 MSS
RTT L
Transport Layer 3-
TCP Fairness
fairness goal: if K TCP sessions share same
bottleneck link of bandwidth R, each should have
average rate of R/K
TCP connection 1
TCP
connection 2
bottleneck
router
capacity R
Transport Layer 3-
R
Connection 2 throughput
Connection 1 throughput R
Transport Layer 3-
Fairness (more)
Fairness and UDP
multimedia apps often
do not use TCP
pump audio/video at
constant rate, tolerate
packet loss
Transport Layer 3-
Chapter 3: Summary
Next:
leaving the network
edge (application,
transport layers)
into the network
core
Transport Layer 3-