Review of Previous Lecture
description
Transcript of Review of Previous Lecture
![Page 1: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/1.jpg)
Some slides are in courtesy of J. Kurose and K. Ross
Review of Previous LectureTransport-layer servicesMultiplexing and demultiplexingConnectionless transport: UDPPrinciples of reliable data transfer
Rdt 1.0: FEM ModelRdt 2.0: ACK/NAK -> data corruptionRdt2.1: Seq # -> ACK/NAK corruption
![Page 2: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/2.jpg)
2
Outline Reliable transfer protocols
rdt2.1: sender, handles garbled ACK/NAKs rdt2.2: a NAK-free protocol rdt3.0: channels with errors and loss Pipelined protocols
• Go-back-N• Selective repeat
Connection-oriented transport: TCP Overview and segment structure
![Page 3: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/3.jpg)
3
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 read data from underlying channel
Wait for call from above packet = make_pkt(data)
udt_send(packet)
rdt_send(data)extract (packet,data)deliver_data(data)
Wait for call from
below
rdt_rcv(packet)
sender receiver
![Page 4: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/4.jpg)
4
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 receiver feedback: control msgs (ACK,NAK) rcvr-
>sender
![Page 5: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/5.jpg)
5
rdt2.0: FSM specification
Wait for call from above
snkpkt = make_pkt(data, checksum)udt_send(sndpkt)
extract(rcvpkt,data)deliver_data(data)udt_send(ACK)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) && corrupt(rcvpkt)
Wait for ACK or
NAK
Wait for call from
belowsender
receiverrdt_send(data)
![Page 6: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/6.jpg)
6
rdt2.0 has a fatal flaw!What happens if
ACK/NAK corrupted? sender doesn’t know
what happened at receiver!
can’t just retransmit: possible duplicate
Handling duplicates: sender adds sequence
number to each pkt sender retransmits current
pkt if ACK/NAK garbled receiver discards (doesn’t
deliver up) duplicate pkt
Sender sends one packet, then waits for receiver response
stop and wait
![Page 7: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/7.jpg)
7
rdt2.1: sender, handles garbled ACK/NAKs
Wait for call 0 from
above
sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)
rdt_send(data)
Wait for ACK or NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isNAK(rcvpkt) )
sndpkt = make_pkt(1, data, checksum)udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isNAK(rcvpkt) )
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt)
Wait for call 1 from
above
Wait for ACK or NAK 1
![Page 8: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/8.jpg)
8
rdt2.1: receiver, handles duplicate packets
Wait for 0 from below
sndpkt = make_pkt(NAK, chksum)udt_send(sndpkt)
rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq0(rcvpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt)
extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)
Wait for 1 from below
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)
sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)
rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq1(rcvpkt)
rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)
sndpkt = make_pkt(NAK, chksum)udt_send(sndpkt)
![Page 9: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/9.jpg)
9
Outline Reliable transfer protocols
rdt2.1: sender, handles garbled ACK/NAKs rdt2.2: a NAK-free protocol rdt3.0: channels with errors and loss Pipelined protocols
• Go-back-N• Selective repeat
Connection-oriented transport: TCP Overview and segment structure
![Page 10: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/10.jpg)
10
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
![Page 11: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/11.jpg)
11
rdt2.2: sender, receiver fragments
Wait for call 0 from
above
sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,1) )
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0)
Wait for ACK
0
sender FSMfragment
Wait for 0 from below
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK1, chksum)udt_send(sndpkt)
rdt_rcv(rcvpkt) && (corrupt(rcvpkt) || has_seq1(rcvpkt))
sndpkt = make_pkt(ACK0, cksm)udt_send(sndpkt)
receiver FSMfragment
![Page 12: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/12.jpg)
12
Outline Reliable transfer protocols
rdt2.1: sender, handles garbled ACK/NAKs rdt2.2: a NAK-free protocol rdt3.0: channels with errors and loss Pipelined protocols
• Go-back-N• Selective repeat
Connection-oriented transport: TCP Overview and segment structure
![Page 13: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/13.jpg)
13
rdt3.0: channels with errors and loss
New assumption: underlying channel can also lose packets (data or ACKs) checksum, seq. #,
ACKs, retransmissions will be of help, but not enough
Approach: sender waits “reasonable” amount of time for ACK
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
![Page 14: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/14.jpg)
14
rdt3.0 sendersndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)start_timer
rdt_send(data)
Wait for
ACK0
rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isACK(rcvpkt,1) )
Wait for call 1 from
above
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_timerstop_timer
udt_send(sndpkt)start_timer
timeout
udt_send(sndpkt)start_timer
timeout
rdt_rcv(rcvpkt)
Wait for call 0from
above
Wait for
ACK1
rdt_rcv(rcvpkt)
premature time out
![Page 15: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/15.jpg)
15
rdt3.0 in action
![Page 16: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/16.jpg)
16
rdt3.0 in action
![Page 17: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/17.jpg)
17
Performance of rdt3.0 rdt3.0 works, but performance stinks example: 1 Gbps link, 15 ms e-e prop. delay, 1KB packet:
Ttransmit
= 8kb/pkt10**9 b/sec= 8 microsec
U sender: utilization – fraction of time sender busy sending 1KB pkt every 30 msec -> 33kB/sec thruput over 1 Gbps link network protocol limits use of physical resources!
U sender = .008
30.008 = 0.00027
microseconds
L / R RTT + L / R
=
L (packet length in bits)R (transmission rate, bps) =
![Page 18: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/18.jpg)
18
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 arriveslast packet bit arrives, send ACK
ACK arrives, send next packet, t = RTT + L / R
U sender = .008
30.008 = 0.00027
microseconds
L / R RTT + L / R
=
![Page 19: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/19.jpg)
19
Outline Reliable transfer protocols
rdt2.1: sender, handles garbled ACK/NAKs rdt2.2: a NAK-free protocol rdt3.0: channels with errors and loss Pipelined protocols
• Go-back-N• Selective repeat
Connection-oriented transport: TCP Overview and segment structure
![Page 20: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/20.jpg)
20
Pipelined protocolsPipelining: 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
![Page 21: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/21.jpg)
21
Pipelining: increased utilizationfirst packet bit transmitted, t = 0
sender receiver
RTT
last bit transmitted, t = L / R
first packet bit arriveslast packet bit arrives, send ACK
ACK arrives, send next packet, t = RTT + L / R
last bit of 2nd packet arrives, send ACKlast bit of 3rd packet arrives, send ACK
U sender = .024
30.008 = 0.0008
microseconds
3 * L / R RTT + L / R
=
Increase utilizationby a factor of 3!
![Page 22: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/22.jpg)
22
Go-Back-NSender: k-bit seq # in pkt header (the range of [0 , 2^k - 1]) “window” of up to N, consecutive unack’ed pkts allowed
ACK(n): ACKs all pkts up to, including seq # n - “cumulative ACK” may deceive duplicate ACKs (see receiver)
One timer for all packets in-flight timeout: retransmit all packets in flight
![Page 23: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/23.jpg)
23
GBN: sender extended FSM
Wait start_timer/*Resend all previously send ack packets that have not been ACKed*/udt_send(sndpkt[base])udt_send(sndpkt[base+1])…udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum < base+N) { /*If we are allowed to send packets*/ sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum) udt_send(sndpkt[nextseqnum]) if (base == nextseqnum) /*If there are no packets in flight*/ start_timer nextseqnum++ /*Move to the next “smallest unused sequence #”*/ }else refuse_data(data)
base = getacknum(rcvpkt)+1 /*Increase the left size of the window*/If (base == nextseqnum) /*If there are no packets in flight*/ stop_timer else start_timer
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
base=1nextseqnum=1
rdt_rcv(rcvpkt) && corrupt(rcvpkt)
![Page 24: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/24.jpg)
24
GBN: receiver extended FSM
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 #
Wait
udt_send(sndpkt)default /*receive out-of-order packets*/
rdt_rcv(rcvpkt) /*receive in-order packets*/ && notcurrupt(rcvpkt) && hasseqnum(rcvpkt,expectedseqnum)
extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(expectedseqnum,ACK,chksum)udt_send(sndpkt)expectedseqnum++
expectedseqnum=1sndpkt = make_pkt(expectedseqnum,ACK,chksum)
![Page 25: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/25.jpg)
25
GBN inaction
![Page 26: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/26.jpg)
26
Go-Back-N Problem
If the “pipe” is too large, and the window size is too large, resending all packets after a timeout is inefficient
Solution Resend only some packets
Implication A separate timer needed for each packet in
flight
![Page 27: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/27.jpg)
27
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 again limits seq #s of sent, unACKed pkts
![Page 28: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/28.jpg)
28
Selective repeat: sender, receiver windows
![Page 29: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/29.jpg)
29
Selective repeat
data from above : if next available seq # in
window, send pkttimeout(n): resend pkt n, restart
timerACK(n) in
[sendbase,sendbase+N]: mark pkt n as received if n smallest unACKed
pkt, advance window base to next unACKed seq #
senderpkt n in [rcvbase, rcvbase+N-
1] 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
receiver
![Page 30: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/30.jpg)
30
Selective repeat in action
![Page 31: Review of Previous Lecture](https://reader036.fdocuments.us/reader036/viewer/2022062810/56815ac8550346895dc89871/html5/thumbnails/31.jpg)
31
Selective repeat: dilemmaExample: 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?