0% found this document useful (0 votes)
89 views39 pages

Lecture 12 To Lecture 15 PDF

This document discusses principles of reliable data transfer over unreliable channels. It describes RDT 1.0, which provides reliable transfer over a reliable channel using no additional mechanisms beyond sending and receiving data. It then introduces RDT 2.0, which adds error detection using checksums and feedback from the receiver in the form of acknowledgments and negative acknowledgments to handle bit errors over an unreliable channel. However, RDT 2.0 has a flaw if acknowledgments or negative acknowledgments themselves are corrupted.

Uploaded by

abhishek reddy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
89 views39 pages

Lecture 12 To Lecture 15 PDF

This document discusses principles of reliable data transfer over unreliable channels. It describes RDT 1.0, which provides reliable transfer over a reliable channel using no additional mechanisms beyond sending and receiving data. It then introduces RDT 2.0, which adds error detection using checksums and feedback from the receiver in the form of acknowledgments and negative acknowledgments to handle bit errors over an unreliable channel. However, RDT 2.0 has a flaw if acknowledgments or negative acknowledgments themselves are corrupted.

Uploaded by

abhishek reddy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 39

CS F303

(Computer Networks)
Vishal Gupta
Department of Computer Science and Information Systems
BITS Pilani Birla Institute of Technology and Science
Pilani|Dubai|Goa|Hyderabad
Pilani Campus, Pilani
BITS Pilani
Pilani|Dubai|Goa|Hyderabad

Agenda:
Principles of Reliable Data Transfer
Principles of reliable data transfer
 important in application, transport, link layers
 top-10 list of important networking topics!

 characteristics of unreliable channel will determine complexity of reliable data transfer


protocol (rdt)

Transport Layer 3-3


Principles of reliable data transfer
 important in application, transport, link layers
 top-10 list of important networking topics!

 characteristics of unreliable channel will determine complexity of reliable data transfer


protocol (rdt)

Transport Layer 3-4


Principles of reliable data transfer
 important in application, transport, link layers
 top-10 list of important networking topics!

 characteristics of unreliable channel will determine complexity of reliable data transfer


protocol (rdt)

Transport Layer 3-5


Reliable data transfer: getting started

rdt_send(): called from above, deliver_data(): called by


(e.g., by app.). Passed data to rdt to deliver data to upper
deliver to receiver upper layer

send receive
side side

udt_send(): called by rdt, rdt_rcv(): called when packet


to transfer packet over arrives on rcv-side of channel
unreliable channel to receiver

Transport Layer 3-6


Reliable data transfer: getting started
we’ll:
• incrementally develop sender, receiver sides of
reliable data transfer protocol (rdt)
• consider only unidirectional data transfer
– but control info will flow on both directions!
• use finite state machines (FSM) to specify sender,
event causing state transition
receiver actions taken on state transition
state: when in this
“state” next state state state
uniquely determined 1 event
by next event 2
actions

Transport Layer 3-7


rdt1.0: reliable transfer over a reliable channel
underlying channel perfectly reliable
 no bit errors
 no loss of packets
separate FSMs for sender, receiver:
 sender sends data into underlying channel
 receiver reads data from underlying channel
Wait for rdt_send(data) Wait for rdt_rcv(packet)
call from call from extract (packet,data)
above packet = make_pkt(data) below deliver_data(data)
udt_send(packet)

sender receiver

Transport Layer 3-8


rdt2.0: channel with bit errors
underlying channel may flip bits in packet
 checksum to detect bit errors
the question: how to recover from errors:
 acknowledgements (ACKs): receiver explicitly tells
sender that pkt received OK
 negative acknowledgements (NAKs): receiver explicitly
tells sender that pkt had errors
 sender
Howretransmits
do humans recover
pkt on from
receipt of NAK“errors”
new mechanisms in rdt2.0 (beyond rdt1.0):
during conversation?
 error detection
 receiver feedback: control msgs (ACK,NAK) rcvr->sender

Transport Layer 3-9


rdt2.0: channel with bit errors
underlying channel may flip bits in packet
 checksum to detect bit errors
the question: how to recover from errors:
 acknowledgements (ACKs): receiver explicitly tells
sender that pkt received OK
 negative acknowledgements (NAKs): receiver explicitly
tells sender that pkt had errors
 sender retransmits pkt on receipt of NAK
new mechanisms in rdt2.0 (beyond rdt1.0):
 error detection
 feedback: control msgs (ACK,NAK) from receiver to
sender

Transport Layer 3-10


rdt2.0: FSM specification
rdt_send(data)
sndpkt = make_pkt(data, checksum) receiver
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for Wait for rdt_rcv(rcvpkt) &&
call from ACK or udt_send(sndpkt) corrupt(rcvpkt)
above NAK
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Wait for
L
call from
sender below

rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)

Transport Layer 3-11


BITS Pilani, Deemed to be University under Section 3 of UGC Act, 1956
rdt2.0: operation with no errors
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for Wait for rdt_rcv(rcvpkt) &&
call from ACK or udt_send(sndpkt) corrupt(rcvpkt)
above NAK
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Wait for
L call from
below

rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)

Transport Layer 3-12


BITS Pilani, Deemed to be University under Section 3 of UGC Act, 1956
rdt2.0: error scenario
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for Wait for rdt_rcv(rcvpkt) &&
call from ACK or udt_send(sndpkt) corrupt(rcvpkt)
above NAK
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Wait for
L call from
below

rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)

Transport Layer 3-13


BITS Pilani, Deemed to be University under Section 3 of UGC Act, 1956
rdt2.0 has a fatal flaw!
what happens if handling duplicates:
ACK/NAK corrupted? • sender retransmits current
• sender doesn’t know pkt if ACK/NAK corrupted
what happened at • sender adds sequence
receiver! number to each pkt
• can’t just retransmit: • receiver discards (doesn’t
possible duplicate deliver up) duplicate pkt

stop and wait


sender sends one packet,
then waits for receiver
response

Transport Layer 3-14


rdt2.1: sender, handles garbled ACK/NAKs
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt) rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
Wait for Wait for
ACK or
isNAK(rcvpkt) )
call 0 from
NAK 0 udt_send(sndpkt)
above
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt) && notcorrupt(rcvpkt)
&& isACK(rcvpkt)
L
L
Wait for Wait for
ACK or call 1 from
rdt_rcv(rcvpkt) && NAK 1 above
( corrupt(rcvpkt) ||
isNAK(rcvpkt) ) rdt_send(data)

udt_send(sndpkt) sndpkt = make_pkt(1, data, checksum)


udt_send(sndpkt)

Transport Layer 3-15


rdt2.1: receiver, handles garbled ACK/NAKs
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq0(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && (corrupt(rcvpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum) sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
Wait for Wait for
rdt_rcv(rcvpkt) && 0 from 1 from rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) && below below not corrupt(rcvpkt) &&
has_seq1(rcvpkt) has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum) sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)

extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)

Transport Layer 3-16


BITS Pilani, Deemed to be University under Section 3 of UGC Act, 1956
rdt2.1: discussion
sender: receiver:
• seq # added to pkt must check if received
• two seq. #’s (0,1) will packet is duplicate
suffice. Why?  state indicates whether
• must check if received 0 or 1 is expected pkt
ACK/NAK corrupted seq #
• twice as many states note: receiver can not
– state must “remember” know if its last ACK/NAK
whether “expected” pkt received OK at sender
should have seq # of 0 or
1

Transport Layer 3-17


rdt2.2: a NAK-free protocol

same functionality as rdt2.1, using ACKs only


instead of NAK, receiver sends ACK for last pkt
received OK
 receiver must explicitly include seq # of pkt being ACKed
duplicate ACK at sender results in same action as
NAK: retransmit current pkt

Transport Layer 3-18


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-19 BITS Pilani, Deemed to be University under Section 3 of UGC Act, 1956
rdt3.0: channels with errors and loss

new assumption: approach: sender waits


underlying channel can “reasonable” amount of
also lose packets (data, time for ACK
• retransmits if no ACK
ACKs) received in this time
– checksum, seq. #, ACKs, • if pkt (or ACK) just delayed
(not lost):
retransmissions will be
of help … but not – retransmission will be
enough duplicate, but seq. #’s
already handles this
– receiver must specify seq
# of pkt being ACKed
• requires countdown timer

Transport Layer 3-20


rdt3.0 sender
rdt_send(data)
rdt_rcv(rcvpkt) &&
sndpkt = make_pkt(0, data, checksum) ( corrupt(rcvpkt) ||
udt_send(sndpkt) isACK(rcvpkt,1) )
rdt_rcv(rcvpkt) start_timer L
L Wait for Wait
for timeout
call 0from
ACK0 udt_send(sndpkt)
above
start_timer
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt,1) && notcorrupt(rcvpkt)
stop_timer && isACK(rcvpkt,0)
stop_timer
Wait Wait for
timeout for call 1 from
udt_send(sndpkt) ACK1 above
start_timer rdt_rcv(rcvpkt)
rdt_send(data) L
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) || sndpkt = make_pkt(1, data, checksum)
isACK(rcvpkt,0) ) udt_send(sndpkt)
start_timer
L

Transport Layer 3-21


