E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
1
EE 586 Communication andSwitching Networks
Lecture 15
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
rdt3.0: channels with errors and loss
new assumption:underlying channel canalso lose packets(data, ACKs)
checksum, seq. #,ACKs, retransmissionswill be of help … butnot enough
approach: sender waitsreasonable amount oftime for ACK
retransmits if no ACKreceived in this time
if pkt (or ACK) just delayed(not lost):
retransmission will beduplicate, but seq. #salready handles this
receiver must specify seq# of pkt being ACKed
requires countdown timer
underline_base
2
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
rdt3.0 sender
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
WaitforACK0
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isACK(rcvpkt,1) )
Wait for
call 1 fromabove
sndpkt = make_pkt(1, data, checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,0)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isACK(rcvpkt,0) )
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0fromabove
WaitforACK1
rdt_rcv(rcvpkt)
underline_base
3
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
sender
receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender
receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1
X
loss
pkt1
alarm_clock_ringing
timeout
resend pkt1
rdt3.0 in action
underline_base
4
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
rdt3.0 in action
underline_base
rcv pkt1
send ack1
(detect duplicate)
pkt1
sender
receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1
X
loss
pkt1
alarm_clock_ringing
timeout
resend pkt1
rcv pkt1
send ack1
(detect duplicate)
pkt1
sender
receiver
rcv pkt1
send ack0
rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout/ delayed ACK
pkt1
alarm_clock_ringing
timeout
resend pkt1
ack1
send ack1
ack1
send pkt0
rcv ack1
pkt0
rcv pkt0
send ack0
ack0
5
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
rdt3.0: stop-and-wait operation
first packet bit transmitted, t = 0
sender
receiver
RTT
last packet bit transmitted, t = L / R
first packet bit arrives
last packet bit arrives, send ACK
ACK arrives, send next
packet, t = RTT + L / R
6
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
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
rdt_pipelined1
desktop_computer_stylized_medium
desktop_computer_stylized_medium
7
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
Pipelining: increased utilization
first packet bit transmitted, t = 0
sender
receiver
RTT
last bit transmitted, t = L / R
first packet bit arrives
last packet bit arrives, send ACK
ACK arrives, send next
packet, t = RTT + L / R
last bit of 2nd packet arrives, send ACK
last bit of 3rd packet arrives, send ACK
3-packet pipelining increases
 utilization by a factor of 3!
8
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
Pipelined protocols: overview
Go-back-N:
sender can have up toN unacked packets inpipeline
receiver only sendscumulative ack
doesnt ack packet iftheres a gap
sender has timer foroldest unacked packet
when timer expires,retransmit all unackedpackets
9
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
Pipelined protocols: overview
Go-back-N:
sender can have up toN unacked packets inpipeline
receiver only sendscumulative ack
doesnt ack packet iftheres a gap
sender has timer foroldest unacked packet
when timer expires,retransmit all unackedpackets
Selective Repeat:
sender can have up to Nunacked packets inpipeline
rcvr sends individual ackfor each packet
sender maintains timerfor each unacked packet
when timer expires,retransmit only thatunacked packet
10
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Go-Back-N: sender
k-bit seq # in pkt header
underline_base
11
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Go-Back-N: sender
k-bit seq # in pkt header
window of up to N, consecutive unacked pkts allowed
gbn_seqnum
underline_base
12
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Go-Back-N: sender
k-bit seq # in pkt header
window of up to N, consecutive unacked pkts allowed
ACK(n):  ACKs all pkts up to, including 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 inwindow
gbn_seqnum
underline_base
13
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
GBN: sender extended FSM
Wait
timeout
rdt_send(data)
rdt_rcv(rcvpkt) &&
   notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
   && corrupt(rcvpkt)
underline_base
14
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
GBN: sender extended FSM
Wait
timeout
rdt_send(data)
if (nextseqnum < base+N) {
    sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum)
    udt_send(sndpkt[nextseqnum])
    if (base == nextseqnum)
       start_timer
    nextseqnum++
    }
else
  refuse_data(data)
rdt_rcv(rcvpkt) &&
   notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
   && corrupt(rcvpkt)
