Reliable Data Transfer

Reliable Data Transfer is a topic in computer networking concerning the transfer of data across unreliable channels. Unreliability is one of the drawbacks of packet switched networks such as the modern internet, as packet loss can occur for a variety of reasons, and delivery of packets is not guaranteed to happen in the order that the packets were sent. Therefore, in order to create long-term data streams over the internet, techniques have been developed to provide reliability, which are generally implemented in the Transport layer of the internet protocol suite.

In instructional materials, the topic is often presented in the form of theoretical example protocols which are themselves referred to as "RDT", in order to introduce students to the problems and solutions encountered in Transport layer protocols such as the Transmission Control Protocol. These sources often describe a pseudo-API and include Finite-state machine diagrams to illustrate how such a protocol might be implemented, as well as a version history. These details are generally consistent between sources, yet are often left uncited, so the origin of this theoretical RDT protocol is unclear.

Example Versions
Sources that describe an example RDT protocol often provide a "version history" to illustrate the development of modern Transport layer techniques, generally resembling the below:

Reliable Data Transfer 1.0
With Reliable Data Transfer 1.0, the data can only be transferred via a reliable data channel. It is the most simple of the Reliable Data Transfer protocols in terms of algorithm processing.

Reliable Data Transfer 2.0
Reliable Data Transfer 2.0 supports reliable data transfer in unreliable data channels. It uses a checksum to detect errors. The receiver sends acknowledgement message if the message is complete, and if the message is incomplete, it sends a negative acknowledgement message and requests the data again.

Reliable Data Transfer 2.1
Reliable Data Transfer 2.1 also supports reliable data transfers in unreliable data channels and uses a checksum to detect errors. However, to prevent duplicate messages, it adds a sequence number to each packet. The receiver sends acknowledgement message with corresponding sequence ID if the data is complete, and sends a negative acknowledgement message with corresponding sequence ID and asks the sender to send again if the message is not complete.

Reliable Data Transfer 3.0
Reliable Data Transfer 3.0, like earlier versions of the protocol, supports reliable data transfer in unreliable data channels, uses checksums to check for errors, and adds sequence numbers to data packets. Additionally, it includes a countdown timer to detect packet loss. If the sender cannot acknowledge specific data in a certain duration, it will consider as packet as lost and will send it again.