BITS Pilani, Deemed to be University under Section 3 of UGC Act, 1956
rdt3.0 in action
sender receiver sender receiver
send pkt0 pkt0 send pkt0 pkt0
rcv pkt0 rcv pkt0
ack0 send ack0 ack0 send ack0
rcv ack0 rcv ack0
send pkt1 pkt1 send pkt1 pkt1
rcv pkt1 X
ack1 send ack1 loss
rcv ack1
send pkt0 pkt0
rcv pkt0 timeout
ack0 send ack0 resend pkt1 pkt1
rcv pkt1
ack1 send ack1
rcv ack1
send pkt0 pkt0
(a) no loss rcv pkt0
ack0 send ack0

(b) packet loss


Transport Layer 3-22
BITS Pilani, Deemed to be University under Section 3 of UGC Act, 1956
rdt3.0 in action
sender receiver
sender receiver send pkt0 pkt0
send pkt0 pkt0 rcv pkt0
send ack0
rcv pkt0 ack0
send ack0 rcv ack0
ack0 send pkt1 pkt1
rcv ack0 rcv pkt1
send pkt1 pkt1
send ack1
rcv pkt1 ack1
ack1 send ack1
X
loss timeout
resend pkt1 pkt1
rcv pkt1
timeout
resend pkt1 pkt1 rcv ack1 (detect duplicate)
rcv pkt1 send pkt0
pkt0
send ack1
(detect duplicate) ack1
ack1 send ack1 rcv ack1 rcv pkt0
rcv ack1 Do nothing
ack0 send ack0
send pkt0 pkt0
Rcv ack0 pkt1
rcv pkt0 rcv pkt1
ack0 send ack0 send pkt1
ack1 send ack1

(c) ACK loss (d) premature timeout/ delayed ACK

Transport Layer 3-23


BITS Pilani, Deemed to be University under Section 3 of UGC Act, 1956
Performance of rdt3.0
rdt3.0 is correct, but performance stinks
e.g.: 1 Gbps link, 15 ms prop. delay, 8000 bit packet:
L 8000 bits
Dtrans = R = 9 = 8 microsecs
10 bits/sec

 U sender: utilization – fraction of time sender busy sending

U L/R .008
sender = = = 0.00027
RTT + L / R 30.008

 network protocol limits use of physical resources!

Transport Layer 3-24


rdt3.0: stop-and-wait operation
sender receiver
first packet bit transmitted, t = 0
last packet bit transmitted, t = L / R

first packet bit arrives


RTT last packet bit arrives, send ACK

ACK arrives, send next


packet, t = RTT + L / R

U L/R .008
sender = = = 0.00027
RTT + L / R 30.008

Transport Layer 3-25 BITS Pilani, Deemed to be University under Section 3 of UGC Act, 1956
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

two generic forms of pipelined protocols: go-Back-N,


selective repeat
Transport Layer 3-26
Pipelining: increased utilization
sender receiver
first packet bit transmitted, t = 0
last bit transmitted, t = L / R

first packet bit arrives


RTT last packet bit arrives, send ACK
last bit of 2nd packet arrives, send ACK
last bit of 3rd packet arrives, send ACK
ACK arrives, send next
packet, t = RTT + L / R
3-packet pipelining increases
utilization by a factor of 3!

U 3L / R .0024
sender = = = 0.00081
RTT + L / R 30.008

Transport Layer 3-27 BITS Pilani, Deemed to be University under Section 3 of UGC Act, 1956
Pipelined protocols: overview
Go-back-N: Selective Repeat:
• sender can have up to • sender can have up to N
N unacked packets in unack’ed packets in
pipeline pipeline
• receiver only sends
cumulative ack • rcvr sends individual ack
– doesn’t ack packet if for each packet
there’s a gap
• sender has timer for
oldest unacked packet • sender maintains timer
– when timer expires, for each unacked packet
retransmit all unacked – when timer expires,
packets retransmit only that
unacked packet

Transport Layer 3-28


Go-Back-N: sender
• k-bit seq # in pkt header
• “window” of up to N, consecutive unack’ed pkts allowed

 ACK(n): ACKs all pkts up to, including seq # n - “cumulative


ACK”
 may receive duplicate ACKs (see receiver)
 timer for oldest in-flight pkt
 timeout(n): retransmit packet n and all higher seq # pkts in
window
Transport Layer 3-29
GBN: sender extended FSM
rdt_send(data)
if (nextseqnum < base+N) {
sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
}
L else
refuse_data(data)
base=1
nextseqnum=1
timeout
start_timer
Wait
udt_send(sndpkt[base])
rdt_rcv(rcvpkt) udt_send(sndpkt[base+1])
&& corrupt(rcvpkt) …
udt_send(sndpkt[nextseqnum-1])
L
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
Transport Layer 3-30
BITS Pilani, Deemed to be University under Section 3 of UGC Act, 1956
GBN: receiver extended FSM
default
udt_send(sndpkt) rdt_rcv(rcvpkt)
&& notcurrupt(rcvpkt)
L && hasseqnum(rcvpkt,expectedseqnum)
expectedseqnum=1 Wait extract(rcvpkt,data)
sndpkt = deliver_data(data)
make_pkt(expectedseqnum,ACK,chksum) sndpkt = make_pkt(expectedseqnum,ACK,chksum)
udt_send(sndpkt)
expectedseqnum++

