Principles of Reliable DataTransfer
Reliable Delivery
Making sure that the packets sent by the sender arecorrectly and reliably received by the receiver amidnetwork errors, i.e., corrupted/lost packets
Can be implemented at LL, NL or TL of the protocol stack.Totally a design choice
When and why should this be used?
Link Layer
Rarely done over twisted-pair or fiber optic links
Usually done over lossy links (wireless) for performanceimprovement (versus correctness) in P2P links
Network/Transport Layers
Necessary if the application requires the data to be reliablydelivered to the receiver, e.g., file transfer
Reliable Delivery: Service Model
Reliable, In-order Delivery
unreliable channel
Reliable Data Transfer
Protocol (Sender Side)
Reliable Data Transfer
Protocol (Receiver Side)
1
2
3
4
1
2
3
4
UDT_Send
RDT_Receive
Deliver_Data
RDT_Send
Reliable, In-order delivery
Typically done when reliability is implemented at thetransport layer, e.g., TCP
Example application: File transfer
Reliable Delivery: Assumptions
We’ll:
Consider only unidirectional data transfer
A sender sending packets to a receiver
Bidirectional communication is a simple extension,where there are 2 sender/receiver pairs
Start with simple a protocol and make it complexas we continue
RDT over Unreliable Channel
Unreliable channel
Reliable Data Transfer
Protocol (Sender Side)
Reliable Data Transfer
Protocol (Receiver Side)
1
2
3
4
1
2
3
4
UDT_Send
RDT_Receive
Deliver_Data
RDT_Send
Channel may flip bits in packets/lose packets
The received packet may have been corrupted duringtransmission, or dropped at an intermediate router dueto buffer overflow
The question: how to recover from errors?
ACKs, NACKs, Timeouts… Next
RDT over Unreliable Channel
Two fundamental mechanisms to accomplishreliable delivery over Unreliable Channels
Acknowledgements (ACK), Negative ACK (NACK)
Small control packets (header without any data) that aprotocol sends back to its peer saying that it has receivedan earlier packet (positive ACK) or that it has not received apacket (NACK).
Sent by the receiver to the sender
Timeouts
Set by the sender for each transmitted packet
If an ACK is received before the timer expires, then thepacket has made it to the receiver
If the timeout occurs, the sender assumes that the packetis lost (corrupted) and retransmits the packet
ARQ
The general strategy of using ACKs (NACKs)and timeouts to implement reliable delivery iscalled Automatic Repeat reQuest (ARQ)
3 ARQ Mechanisms for Reliable Delivery
Stop and Wait
Concurrent Logical Channels
Sliding Window
Stop and Wait
Simplest ARQ protocol
Sender:
Send a packet
Stop and wait until anACK arrives
If received ACK, sendthe next packet
If timeout, ReTransmitthe same packet
Receiver:
When you receive apacket correctly, sendan ACK
Time
Packet
ACK
Timeout
Sender
Receiver
Packet
ACK
Packet
Recovering from Error
Packet
ACK
Timeout
Packet
ACK
Timeout
Time
Packet
ACK
Timeout
Packet
ACK
Timeout
ACK lost
Early timeout
Packet
Timeout
Packet
ACK
Timeout
Packet lost
Does this protocol work?
When an ACK is lost or a early timeout occurs, how does thereceiver know whether the packet is a retransmission or a newpacket?
Use sequence numbers: Both Packets and ACKs
Stop & Wait with Seq #s
Pkt 0
ACK 0
Timeout
Pkt 0
ACK 0
Timeout
Time
Pkt 0
ACK 0
Timeout
Pkt 0
ACK 0
Timeout
ACK lost
Early timeout
Pkt 0
Timeout
Pkt 0
ACK 0
Timeout
Packet lost
Sequence # in packet is finite -- how big should it be?
One bit – won’t send Pkt #1 until received ACK for Pkt #0
Pkt 1
Pkt 1
Pkt 1
Performance of Stop and Wait
first packet bit transmitted, t = 0
sender
receiver
RTT
last packet bit transmitted, t = L / R
first packet bit arrives
last packet bit arrives, sendACK
ACK arrives, send next
packet, t = RTT + L / R
Can only send one packet per round trip
example: 1 Gbps link, 15 ms e-e prop. delay, 1KB packet:
1KB pkt every 30 msec -> 33kB/sec throughput over 1 Gbps link
network protocol limits use of physical resources!
Pipelining: Increasing 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!
Pipelining: sender allows multiple, “in-flight”, yet-to-be-acknowledgedpkts without waiting for first to be ACKed to keep the pipe full
Capacity of the Pipe = RTT * BW
Sliding Window Protocols
Reliable, in-order delivery of packets
Sender can send “window” of up to N,consecutive unack’ed packets
Receiver makes sure that the packets aredelivered in-order to the upper layer
2 Generic Versions
Go-Back-N
Selective Repeat
Receiver
Receiver
Sender
Sender
Sliding Window:Generic Sender/Receiver States
Sent & Acked
Sent Not Acked
OK to Send
Not Usable
Last Packet Acceptable
(LPA)
Receiver Window Size
Last ACK Received
(LAR)
Last Packet Sent
(LPS)
Received & Acked
Acceptable Packet
Not Usable
Sender Window Size
Next Packet Expected
(NPE)
Sliding Window- Sender Side
The sender maintains 3 variables
Sender Window Size (SWS)
Upper bound on the number of in-flight packets
Last Acknowledgement Received (LAR)
Last Packet Sent (LPS)
We want LPS – LAR <= SWS
LAR
LPS
<= SWS
Sliding Window- Receiver Side
The receiver maintains 3 variables
Receiver Window Size (RWS)
Upper bound on the number of buffered packets
Last Packet Acceptable (LPA)
Next Packet Expected (NPE)
We want LPS – NPE + 1 <= RWS
NPE
LPA
<= RWS
Go-Back-N
Receiver
Receiver
Sender
Sender
Sent & Acked
Sent Not Acked
OK to Send
Not Usable
Last Packet Acceptable
(LPA)
RWS = 1 packet
Last ACK Received
(LAR)
Last Packet Sent
(LPS)
Received & Acked
Acceptable Packet
Not Usable
SWS = N
Next Packet Expected
(NPE)
SWS = N: Sender can send up to N consecutive unack’ed pkts
RWS = 1: Receiver has buffer for just 1 packet
Always sends ACK for correctly-rcvd pkt with highest in-order seq #
Cumulative ACK
Out-of-order pkt:
discard & re-ACK pkt with highest in-order seq #
Go-Back-N:  Sender Actions
Data From Above:
Send packets as long as LPS-LAR <= SWS
ACK(k): An ACK with “seqno = k” arrives:
If k > LAR then, increase LAR until LAR hits a packetfor which ACK has not arrived yet, or LAR == LPS
Send packet(s) as long as LPS-LAR <= SWS
Associate a timer with the oldest packet sent
Single timer for all packets in transit
Timeout:
Retransmit ALL packets that have been previouslysent, but not yet ACKed
Therefore the name Go-Back-N
Go-Back-N: Receiver Actions
A packet with “seqno” arrives:
If seqno == NPE then     // in-order packet
Deliver the packet to the upper layer
Send an ACK for pkt# = seqno
This is called “cumulative ACK” scheme
ACKs not only the current packet, but also all packets before it
If seqno != NPE then      // out of order packet
Since sequence # of the last packet received is NPE – 1,send an ACK for pkt# = NPE-1
Still using “cumulative ACK” scheme.
GBN in action (SWS = 4)
gbn_example
GBN: Last Word
Why use GBN?
Very simple receiver
Why NOT use GBN?
Throwing away out-of-order packets at the receiverresults in extra transmissions, thus lowering thechannel utilization:
The channel may become full of retransmissions of oldpackets rather than useful new packets
Can we do better?
Yes: Buffer out-of-order packets at the receiver and doSelective Repeat (Retransmissions) at the sender
Selective Repeat
Receiver
Receiver
Sender
Sender
Sent & Acked
Sent Not Acked
OK to Send
Not Usable
Last Packet Acceptable
(LPA)
RWS = N
Last ACK Received
(LAR)
Last Packet Sent
(LPS)
Received & Acked
Acceptable Packet
Not Usable
SWS = N
Next Packet Expected
(NPE)
SWS = RWS = N consecutive packets: Sender can send up to Nconsecutive unack’ed pkts, Receiver can buffer up to N consecutive packets
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
Selective repeat
data from above :
if next available seq # inwindow, send pkt
timeout(k):
resend pkt k, restarttimer
ACK(k) in [LAR+1, LPS]
Mark pkt “k” as received
if k == LAR +1 then,advance LAR to nextunACKed pkt #
sender
pkt k in [NPE, LPA]
send ACK(k)
out-of-order (k != NPE):
buffer
in-order (k == NPE):
deliver (also deliverbuffered, in-order pkts),advance NPE to next not-yet-received pkt
pkt k in [NPE-N, LPA-1]
Send ACK(k)
otherwise:
ignore
receiver
Selective repeat in action
03-25
Selective Repeat: Sequence Numbers
How large do sequence numbers need to be?
Must be able to detect wrap-around
Depends on sender/receiver window size
E.g.
Assume SWS = RWS = 7. Also assume that we use 3-bitsequence numbers, i.e., 0..7
Sender sends frames 0..6
Assume receiver received all these frames successfully BUT allACKs are lost
Receiver expects 7,0..5
Sender timeouts and retransmits old 0..6
Receiver receives these but assumes these are new frames!!
It turns out that the sending window size can be nomore than half as big as the number of availablesequence numbers
WS <= (MaxSeqNo +1)/2
Sliding Window: Last Word
Go-Back-N and Selective Repeat are NOT theonly sliding Window protocol alternatives
Other variations exist:
Let SWS = RWS = N and use cumulative ACKs
Simplifies the sender: Can have a single timer instead of atimer for each packet in transit
This is in fact what TCP does!
Let SWS = RWS = N, and use Negative ACKs
Can be used when the channel is pretty reliable, i.e., packetloss is very rare
Only notify the sender when something goes wrong
SWS = RWS = 4 with cumulative ACKs
NPE = 5
LPA =8
RWS = 4
Assume NPE = 5 and RWS = 4  LPA = 8
Assume frames 6 and 7 arrive.
They will be buffered, BUT no ACK will be sent since frame 5 isyet to arrive.
Frames 6 and 7 are said to arrive “out of order”
Receiver sends ACK for pkt #4
If frame 5 now arrives because it may have been lostand retransmitted by the sender or it may have beensimply delayed
The receiver will then ACK frame 7 (cumulative ACK) and setsNPE to 8 and LPA to 11