Скачать презентацию Chapter 3 Transport Layer Computer Networking A Top Скачать презентацию Chapter 3 Transport Layer Computer Networking A Top

50526f8f00014a69fb63e216687bd422.ppt

  • Количество слайдов: 55

Chapter 3 Transport Layer Computer Networking: A Top Down Approach 6 th edition Jim Chapter 3 Transport Layer Computer Networking: A Top Down Approach 6 th edition Jim Kurose, Keith Ross Addison-Wesley March 2012 All material copyright 1996 -2012 J. F Kurose and K. W. Ross, All Rights Reserved Transport Layer 3 -1

Chapter 3: Transport Layer our goals: v understand principles behind transport layer services: § Chapter 3: Transport Layer our goals: v understand principles behind transport layer services: § multiplexing, demultiplexing § reliable data transfer § flow control § congestion control v learn about Internet transport layer protocols: § UDP: connectionless transport § TCP: connection-oriented reliable transport § TCP congestion control Transport Layer 3 -2

Chapter 3 outline 3. 1 transport-layer services 3. 2 multiplexing and demultiplexing 3. 3 Chapter 3 outline 3. 1 transport-layer services 3. 2 multiplexing and demultiplexing 3. 3 connectionless transport: UDP 3. 4 principles of reliable data transfer 3. 5 connection-oriented transport: TCP § segment structure § reliable data transfer § flow control § connection management 3. 6 principles of congestion control 3. 7 TCP congestion control Transport Layer 3 -3

Transport services and protocols v le ca gi nd -e nd tra t or Transport services and protocols v le ca gi nd -e nd tra t or p ns v lo v provide logical communication between app processes running on different hosts transport protocols run in end systems § send side: breaks app messages into segments, passes to network layer § rcv side: reassembles segments into messages, passes to app layer more than one transport protocol available to apps § Internet: TCP and UDP application transport network data link physical Transport Layer 3 -4

Transport vs. network layer: logical communication between hosts v transport layer: logical communication between Transport vs. network layer: logical communication between hosts v transport layer: logical communication between processes v § relies on, enhances, network layer services household analogy: 12 kids in Ann’s house sending letters to 12 kids in Bill’s house: v hosts = houses v processes = kids v app messages = letters in envelopes v transport protocol = Ann and Bill who demux to inhouse siblings v network-layer protocol = postal service Transport Layer 3 -5

Internet transport-layer protocols v reliable, in-order delivery (TCP) network data link physical t network Internet transport-layer protocols v reliable, in-order delivery (TCP) network data link physical t network data link physical or p ns network data link physical tra network data link physical nd services not available: -e nd v network data link physical le § no-frills extension of “best-effort” IP network data link physical ca unreliable, unordered delivery: UDP gi v network data link physical lo § congestion control § flow control § connection setup application transport network data link physical § delay guarantees § bandwidth guarantees Transport Layer 3 -6

Chapter 3 outline 3. 1 transport-layer services 3. 2 multiplexing and demultiplexing 3. 3 Chapter 3 outline 3. 1 transport-layer services 3. 2 multiplexing and demultiplexing 3. 3 connectionless transport: UDP 3. 4 principles of reliable data transfer 3. 5 connection-oriented transport: TCP § segment structure § reliable data transfer § flow control § connection management 3. 6 principles of congestion control 3. 7 TCP congestion control Transport Layer 3 -7

