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 YWait 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-26
Transport Layer 3-26 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 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
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: How do humans recover from“errors” during conversation? Transport Layer 3-27
Transport Layer 3-27 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 rdt2.0: channel with bit errors How do humans recover from “errors” during conversation?
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-28
Transport Layer 3-28 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 rdt2.0: channel with bit errors
rdt2.0:FSM specification rdt_send(data) sndpkt make_pkt(data,checksum) receiver udt send(sndpkt) rdt_rcv(rcvpkt)&& Wait for Wait for isNAK(rcvpkt) rdt_rcv(rcvpkt)&& call from ACK or udt send(sndpkt) corrupt(rcvpkt) above NAK udt send(NAK) rdt_rcv(rcvpkt)&&isACK(rcvpkt) Wait for Λ call from sender below rdt_rcv(rcvpkt)&& notcorrupt(rcvpkt) extract(rcvpkt,data) deliver data(data)) udt_send(ACK) Transport Layer 3-29
Transport Layer 3-29 rdt2.0: FSM specification Wait for call from above sndpkt = 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 below sender receiver rdt_send(data)
rdt2.0:operation with no errors rdt_send(data) snkpkt make pkt(data,checksum) udt send(sndpkt) rdt_rcv(rcvpkt)&& Wait for Wait for isNAK(rcvpkt) rdt rcv(rcvpkt)&& call from ACK or udt_send(sndpkt) corrupt(rcvpkt) above NAK udt send(NAK) rdt_rcv(rcvpkt)&&isACK(rcvpkt) Wait for call from below rdt rcv(rcvpkt)&& notcorrupt(rcvpkt) extract(rcvpkt,data) deliver data(data) udt_send(ACK) Transport Layer 3-30
Transport Layer 3-30 rdt2.0: operation with no errors 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 below rdt_send(data)