1. Overview and Introduction
In this second programming assignment, you’ll be writing the sending and receiving transportlevel
code for implementing a simple reliable data transfer protocol, specifically using an
implementation of the rdt 3.0 protocol that we studied in class. It will operate over a channel
that can corrupt, lose, or delay (but not reorder) messages. This should be fun since your
implementation will differ very little from what would be required in a real-world situation.
The sending and receiving sides FSMs for the rdt 3.0 protocol are shown in Figure 1. The most
important difference between rdt 3.0 and what you’ll implement is that your sender will not be
called via an rdt_send(data) from above, nor will your receiver deliver data to above via
udt_send(data). Instead, as discussed below, your sender will reliably deliver a file from
sender to receiver. And, of course, your sender and receiver will be communicating over sockets,
over a “live” Internet.
3.
2. rdt 3.0 protocol details
Because your sender and receiver will operate over a channel that can corrupt, lose, or delay (but
not reorder) messages, you’ll want to use checksums, sequence, and acknowledgement numbers
Figure 1: rdt 3.0 sender and receiver. The logic and data-transfer protocol behavior will be the same as show
here, but the implementation details (e.g., socket calls) will differ from the abstract functions shown here.