Multiplexing/demultiplexing at sender: handle data from multiple sockets, add transport header (later used for Multiplexing/demultiplexing at sender: handle data from multiple sockets, add transport header (later used for demultiplexing) demultiplexing at receiver: use header info to deliver received segments to correct socket application P 1 P 2 application P 3 transport P 4 transport network link network physical socket link physical process physical Transport Layer 3 -8

How demultiplexing works v host receives IP datagrams § each datagram has source IP How demultiplexing works v host receives IP datagrams § each datagram has source IP address, destination IP address § each datagram carries one transport-layer segment § each segment has source, destination port number v host uses IP addresses & port numbers to direct segment to appropriate socket 32 bits source port # dest port # other header fields application data (payload) TCP/UDP segment format Transport Layer 3 -9

Connectionless demultiplexing v recall: created socket has host- recall: when creating v local port Connectionless demultiplexing v recall: created socket has host- recall: when creating v local port #: datagram to send into Datagram. Socket my. Socket 1 UDP socket, must specify = new Datagram. Socket(12534); v when host receives UDP segment: § checks destination port # in segment § directs UDP segment to socket with that port # § destination IP address § destination port # IP datagrams with same dest. port #, but different source IP addresses and/or source port numbers will be directed to same socket at dest Transport Layer 3 -10

Connectionless demux: example Datagram. Socket my. Socket 2 = new Datagram. Socket (9157); Datagram. Connectionless demux: example Datagram. Socket my. Socket 2 = new Datagram. Socket (9157); Datagram. Socket server. Socket = new Datagram. Socket (6428); application Datagram. Socket my. Socket 1 = new Datagram. Socket (5775); P 1 application P 3 P 4 transport network link physical source port: 6428 dest port: 9157 source port: 9157 dest port: 6428 source port: ? dest port: ? Transport Layer 3 -11

Connection-oriented demux v TCP socket identified by 4 -tuple: § source IP address § Connection-oriented demux v TCP socket identified by 4 -tuple: § source IP address § source port number § dest IP address § dest port number v demux: receiver uses all four values to direct segment to appropriate socket v server host may support many simultaneous TCP sockets: § each socket identified by its own 4 -tuple v web servers have different sockets for each connecting client § non-persistent HTTP will have different socket for each request Transport Layer 3 -12

Connection-oriented demux: example application P 4 P 3 P 5 application P 6 P Connection-oriented demux: example application P 4 P 3 P 5 application P 6 P 3 P 2 transport network link physical host: IP address A server: IP address B source IP, port: B, 80 dest IP, port: A, 9157 source IP, port: A, 9157 dest IP, port: B, 80 three segments, all destined to IP address: B, dest port: 80 are demultiplexed to different sockets physical source IP, port: C, 5775 dest IP, port: B, 80 host: IP address C source IP, port: C, 9157 dest IP, port: B, 80 Transport Layer 3 -13

Connection-oriented demux: example threaded server application P 3 application P 4 P 3 P Connection-oriented demux: example threaded server application P 3 application P 4 P 3 P 2 transport network link physical host: IP address A server: IP address B source IP, port: B, 80 dest IP, port: A, 9157 source IP, port: A, 9157 dest IP, port: B, 80 physical source IP, port: C, 5775 dest IP, port: B, 80 host: IP address C source IP, port: C, 9157 dest IP, port: B, 80 Transport Layer 3 -14

Chapter 3 outline 3. 1 transport-layer services 3. 2 multiplexing and demultiplexing 3. 3 Chapter 3 outline 3. 1 transport-layer services 3. 2 multiplexing and demultiplexing 3. 3 connectionless transport: UDP 3. 4 principles of reliable data transfer 3. 5 connection-oriented transport: TCP § segment structure § reliable data transfer § flow control § connection management 3. 6 principles of congestion control 3. 7 TCP congestion control Transport Layer 3 -15

UDP: User Datagram Protocol [RFC 768] v v v “no frills, ” “bare bones” UDP: User Datagram Protocol [RFC 768] v v v “no frills, ” “bare bones” Internet transport protocol “best effort” service, UDP segments may be: § lost § delivered out-of-order to app connectionless: § no handshaking between UDP sender, receiver § each UDP segment handled independently of others v UDP use: § streaming multimedia apps (loss tolerant, rate sensitive) § DNS § SNMP v reliable transfer over UDP: § add reliability at application layer § application-specific error recovery! Transport Layer 3 -16

UDP: segment header 32 bits source port # dest port # length checksum application UDP: segment header 32 bits source port # dest port # length checksum application data (payload) length, in bytes of UDP segment, including header why is there a UDP? v v v UDP segment format v no connection establishment (which can add delay) simple: no connection state at sender, receiver small header size no congestion control: UDP can blast away as fast as desired Transport Layer 3 -17

UDP checksum Goal: detect “errors” (e. g. , flipped bits) in transmitted segment sender: UDP checksum Goal: detect “errors” (e. g. , flipped bits) in transmitted segment sender: receiver: v v treat segment contents, including header fields, as sequence of 16 -bit integers checksum: addition (one’s complement sum) of segment contents sender puts checksum value into UDP checksum field v compute checksum of received segment check if computed checksum equals checksum field value: § NO - error detected § YES - no error detected. But maybe errors nonetheless? More later …. Transport Layer 3 -18

Internet checksum: example: add two 16 -bit integers 1 1 0 0 1 1 Internet checksum: example: add two 16 -bit integers 1 1 0 0 1 1 1 0 1 0 1 wraparound 1 1 0 1 1 sum 1 1 0 1 1 0 0 checksum 1 0 0 0 0 1 1 Note: when adding numbers, a carryout from the most significant bit needs to be added to the result Transport Layer 3 -19

Chapter 3 outline 3. 1 transport-layer services 3. 2 multiplexing and demultiplexing 3. 3 Chapter 3 outline 3. 1 transport-layer services 3. 2 multiplexing and demultiplexing 3. 3 connectionless transport: UDP 3. 4 principles of reliable data transfer 3. 5 connection-oriented transport: TCP § segment structure § reliable data transfer § flow control § connection management 3. 6 principles of congestion control 3. 7 TCP congestion control Transport Layer 3 -20

Principles of reliable data transfer v important in application, transport, link layers § top-10 Principles of reliable data transfer v important in application, transport, link layers § top-10 list of important networking topics! v characteristics of unreliable channel will determine complexity of reliable data transfer protocol (rdt) Transport Layer 3 -21

Principles of reliable data transfer v important in application, transport, link layers § top-10 Principles of reliable data transfer v important in application, transport, link layers § top-10 list of important networking topics! v characteristics of unreliable channel will determine complexity of reliable data transfer protocol (rdt) Transport Layer 3 -22

Principles of reliable data transfer v important in application, transport, link layers § top-10 Principles of reliable data transfer v important in application, transport, link layers § top-10 list of important networking topics! v characteristics of unreliable channel will determine complexity of reliable data transfer protocol (rdt) Transport Layer 3 -23

Reliable data transfer: getting started rdt_send(): called from above, (e. g. , by app. Reliable data transfer: getting started rdt_send(): called from above, (e. g. , by app. ). Passed data to deliver to receiver upper layer send side udt_send(): called by rdt, to transfer packet over unreliable channel to receiver deliver_data(): called by rdt to deliver data to upper receive side rdt_rcv(): called when packet arrives on rcv-side of channel Transport Layer 3 -24

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

rdt 1. 0: reliable transfer over a reliable channel v underlying channel perfectly reliable rdt 1. 0: reliable transfer over a reliable channel v underlying channel perfectly reliable § no bit errors § no loss of packets v separate FSMs for sender, receiver: § sender sends data into underlying channel § receiver reads data from underlying channel Wait for call from above rdt_send(data) packet = make_pkt(data) udt_send(packet) sender Wait for call from below rdt_rcv(packet) extract (packet, data) deliver_data(data) receiver Transport Layer 3 -26

rdt 2. 0: channel with bit errors v underlying channel may flip bits in rdt 2. 0: channel with bit errors v underlying channel may flip bits in packet § checksum to detect bit errors v v 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 How do humans recover from “errors” new mechanisms in rdt 2. 0 (beyond rdt 1. 0): during conversation? § error detection § receiver feedback: control msgs (ACK, NAK) rcvr>sender Transport Layer 3 -27

rdt 2. 0: channel with bit errors v underlying channel may flip bits in rdt 2. 0: channel with bit errors v underlying channel may flip bits in packet § checksum to detect bit errors v v 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 rdt 2. 0 (beyond rdt 1. 0): § error detection § feedback: control msgs (ACK, NAK) from receiver to sender Transport Layer 3 -28

rdt 2. 0: FSM specification rdt_send(data) sndpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && is. rdt 2. 0: FSM specification rdt_send(data) sndpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && is. NAK(rcvpkt) Wait for call from ACK or udt_send(sndpkt) above NAK rdt_rcv(rcvpkt) && is. ACK(rcvpkt) L sender receiver rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(NAK) Wait for call from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt, data) deliver_data(data) udt_send(ACK) Transport Layer 3 -29

rdt 2. 0: operation with no errors rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) rdt 2. 0: operation with no errors rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && is. NAK(rcvpkt) Wait for call from ACK or udt_send(sndpkt) above NAK rdt_rcv(rcvpkt) && is. ACK(rcvpkt) L rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(NAK) Wait for call from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt, data) deliver_data(data) udt_send(ACK) Transport Layer 3 -30

