42
Networks and Operating Systems Chapter 6: Reliable data transfer Donald Kossmann & Torsten Höfler Frühjahrssemester 2013 © Systems Group | Department of Computer Science | ETH Zürich 1 ©DINFK, ETH Zürich.

Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

Embed Size (px)

Citation preview

Page 1: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

Networks and Operating Systems Chapter 6: Reliable data transfer

Donald Kossmann & Torsten Höfler Frühjahrssemester 2013

© Systems Group | Department of Computer Science | ETH Zürich

1 ©DINFK, ETH Zürich.

Page 2: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

2

Reliable data transfer

• Important in applications, transport, link layers • On the top 10 list of important networking topics... • Characteristics of unreliable channel will determine complexity of reliable

data transfer protocol (rdt)

Page 3: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

3

Reliable data transfer 101

send side

receive side

rdt_send(): called from above, (by application). Passed data to deliver to receiver upper layer

udt_send(): called by rdt, to transfer packet over

unreliable channel to receiver

rdt_rcv(): called when packet arrives on rcv-side of channel

deliver_data(): called by rdt to deliver data to upper

Page 4: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

©DINFK, ETH Zürich. 4

State Machines and reliable channels

Page 5: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

5

Reliable data transfer We will • 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, receiver

state 1

state 2

event causing state transition actions taken on state transition

state: when in this “state” next state uniquely

determined by next event

event actions

Page 6: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

6

rdt 1.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

Page 7: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

©DINFK, ETH Zürich. 7

Dealing with corrupted messages

Page 8: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

8

rdt 2.0: channel with bit errors

• There is no packet loss • Underlying channel may flip bits in packet

– example: UDP checksum to detect bit errors • Question: How do we recover from errors?

– acknowledgements (ACKs): receiver explicitly tells sender that packet received OK

– negative acknowledgements (NAKs): receiver explicitly tells sender that packet had errors

– sender retransmits packet on receipt of NAK

Page 9: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

9

rdt 2.0: FSM specification

sender FSM receiver FSM

Page 10: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

10

rdt 2.0 in action (no errors)

sender FSM receiver FSM

Page 11: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

11

rdt 2.0 in action (error scenario)

sender FSM receiver FSM

Page 12: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

©DINFK, ETH Zürich. 12

Dealing with errors in ACKs

Page 13: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

13

rdt 2.0 has a fatal flaw!

• What happens if ACK/NAK is corrupted? – sender doesn’t know what

happened at receiver! – can’t just retransmit: possible

duplicate

• What to do? – sender ACKs/NAKs receiver’s

ACK/NAK? What if sender ACK/NAK is lost?

– retransmit, but this might cause retransmission of correctly received packet!

Handling duplicates • sender adds sequence number to

each packet • sender retransmits current packet if

ACK/NAK garbled • receiver discards (doesn’t deliver up)

duplicate packet

Sender sends one packet, then waits for receiver response

stop and wait

Page 14: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

14

rdt 2.1: handles garbled ACK/NAKs (sender side)

Page 15: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

15

rdt 2.1: handles garbled ACK/NAKs (sender side)

Receiver has safely received

“0”.

Page 16: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

16

rdt 2.1: handles garbled ACK/NAKs (receiver side)

Page 17: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

17

rdt 2.1: handles garbled ACK/NAKs (receiver side) I have received

“0”, but sender might not know it. I am prepared

to receive “0” again

Page 18: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

18

rdt 2.1: Discussion Sender • sequence number added to packet • two sequence numbers (0,1) are

sufficient. • must check if received ACK/NAK

corrupted • twice as many states because state

must “remember” whether “current” packet has sequence number 0 or 1.

Receiver • must check if received packet is

duplicate – state indicates whether 0 or 1 is

expected packet sequence number

• note: receiver cannot know if its last ACK/NAK was received OK by sender

Assumptions • no message lost • tries to optimize for no seq number in ACK/NAK rdt 2.1 is only a thought experiment • detecting error in ACK/NAK as expensive as correcting error • need seq. numbers in ACK/NAK for other reasons

Page 19: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

19

rdt 2.2: a NAK-free protocol • same functionality as

rdt 2.1, using ACKs only • instead of NAK, receiver

sends ACK for last packet received OK – receiver must

explicitly include sequence number of packet being ACKed

• duplicate ACK at sender results in same action as NAK: retransmit current packet

sender FSM

NAK ~ corrupt ACK or wrong ACK

Page 20: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

©DINFK, ETH Zürich. 20

Dealing with message loss

Page 21: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

21

rdt 3.0: channels with errors and loss

• New assumption: underlying

channel can also lose packets (data or ACKs) in addition to corrupt messages – checksum, seq. #, ACKs,

retransmissions will be of help, but not enough

• Timeout Approach: sender waits

“reasonable” amount of time for ACK • Sender retransmits if no ACK received

in this time • If packet (or ACK) just delayed (but

not lost): – retransmission will be duplicate,

but use of sequence numbers already handles this

– receiver must specify sequence number of packet being ACKed

• Requires countdown timer