ACK-only: always send ACK for correctly-received pkt with


highest in-order seq #
– may generate duplicate ACKs
– need only remember expectedseqnum
• out-of-order pkt:
– discard (don’t buffer): no receiver buffering!
– re-ACK pkt with highest in-order seq #
Transport Layer 3-31
GBN in action
sender window (N=4) sender receiver
012345678 send pkt0
012345678 send pkt1
012345678 send pkt2 receive pkt0, send ack0
012345678 send pkt3 Xloss receive pkt1, send ack1
(wait)
receive pkt3, discard,
012345678 rcv ack0, send pkt4 (re)send ack1
012345678 rcv ack1, send pkt5 receive pkt4, discard,
(re)send ack1
ignore duplicate ACK receive pkt5, discard,
(re)send ack1
pkt 2 timeout
012345678 send pkt2
012345678 send pkt3
012345678 send pkt4 rcv pkt2, deliver, send ack2
012345678 send pkt5 rcv pkt3, deliver, send ack3
rcv pkt4, deliver, send ack4
rcv pkt5, deliver, send ack5

Transport Layer 3-32


BITS Pilani, Deemed to be University under Section 3 of UGC Act, 1956
Selective repeat
• receiver individually acknowledges all correctly
received pkts
– buffers pkts, as needed, for eventual in-order
delivery to upper layer
• sender only resends pkts for which ACK not
received
– sender timer for each unACKed pkt
• sender window
– N consecutive seq #’s
– limits seq #s of sent, unACKed pkts

Transport Layer 3-33


Selective repeat: sender, receiver windows

Transport Layer 3-34


BITS Pilani, Deemed to be University under Section 3 of UGC Act, 1956
Selective repeat
sender receiver
data from above: pkt n in [rcvbase, rcvbase+N-1]
 if next available seq # in  send ACK(n)
window, send pkt  out-of-order: buffer
 in-order: deliver (also
timeout(n): deliver buffered, in-order
 resend pkt n, restart timer pkts), advance window to
next not-yet-received pkt
ACK(n) in [sendbase,sendbase+N]:
pkt n in [rcvbase-N,rcvbase-1]
 mark pkt n as received  ACK(n)
 if n smallest unACKed pkt, otherwise:
advance window base to
 ignore
next unACKed seq #

Transport Layer 3-35


Selective repeat
sender receiver
data from above: pkt n in [rcvbase, rcvbase+N-1]
 if next available seq # in  send ACK(n)
window, send pkt  out-of-order: buffer
 in-order: deliver (also
timeout(n): deliver buffered, in-order
 resend pkt n, restart timer pkts), advance window to
next not-yet-received pkt
ACK(n) in [sendbase,sendbase+N]:
pkt n in [rcvbase-N,rcvbase-1]
 mark pkt n as received  ACK(n)
 if n smallest unACKed pkt, otherwise:
advance window base to
 ignore
next unACKed seq #

Transport Layer 3-36


Selective repeat in action
sender window (N=4) sender receiver
012345678 send pkt0
012345678 send pkt1
012345678 send pkt2 receive pkt0, send ack0
012345678 send pkt3 Xloss receive pkt1, send ack1
(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

Q: what happens when ack2 arrives?

Transport Layer 3-37


BITS Pilani, Deemed to be University under Section 3 of UGC Act, 1956
sender window receiver window
Selective repeat: (after receipt) (after receipt)

dilemma 0123012 pkt0


pkt1
0123012 0123012
0123012 pkt2 0123012
example: 0123012 pkt3
0123012

• seq #’s: 0, 1, 2, 3 0123012


X

• window size=3 pkt0 will accept packet


with seq number 0
(a) no problem
 receiver sees no
difference in two receiver can’t see sender side.
scenarios! receiver behavior identical in both cases!
something’s (very) wrong!
 duplicate data
accepted as new in 0123012 pkt0
(b) 0123012 pkt1 0123012
0123012 pkt2 0123012
X 0123012
Q: what relationship X
between seq # size timeout
retransmit pkt0 X
and window size to 0123012 pkt0
will accept packet
avoid problem in (b)? with seq number 0
(b) oops!
Transport Layer 3-38
BITS Pilani
Pilani|Dubai|Goa|Hyderabad

You might also like