rdt 2. 0: error scenario rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && is. rdt 2. 0: error scenario rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && is. NAK(rcvpkt) Wait for call from ACK or udt_send(sndpkt) above NAK rdt_rcv(rcvpkt) && is. ACK(rcvpkt) L rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(NAK) Wait for call from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt, data) deliver_data(data) udt_send(ACK) Transport Layer 3 -31

rdt 2. 0 has a fatal flaw! what happens if ACK/NAK corrupted? v v rdt 2. 0 has a fatal flaw! what happens if ACK/NAK corrupted? v v sender doesn’t know what happened at receiver! can’t just retransmit: possible duplicate handling duplicates: v v v sender retransmits current pkt if ACK/NAK corrupted sender adds sequence number to each pkt receiver discards (doesn’t deliver up) duplicate pkt stop and wait sender sends one packet, then waits for receiver response Transport Layer 3 -32

rdt 2. 1: sender, handles garbled ACK/NAKs rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt 2. 1: sender, handles garbled ACK/NAKs rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && is. ACK(rcvpkt) Wait for call 0 from above rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && is. ACK(rcvpkt) L rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || is. NAK(rcvpkt) ) udt_send(sndpkt) Wait for ACK or NAK 0 L Wait for ACK or NAK 1 Wait for call 1 from above rdt_send(data) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) Transport Layer 3 -33

