Protocol

In this scenario, there is a high packet loss and high error rate hence TCP is not particularly efficient. The protocol proposed is leveraging the ability of the receiver to be able to send acknowledgments that are out of order. In this protocol, there will be a sender and receiver. The sender will have the large file, the sender will fragment it and send it to the receiver. The receiver will only acknowledge the packets. The feature that will differentiate this protocol from TCP is that the receiver does not have to acknowledge the last cumulative packets received. It can also acknowledge the packets which have arrived out of order. This will prevent the retransmission of data that would take place in the case of TCP. The working of the protocol will be as follows:

  1. The sender will send an SYN packet to establish the connection. The receiver will acknowledge the SYN, then the sender will start sending its packets.
  2. The receiver will have a timer and after the timer expires, the receiver will acknowledge the last cumulative packet which is successfully received as well as the packets which are received out of order after the last cumulative packet. The sender will only transmit the data which are lost and not all the packets after the last cumulative ack.
  3. In the event of an acknowledgment being lost, the sender will retransmit the packets after the last cumulative acks received. The sender will not resend the out of order acknowledged packets.
  4. After the data is sent successfully, the sender will send a FIN signal and the receiver will acknowledge the FIN signal. Sender packet will have the following information: Data bytes, the Sequence Number, Error Detection (Checksum), Source port, Destination port SYN flag to indicate the start of the connection, FIN flag to indicate the termination of the connection. Each packet will have a unique sequence number. A packet sent after just after another packet will have its sequence number one greater than the previous packet. Acknowledgments will have the following format:
  5. Cumulative Acks: Will specify all the packets that have been cumulatively received
  6. positive: Will specify the packets that have been received out of order successfully.
  7. SYN and FIN flag to set up the initial connection and then terminate it.

Advantages over TCP

TCP will only acknowledge the last successful cumulative packet received. It will not acknowledge the packets that it receives out of order. Suppose the TCP window size is 5 and the sender sends five packets but the second packet is lost. In this case, the receiver will only acknowledge the first packet received. Once it gets the second packet, the receiver will acknowledge all the five packets, but the sender will timeout and resend all of the packages. This protocol will prevent the resending of the packets by providing out of order acknowledgments. TCP uses a congestion window, and if a packet is lost TCP will reduce the congestion window. In an environment where there is high packet loss, this strategy will lead to high transmission time. This protocol does not change the number of packets sent based on the number of packets lost.

Reference: RFC 908