Page 22: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

22

rdt 3.0 (sender side)

Corrupt ACKs are simply ignored. No need for NAKs (can wait for timeout at sender), but NAK may be an optimizaton. Receiver: Same as in rdt 2.2.

Page 23: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

23

rdt 3.0 in action

Page 24: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

24

rdt 3.0 in action

Page 25: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

25

rdt 3.0 in action (problems?) send pkt0

timeout re-send pkt0

rcv ACK0

send pkt1

rcv ACK1 send new pkt0

rcv ACK0

send new pkt1

rcv pkt0; send ACK0 (slow) rcv pkt0; send ACK0 (again?) rcv pkt1; send ACK1

now everything seems to be OK… Problem: no FIFO channel

x

Page 26: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

26

Performance of rdt 3.0

• Back of envelope calculation of performance of rdt 3.0 • example: 1 Gbps link, 15 ms propagation delay, 1kB packet (8kb)

[b=bit, B=Byte, Gbps = Gb/s]

• With the propagation delay, the acknowledgement arrives 30.008ms later (assuming that nodal and queuing delays are 0)

• That is, we only transmit 1kB/30.008ms instead of 1Gb/s

• network protocol limits use of physical resources!

Page 27: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

27

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

L: Length of message; R: Bandwidth; L/R: time to feed message into network

Page 28: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

Summary

• rdt 3.0 is great to minimize #messages – can only improve if you batch several application messages

into a bigger super-messages – unfortunately, not possible in the Internet

(on the contratrary, need to split into smaller packets) • rdt 3.0 does not exploit bandwidth of channel

– maybe fine on Internet where 1000s of others will do – not fine in local network where you are only user – results in high response times for whole workload

• Idea: send several messages before ACK – generalize Alternating Bit to “window”

©DINFK, ETH Zürich. 28

Page 29: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

©DINFK, ETH Zürich. 29

From theory to practice: Go-Back-N

Page 30: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

30

Pipelined protocols

• Pipelining: sender allows multiple, “in-flight”, yet-to-be-acknowledged packets – range of sequence numbers must be increased – buffering at sender and/or receiver

• There are two generic forms of pipelined protocols

– go-Back-N and selective repeat

Page 31: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

31

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

Increase utilization by a factor of 3!

Page 32: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

32

Go-Back-N Sender • Multiple-bit sequence numbers in packet header • “Window” of up to N consecutive unack’ed packets allowed

ACK(n): ACKs all packets up to and including sequence number n a.k.a. cumulative ACK sender may get duplicate ACKs

timer for each in-flight packet

timeout(n): retransmit packet n and all higher seq# packets in window

Again, assumes FIFO channel!

Page 33: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

33

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)

Λ

GBN: sender extended FSM

Timer restarted at every receipt! (NB.Not a timer per message.)

Page 34: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

34

GBN: receiver extended FSM Receiver (simple version) • ACK-only: always send ACK for correctly-received pkt with highest in-order

sequence number – may generate duplicate ACKs – need only to remember the expected sequence number

• out-of-order packet: – discard (don’t buffer) ! no receiver buffering! – re-ACK packet with highest in-order sequence number

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)

Λ

If (out of order or corrupt) just ACK the last good package

Page 35: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

35

GBN in action

Page 36: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

©DINFK, ETH Zürich. 36

From theory to practice: Selective Repeat

Page 37: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

37

Selective Repeat

• receiver individually acknowledges all correctly received packets – buffers packets, as needed, for eventual in-order

delivery to upper layer • sender only resends packets for which ACK not received

– sender timer for each unACKed packet • sender window

– N consecutive sequence numbers – again limits sequence numbers of sent, unACKed pkts

Page 38: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

38

Selective repeat: sender, receiver windows

Page 39: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

39

Get data from layer above • if next available sequence number

in window, send packet timeout(n) • resend packet n, restart timer

ACK(n) in [sendbase,sendbase+N-1] • mark packet n as received • if n smallest unACKed pkt, advance

window base to next unACKed sequence number

sender pkt n in [rcvbase, rcvbase+N-1]

send ACK(n)

out-of-order: buffer

in-order: deliver (also deliver buffered in-order packets), advance window to next not-yet-received packet

pkt n in [rcvbase-N,rcvbase-1]

ACK(n)

otherwise

ignore

receiver

Selective repeat

Page 40: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

40

Selective repeat in action

Can somebody find the error in this example?

Page 41: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

41

Selective repeat: dilemma

Example • sequence numbers: 0…3 • window size = 3 • Receiver cannot tell

whether it receives first or second Message 0!!!

Q: What is the relationship between sequence number size and window size?

(Exercise Groups )

Page 42: Networks and Operating Systems Chapter 6: Reliable … and Operating Systems Chapter 6: Reliable data transfer ... Pipelining: increased utilization . first packet bit transmitted,

Additional reading

• Sliding window animation: – http://www3.rad.com/networks/2004/sliding_window/

• Sliding window protocols – http://en.wikipedia.org/wiki/Sliding_window

©IKS, ETH Zürich. 42