rdt 2. 1: receiver, handles garbled ACK/NAKs rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq 0(rcvpkt) rdt_rcv(rcvpkt) rdt 2. 1: receiver, handles garbled ACK/NAKs rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq 0(rcvpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) extract(rcvpkt, data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq 1(rcvpkt) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) Wait for 0 from below Wait for 1 from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq 1(rcvpkt) rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq 0(rcvpkt) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) extract(rcvpkt, data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) Transport Layer 3 -34

rdt 2. 1: discussion sender: v seq # added to pkt v two seq. rdt 2. 1: discussion sender: v seq # added to pkt v two seq. #’s (0, 1) will suffice. Why? v must check if received ACK/NAK corrupted v twice as many states § state must “remember” whether “expected” pkt should have seq # of 0 or 1 receiver: v must check if received packet is duplicate § state indicates whether 0 or 1 is expected pkt seq # v note: receiver can not know if its last ACK/NAK received OK at sender Transport Layer 3 -35

rdt 2. 2: a NAK-free protocol v v same functionality as rdt 2. 1, rdt 2. 2: a NAK-free protocol v v same functionality as rdt 2. 1, using ACKs only instead of NAK, receiver sends ACK for last pkt received OK § receiver must explicitly include seq # of pkt being ACKed v duplicate ACK at sender results in same action as NAK: retransmit current pkt Transport Layer 3 -36

rdt 2. 2: sender, receiver fragments rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) rdt 2. 2: sender, receiver fragments rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && Wait for call 0 from above rdt_rcv(rcvpkt) && (corrupt(rcvpkt) || has_seq 1(rcvpkt)) udt_send(sndpkt) Wait for 0 from below sender FSM fragment ( corrupt(rcvpkt) || is. ACK(rcvpkt, 1) ) udt_send(sndpkt) Wait for ACK 0 rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && is. ACK(rcvpkt, 0) receiver FSM fragment L rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq 1(rcvpkt) extract(rcvpkt, data) deliver_data(data) sndpkt = make_pkt(ACK 1, chksum) udt_send(sndpkt) Transport Layer 3 -37

rdt 3. 0: channels with errors and loss new assumption: underlying channel can also rdt 3. 0: channels with errors and loss new assumption: underlying channel can also lose packets (data, ACKs) § checksum, seq. #, ACKs, retransmissions will be of help … but not enough approach: sender waits “reasonable” amount of time for ACK v v v retransmits if no ACK received in this time if pkt (or ACK) just delayed (not lost): § retransmission will be duplicate, but seq. #’s already handles this § receiver must specify seq # of pkt being ACKed requires countdown timer Transport Layer 3 -38

rdt 3. 0 sender rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) L rdt 3. 0 sender rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) L rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && is. ACK(rcvpkt, 1) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || is. ACK(rcvpkt, 0) ) timeout udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && is. ACK(rcvpkt, 0) stop_timer timeout udt_send(sndpkt) start_timer L Wait for ACK 0 Wait for call 0 from above L rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || is. ACK(rcvpkt, 1) ) Wait for ACK 1 Wait for call 1 from above rdt_send(data) rdt_rcv(rcvpkt) L sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) start_timer Transport Layer 3 -39

