Professional Documents
Culture Documents
Transport Layer
Transport Layer
lo
r transport protocols run in data link
gi
ca
physical
end systems
le
network
nd
data link
m send side: breaks app
-e
physical network
nd
data link
messages into segments, physical
tr
a
passes to network layer network
ns
data link
po
m rcv side: reassembles
physical
rt
segments into messages, application
transport
passes to app layer network
data link
r more than one transport physical
lo
data link
gi
flow control
ca
m physical
le
network
connection setup
nd
data link
m
-e
physical network
nd
data link
r unreliable, unordered physical
tr
a
delivery: UDP network
ns
data link
po
physical
rt
m no-frills extension of
“best-effort” IP application
transport
network
r services not available: data link
physical
m delay guarantees
m bandwidth guarantees
P3 P1
P1 P2 P4 application
application application
host 2 host 3
host 1
Transport Layer 3-7
How demultiplexing works
r host receives IP datagrams
m each datagram has source 32 bits
IP address, destination IP
address source port # dest port #
P2 P1
P1
P3
P2 P3 P4 P1
P1
SP: 80 SP: 80
DP: 9157 DP: 5775
Sender: Receiver:
r treat segment contents r All message data and
as sequence of 16-bit checksum added
integers
together
r checksum: addition (1’s
complement sum) of r Result should be all 1s
segment contents r There may still be
r sender puts checksum errors if two bits may
value into UDP checksum
alternately flip
field
Sender
Add data words
Receiver
Data parts
Checksum
sender receiver
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
Receiver:
Sender:
r must check if received
r seq # added to pkt
packet is duplicate
r two seq. #’s (0,1) will m state indicates whether
suffice. 0 or 1 is expected pkt
r Eliminate NAK only use seq #
ACK r note: receiver can not
r must check if received know if its last ACK
ACK corrupted received OK at sender
r duplicate ACK at
sender results in
retransmit current pkt Transport Layer 3-23
rdt2.2: sender, receiver fragments
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
Wait for Wait for
ACK isACK(rcvpkt,1) )
call 0 from
above 0 udt_send(sndpkt)
sender FSM
fragment rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && && isACK(rcvpkt,0)
(corrupt(rcvpkt) || L
has_seq1(rcvpkt)) Wait for receiver FSM
0 from
udt_send(sndpkt) below fragment
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK1, chksum)
udt_send(sndpkt) Transport Layer 3-24