Professional Documents
Culture Documents
Chapter 3
Transport Layer
Our goals:
understand principles
behind transport
layer services:
Computer Networking:
A Top Down Approach
4th edition.
Jim Kurose, Keith Ross
Addison-Wesley, July
2007.
Transport Layer
UDP: connectionless
transport
TCP: connection-oriented
transport
TCP congestion control
Transport Layer
3-2
Transport Layer
3-3
rt
po
3.6 Principles of
congestion control
3.7 TCP congestion
control
s
an
tr
segment structure
reliable data transfer
flow control
connection management
d
en
den
application
transport
network
data link
physical
l
ca
3.5 Connection-oriented
transport: TCP
logical communication
gi
lo
3.1 Transport-layer
services
3.2 Multiplexing and
demultiplexing
3.3 Connectionless
transport: UDP
3.4 Principles of
reliable data transfer
3-1
Chapter 3 outline
multiplexing/demultipl
exing
reliable data transfer
flow control
congestion control
application
transport
network
data link
physical
Transport Layer
3-4
Transport Layer
3.1 Transport-layer
services
3.2 Multiplexing and
demultiplexing
3.3 Connectionless
transport: UDP
3.4 Principles of
reliable data transfer
network
data link
physicalnetwork
no-frills extension of
best-effort IP
network
data link
physical
data link
physical
network
data link
physical
delay guarantees
bandwidth guarantees
application
transport
network
data link
physical
Transport Layer
3-5
Chapter 3 outline
unreliable, unordered
delivery: UDP
network
data link
physical
rt
po
processes = kids
app messages = letters
in envelopes
hosts = houses
transport protocol =
Ann and Bill
network-layer protocol
= postal service
network
data link
physical
s
an
tr
congestion control
flow control
connection setup
d
en
den
application
transport
network
data link
physical
l
ca
communication
between hosts
reliable, in-order
delivery (TCP)
gi
lo
Household analogy:
3-6
Multiplexing/demultiplexing
segment structure
reliable data transfer
flow control
connection management
= socket
application
3.6 Principles of
congestion control
3.7 TCP congestion
control
transport
network
link
host 1
3-7
= process
P3
P1
P1
application
transport
network
P2
P4
application
transport
network
link
link
physical
Transport Layer
3.5 Connection-oriented
transport: TCP
physical
host 2
physical
host 3
Transport Layer
3-8
Connectionless demultiplexing
32 bits
source port #
dest port #
application
data
(message)
P1
P1
P3
SP: 6428
DP: 9157
SP: 6428
DP: 5775
SP: 9157
client
IP: A
DP: 6428
SP: 5775
server
IP: C
DP: 6428
IP datagrams with
different source IP
addresses and/or source
port numbers directed
to same socket
3-10
Connection-oriented demux
Transport Layer
3-9
Client
IP:B
source IP address
source port number
dest IP address
dest port number
3-11
Transport Layer
3-12
Connection-oriented demux
(cont)
P1
P4
P5
P6
Connection-oriented demux:
Threaded Web Server
P2
P1P3
P1
SP: 5775
client
IP: A
DP: 80
S-IP: B
D-IP:C
S-IP: B
D-IP:C
SP: 9157
DP: 80
DP: 80
D-IP:C
server
IP: C
S-IP: B
D-IP:C
SP: 9157
Client
IP:B
Transport Layer
3.1 Transport-layer
services
3.2 Multiplexing and
demultiplexing
3.3 Connectionless
transport: UDP
3.4 Principles of
reliable data transfer
client
IP: A
DP: 80
S-IP: A
D-IP:C
SP: 9157
server
IP: C
DP: 80
S-IP: B
D-IP:C
Client
IP:B
Transport Layer
3-13
Chapter 3 outline
P1P3
SP: 5775
DP: 80
SP: 9157
S-IP: A
P2
P4
3-14
3.5 Connection-oriented
transport: TCP
Internet transport
protocol
best effort service, UDP
segments may be:
lost
delivered out of order
to app
segment structure
reliable data transfer
flow control
connection management
3.6 Principles of
congestion control
3.7 TCP congestion
control
Transport Layer
connectionless:
3-15
no handshaking between
UDP sender, receiver
each UDP segment
handled independently
of others
Transport Layer
3-16
UDP checksum
UDP: more
often used for streaming
multimedia apps
loss tolerant
rate sensitive
Length, in
bytes of UDP
segment,
including
header
source port #
dest port #
length
checksum
DNS
SNMP
reliable transfer over UDP:
add reliability at
application layer
application-specific
error recovery!
32 bits
compute checksum of
received segment
Transport Layer
3-17
Receiver:
as sequence of 16-bit
integers
checksum: addition (1s
complement sum) of
segment contents
sender puts checksum
value into UDP checksum
field
Application
data
(message)
Transport Layer
Sender:
3-18
Chapter 3 outline
Note
When adding numbers, a carryout from the
most significant bit needs to be added to the
result
3.1 Transport-layer
services
3.2 Multiplexing and
demultiplexing
3.3 Connectionless
transport: UDP
3.4 Principles of
reliable data transfer
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
wraparound 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1
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
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-19
Transport Layer
3-20
Transport Layer
Transport Layer
3-21
send
side
Transport Layer
3-22
3-23
deliver_data(): called by
rdt to deliver data to upper
receive
side
3-24
Rdt1.0:
Well:
incrementally develop sender, receiver sides of
reliable data transfer protocol (rdt)
consider only unidirectional data transfer
state
1
state
2
event
actions
Transport Layer
rdt_send(data)
packet = make_pkt(data)
udt_send(packet)
Wait for
call from
below
sender
rdt_rcv(packet)
extract (packet,data)
deliver_data(data)
receiver
Transport Layer
sender
error detection
receiver feedback: control msgs (ACK,NAK) rcvr->sender
Transport Layer
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for
Wait for
call from
ACK or
udt_send(sndpkt)
above
NAK
Wait for
call from
above
3-26
3-25
no bit errors
no loss of packets
3-27
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-28
rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
udt_send(NAK)
udt_send(NAK)
Wait for
call from
below
rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
Wait for
call from
below
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
Transport Layer
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
Transport Layer
3-29
3-30
What happens if
ACK/NAK corrupted?
sender doesnt know what
happened at receiver!
possible duplicate
Handling duplicates:
Wait for
call 0 from
above
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt)
Transport Layer
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
udt_send(sndpkt)
3-31
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
udt_send(sndpkt)
Wait for
ACK or
NAK 0
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-32
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
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
Transport Layer
3-34
3-33
Receiver:
must check if received
packet is duplicate
Wait for
call 0 from
above
rdt_rcv(rcvpkt) &&
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
Wait for
0 from
below
Wait for
ACK
0
sender FSM
fragment
( corrupt(rcvpkt) ||
isACK(rcvpkt,1) )
udt_send(sndpkt)
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,0)
receiver FSM
fragment
Transport Layer
3-35
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK1, chksum)
udt_send(sndpkt)
Transport Layer
3-36
rdt3.0 sender
rdt_send(data)
New assumption:
underlying channel can
also lose packets (data
or ACKs)
rdt_rcv(rcvpkt)
retransmits if no ACK
Transport Layer
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isACK(rcvpkt,0) )
Wait
for
ACK1
Wait for
call 1 from
above
rdt_send(data)
rdt_rcv(rcvpkt)
3-37
rdt3.0 in action
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)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,1)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isACK(rcvpkt,1) )
Transport Layer
3-38
Transport Layer
3-40
rdt3.0 in action
Transport Layer
3-39
10
Performance of rdt3.0
Ttransmit =
sender:
sender
sender
L/R
RTT + L / R
.008
30.008
receiver
RTT
= 0.00027
1KB pkt every 30 msec -> 33kB/sec thruput over 1 Gbps link
network protocol limits use of physical resources!
Transport Layer
3-41
sender
L/R
RTT + L / R
.008
30.008
= 0.00027
Transport Layer
3-42
11