rdt 3. 0 in action receiver send pkt 0 rcv ack 0 send pkt rdt 3. 0 in action receiver send pkt 0 rcv ack 0 send pkt 1 rcv ack 1 send pkt 0 ack 0 pkt 1 ack 1 pkt 0 ack 0 (a) no loss send pkt 0 rcv pkt 0 send ack 0 rcv pkt 1 send ack 1 rcv pkt 0 send ack 0 receiver sender rcv ack 0 send pkt 1 pkt 0 ack 0 rcv pkt 0 send ack 0 pkt 1 X loss timeout resend pkt 1 rcv ack 1 send pkt 0 pkt 1 ack 1 pkt 0 ack 0 rcv pkt 1 send ack 1 rcv pkt 0 send ack 0 (b) packet loss Transport Layer 3 -40

rdt 3. 0 in action receiver send pkt 0 rcv ack 0 send pkt rdt 3. 0 in action receiver send pkt 0 rcv ack 0 send pkt 1 ack 0 pkt 1 ack 1 X rcv pkt 0 send ack 0 timeout resend pkt 1 rcv ack 1 send pkt 0 pkt 1 ack 1 pkt 0 ack 0 (c) ACK loss send pkt 0 rcv ack 0 send pkt 1 rcv pkt 1 send ack 1 rcv pkt 1 (detect duplicate) send ack 1 rcv pkt 0 send ack 0 pkt 0 ack 0 pkt 1 ack 1 timeout loss receiver sender resend pkt 1 rcv ack 1 send pkt 0 pkt 1 rcv pkt 0 send ack 0 rcv pkt 1 send ack 1 rcv pkt 1 pkt 0 ack 1 ack 0 pkt 0 (detect duplicate) ack 0 (detect duplicate) send ack 1 rcv pkt 0 send ack 0 (d) premature timeout/ delayed ACK Transport Layer 3 -41

Performance of rdt 3. 0 v v rdt 3. 0 is correct, but performance Performance of rdt 3. 0 v v rdt 3. 0 is correct, but performance stinks e. g. : 1 Gbps link, 15 ms prop. delay, 8000 bit packet: L 8000 bits Dtrans = R = 109 bits/sec = 8 microsecs § U sender: utilization – fraction of time sender busy sending § if RTT=30 msec, 1 KB pkt every 30 msec: 33 k. B/sec thruput over 1 Gbps link v network protocol limits use of physical resources! Transport Layer 3 -42

rdt 3. 0: stop-and-wait operation sender receiver first packet bit transmitted, t = 0 rdt 3. 0: stop-and-wait operation sender receiver first packet bit transmitted, t = 0 last packet bit transmitted, t = L / R RTT first packet bit arrives last packet bit arrives, send ACK arrives, send next packet, t = RTT + L / R Transport Layer 3 -43

Pipelined protocols pipelining: sender allows multiple, “in-flight”, yet-to -be-acknowledged pkts § range of sequence 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 v two generic forms of pipelined protocols: go-Back-N, selective repeat Transport Layer 3 -44

Pipelining: increased utilization sender receiver first packet bit transmitted, t = 0 last bit Pipelining: increased utilization sender receiver first packet bit transmitted, t = 0 last bit transmitted, t = L / R RTT first packet bit arrives last packet bit arrives, send ACK last bit of 2 nd packet arrives, send ACK last bit of 3 rd packet arrives, send ACK arrives, send next packet, t = RTT + L / R 3 -packet pipelining increases utilization by a factor of 3! Transport Layer 3 -45

Pipelined protocols: overview Go-back-N: v sender can have up to N unacked packets in Pipelined protocols: overview Go-back-N: v sender can have up to N unacked packets in pipeline v receiver only sends cumulative ack Selective Repeat: v sender can have up to N unack’ed packets in pipeline v rcvr sends individual ack for each packet § doesn’t ack packet if there’s a gap v sender has timer for oldest unacked packet § when timer expires, retransmit all unacked packets v sender maintains timer for each unacked packet § when timer expires, retransmit only that unacked packet Transport Layer 3 -46

Go-Back-N: sender v v v k-bit seq # in pkt header “window” of up Go-Back-N: sender v v v 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 -47