underline_base
15
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
GBN: sender extended FSM
Wait
timeout
rdt_send(data)
if (nextseqnum < base+N) {
    sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum)
    udt_send(sndpkt[nextseqnum])
    if (base == nextseqnum)
       start_timer
    nextseqnum++
    }
else
  refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
    stop_timer
  else
    start_timer
rdt_rcv(rcvpkt) &&
   notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
   && corrupt(rcvpkt)
underline_base
16
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
GBN: sender extended FSM
Wait
start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum < base+N) {
    sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum)
    udt_send(sndpkt[nextseqnum])
    if (base == nextseqnum)
       start_timer
    nextseqnum++
    }
else
  refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
    stop_timer
  else
    start_timer
rdt_rcv(rcvpkt) &&
   notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
   && corrupt(rcvpkt)
underline_base
17
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
GBN: sender extended FSM
Wait
start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum < base+N) {
    sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum)
    udt_send(sndpkt[nextseqnum])
    if (base == nextseqnum)
       start_timer
    nextseqnum++
    }
else
  refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
    stop_timer
  else
    start_timer
rdt_rcv(rcvpkt) &&
   notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
   && corrupt(rcvpkt)
underline_base
18
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
ACK-only: always send ACK for correctly-receivedpkt with highest in-order seq #
need only remember expectedseqnum
Wait
rdt_rcv(rcvpkt)
  && notcurrupt(rcvpkt)
  && hasseqnum(rcvpkt,expectedseqnum)
expectedseqnum=1
sndpkt =
  make_pkt(expectedseqnum,ACK,chksum)
GBN: receiver extended FSM
underline_base
19
(modified by Cheung for EE586; based on K&R original)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(expectedseqnum,ACK,chksum)
udt_send(sndpkt)
expectedseqnum++
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
ACK-only: always send ACK for correctly-receivedpkt with highest in-order seq #
need only remember expectedseqnum
out-of-order pkt:
discard (dont buffer): no receiver buffering!
re-ACK pkt with highest in-order seq #
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
  && notcurrupt(rcvpkt)
  && hasseqnum(rcvpkt,expectedseqnum)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(expectedseqnum,ACK,chksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
  make_pkt(expectedseqnum,ACK,chksum)
GBN: receiver extended FSM
underline_base
20
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
GBN in action
send  pkt0
send  pkt1
send  pkt2
send  pkt3
(wait)
sender
receiver
receive pkt0, send ack0
receive pkt1, send ack1
 
receive pkt3, discard,
           (re)send ack1
X
loss
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
underline_base
21
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
GBN in action
send  pkt0
send  pkt1
send  pkt2
send  pkt3
(wait)
sender
receiver
receive pkt0, send ack0
receive pkt1, send ack1
 
receive pkt3, discard,
           (re)send ack1
rcv ack0, send pkt4
rcv ack1, send pkt5
X
loss
receive pkt4, discard,
           (re)send ack1
receive pkt5, discard,
           (re)send ack1
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
underline_base
22
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
GBN in action
send  pkt0
send  pkt1
send  pkt2
send  pkt3
(wait)
sender
receiver
receive pkt0, send ack0
receive pkt1, send ack1
 
receive pkt3, discard,
           (re)send ack1
rcv ack0, send pkt4
rcv ack1, send pkt5
alarm_clock_ringing
pkt 2 timeout
send  pkt2
send  pkt3
send  pkt4
send  pkt5
X
loss
receive pkt4, discard,
           (re)send ack1
receive pkt5, discard,
           (re)send ack1
rcv pkt2, deliver, send ack2
rcv pkt3, deliver, send ack3
rcv pkt4, deliver, send ack4
rcv pkt5, deliver, send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
underline_base
23
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
Selective repeat
receiver individually acknowledges all correctlyreceived pkts
buffers pkts, as needed, for eventual in-order deliveryto upper layer
24
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
Selective repeat
receiver individually acknowledges all correctlyreceived pkts
buffers pkts, as needed, for eventual in-order deliveryto upper layer
sender only resends pkts for which ACK notreceived
sender timer for each unACKed pkt
25
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
Selective repeat
receiver individually acknowledges all correctlyreceived pkts
buffers pkts, as needed, for eventual in-order deliveryto upper layer
sender only resends pkts for which ACK notreceived
sender timer for each unACKed pkt
sender window
N consecutive seq #s
limits seq #s of sent, unACKed pkts
26
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Selective repeat: sender window
sr_seqnum
underline_base
27
(modified by Cheung for EE586; based on K&R original)
data from above:
if next available seq # in window, send pkt
timeout(n):
resend pkt n, restart timer
ACK(n) in [sendbase,sendbase+N]:
mark pkt n as received
if n smallest unACKed pkt, advance window base to next unACKed seq #
sender
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Selective repeat: receiver window
sr_seqnum
underline_base
28
(modified by Cheung for EE586; based on K&R original)
pkt n in [rcvbase, rcvbase+N-1]
send ACK(n)
out-of-order: buffer
in-order: deliver (also deliver buffered, in-order pkts), advance window tonext not-yet-received pkt
pkt n in [rcvbase-N,rcvbase-1]
send ACK(n)
Ignore otherwise
receiver
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
Selective repeat in action
send  pkt0
send  pkt1
send  pkt2
send  pkt3
(wait)
sender
receiver
receive pkt0, send ack0
receive pkt1, send ack1
 
receive pkt3, buffer,
           send ack3
X
loss
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
29
(modified by Cheung for EE586; based on K&R original)
rcv ack0, send pkt4
rcv ack1, send pkt5
1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
record ack3 arrived
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
Selective repeat in action
send  pkt0
send  pkt1
send  pkt2
send  pkt3
(wait)
sender
receiver
receive pkt0, send ack0
receive pkt1, send ack1
 
receive pkt3, buffer,
           send ack3
rcv ack0, send pkt4
rcv ack1, send pkt5
alarm_clock_ringing
pkt 2 timeout
send  pkt2
X
loss
receive pkt4, buffer,
           send ack4
receive pkt5, buffer,
           send ack5
rcv pkt2; deliver pkt2,
pkt3, pkt4, pkt5; send ack2
record ack3 arrived
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
record ack4 arrived
record ack4 arrived
30
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Selective repeat:dilemma
example:
seq #s: 0, 1, 2, 3
window size=3
receiver window
(after receipt)
sender window
(after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet
with seq number 0
1 2 0 1 2
pkt3
(a) no problem
underline_base
31
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Selective repeat:dilemma
example:
seq #s: 0, 1, 2, 3
window size=3
receiver window
(after receipt)
sender window
(after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
timeout
retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
X
X
will accept packet
with seq number 0
(b) oops!
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet
with seq number 0
1 2 0 1 2
pkt3
(a) no problem
underline_base
32
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Selective repeat:dilemma
example:
seq #s: 0, 1, 2, 3
window size=3
receiver window
(after receipt)
sender window
(after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
timeout
retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
X
X
will accept packet
with seq number 0
(b) oops!
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet
with seq number 0
1 2 0 1 2
pkt3
(a) no problem
curtain
curtain
receiver cant see sender side.
receiver behavior identical in both cases!
somethings (very) wrong!
underline_base
receiver sees nodifference in twoscenarios!
How to resolve it?
33
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Selective repeat:dilemma
example:
seq #s: 0, 1, 2, 3
window size=3
receiver window
(after receipt)
sender window
(after receipt)
0 1 2 3 4 5 0
0 1 2 3 4 5 0
0 1 2 3 4 5 0
pkt0
pkt1
pkt2
0 1 2 3 4 5 0
pkt0
timeout
retransmit pkt0
0 1 2 3 4 5 0
0 1 2 3 4 5 0
0 1 2 3 4 5 0
X
X
X
will not accept packet
with seq number 0
(b) No pproblem
0 1 2 3 4 5 0
0 1 2 3 4 5 0
0 1 2 3 4 5 0
pkt0
pkt1
pkt2
0 1 2 3 4 5 0
pkt4
0 1 2 3 4 5 0
0 1 2 3 4 5 0
0 1 2 3 4 5 0
X
1 2 0 1 0
pkt3
(a) no problem
curtain
curtain
underline_base
receiver sees nodifference in twoscenarios!
How to resolve it?
A: seq # range needs tobe at least twice asbig as the andwindow size to avoidproblem in (b)?
34
(modified by Cheung for EE586; based on K&R original)
X