In the generic SR protocol that we studied in Section 3.4.4, the sender trans- mits a message as soon as it is available (if it is in the window) without wait- ing for an acknowledgment. Suppose now that we want an SR protocol that sends messages two at a time. That is, the sender will send a pair of messages and will send the next pair of messages only when it knows that both mes- sages in the first pair have been received correctly. Suppose that the channel may lose messages but will not corrupt or reorder messages. Design an error- control protocol for the unidirectional reliable transfer of messages. Give an FSM description of the sender and receiver. Describe the format of the packets sent between sender and receiver, and vice versa. If you use any procedure calls other than those in Section 3.4 (for example, udt_send(), start_timer(), rdt_rcv(), and so on), clearly state their actions. Give an example (a timeline trace of sender and receiver) showing how your protocol recovers from a lost packet.
Extended FSMs for Sender and Receiver, Descriptions of packets' format and Timeline are shown below