GBN: sender extended FSM rdt_send(data) L base=1 nextseqnum=1 if (nextseqnum < base+N) { sndpkt[nextseqnum] GBN: sender extended FSM rdt_send(data) L base=1 nextseqnum=1 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) Wait rdt_rcv(rcvpkt) && corrupt(rcvpkt) timeout start_timer udt_send(sndpkt[base]) udt_send(sndpkt[base+1]) … udt_send(sndpkt[nextseqnum-1]) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) base = getacknum(rcvpkt)+1 If (base == nextseqnum) stop_timer else start_timer Transport Layer 3 -48

GBN: receiver extended FSM default udt_send(sndpkt) L Wait expectedseqnum=1 sndpkt = make_pkt(expectedseqnum, ACK, chksum) GBN: receiver extended FSM default udt_send(sndpkt) L Wait expectedseqnum=1 sndpkt = make_pkt(expectedseqnum, ACK, chksum) rdt_rcv(rcvpkt) && notcurrupt(rcvpkt) && hasseqnum(rcvpkt, expectedseqnum) extract(rcvpkt, data) deliver_data(data) 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 v out-of-order pkt: § discard (don’t buffer): no receiver buffering! § re-ACK pkt with highest in-order seq # Transport Layer 3 -49

GBN in action sender window (N=4) 012345678 012345678 sender send pkt 0 send pkt GBN in action sender window (N=4) 012345678 012345678 sender send pkt 0 send pkt 1 send pkt 2 send pkt 3 (wait) rcv ack 0, send pkt 4 rcv ack 1, send pkt 5 ignore duplicate ACK pkt 2 timeout 012345678 send pkt 2 pkt 3 pkt 4 pkt 5 receiver Xloss receive pkt 0, send ack 0 receive pkt 1, send ack 1 receive pkt 3, discard, (re)send ack 1 receive pkt 4, discard, (re)send ack 1 receive pkt 5, discard, (re)send ack 1 rcv rcv pkt 2, pkt 3, pkt 4, pkt 5, deliver, send ack 2 ack 3 ack 4 ack 5 Transport Layer 3 -50

Selective repeat v receiver individually acknowledges all correctly received pkts § buffers pkts, as Selective repeat v receiver individually acknowledges all correctly received pkts § buffers pkts, as needed, for eventual in-order delivery to upper layer v sender only resends pkts for which ACK not received § sender timer for each un. ACKed pkt v sender window § N consecutive seq #’s § limits seq #s of sent, un. ACKed pkts Transport Layer 3 -51

Selective repeat: sender, receiver windows Transport Layer 3 -52 Selective repeat: sender, receiver windows Transport Layer 3 -52

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

Selective repeat in action sender window (N=4) 012345678 012345678 sender send pkt 0 send Selective repeat in action sender window (N=4) 012345678 012345678 sender send pkt 0 send pkt 1 send pkt 2 send pkt 3 (wait) receiver Xloss rcv ack 0, send pkt 4 rcv ack 1, send pkt 5 record ack 3 arrived pkt 2 timeout 012345678 receive pkt 0, send ack 0 receive pkt 1, send ack 1 receive pkt 3, buffer, send ack 3 receive pkt 4, buffer, send ack 4 receive pkt 5, buffer, send ack 5 send pkt 2 record ack 4 arrived rcv pkt 2; deliver pkt 2, pkt 3, pkt 4, pkt 5; send ack 2 Q: what happens when ack 2 arrives? Transport Layer 3 -54

Selective repeat: dilemma example: v v seq #’s: 0, 1, 2, 3 window size=3 Selective repeat: dilemma example: v v seq #’s: 0, 1, 2, 3 window size=3 receiver sees no difference in two scenarios! duplicate data accepted as new in (b) receiver window (after receipt) sender window (after receipt) 0123012 pkt 0 0123012 pkt 1 0123012 pkt 2 0123012 pkt 3 0123012 pkt 0 (a) no problem 0123012 X will accept packet with seq number 0 receiver can’t see sender side. receiver behavior identical in both cases! something’s (very) wrong! pkt 0 0123012 Q: what relationship between seq # size and window size to avoid problem in (b)? 0123012 pkt 1 0123012 pkt 2 0123012 X X timeout retransmit pkt 0 X 0123012 (b) oops! pkt 0 will accept packet with seq number 0 Transport Layer 3 -55