We want to have a reliable protocol built on top of an unreliable channel.
The interfaces for reliable data transfer are as follows:
rdt_send
- pass data from application to deliverudt_send
- called by rdt to transfer packet of unreliable channel to receieverdeliver_data
- called by rdt to deliver data to upper layerrdt_rcv
- called when packet arrives on receiever side of channelWe consider unidirectional data transfer, but control info will flow in both directions.
Sender/receiver actions can be specified by finite state machines.
rdt1.0 - reliable transfer over a reliable channel
Assumption is that underlying channel is perfectly reliable.
Very simple FSMs for sender/receiver: