A A-to-C channel C-to-A channel Lo B B-to-C channel C-to-B channel C NAK from C received Resend last packet to C START: Call rdt send(data) to get first data from above Compute checksum Create packet to C with (data, checksum, A) Send packet to C Wait ACK SENDER A wwwww ACK from C Call rdt send(data) to get next data from above Compute checksum Create packet to C with (data, checksum, "A") Send packet to C
A protocol for interleaved deliveries from two senders.
Consider the figure below, which shows three nodes, A, B, and C. A and C are connected by a bi-directional channel; B and C are connected by a separate independent bi-directional channel. A and B can not communicate with each other.
The goal of the protocol you will design is to transfer data from A and from B in a coordinated manner to C. The protocol between sender A and receiver C (and sender B and C) operates as follows. Senders A and B each receive data from their upper layer, via a call to rdt_send(data), which returns the data to be sent, exactly the same as the rdt protocols we studied in class and in the text. Senders A and B are to reliably send their sequence of data obtained via subsequent calls from rdt_send(data) to C.
Node C should deliver to its application layer (via a call to deliver_data())a data item from A (as soon as it has correctly received that data item), followed by a data item from B (as soon as it has correctly received that data item), followed by the next data item from A, followed by the next data item from B and so on. As in rdt, a sender should NOT begin sending the next data item until it knows that receiver C has delivered the current data item it has been sending.
The A-to-C channel and the B-to-C channel can corrupt but will not lose/drop packets. The C-to-A channel and the C-to-B channels are perfect; they will neither corrupt nor lose/drop packets. (Re-read these channel assumptions; they're important!)
I’ve done some of the work for you! In particular, I’ve given the FSM for sender A (sender B has a similar FSM) below. Sender A sends a message to C and then waits for an ACK or a NAK from C. If an ACK is received it will then get another data item and send to C. If a NAK is received, the last packet will be retransmitted.
Question statement:
- 9a. Give the FSM description for the receiver C that interoperates with A and B to implement the interleaved-delivery functionality described above. You can specify your FSM events and actions for receiver C in English, similar to how the FSM for A is specified above. You only use those
mechanisms necessary in order to implement this functionality with the given channel assumptions. - 9b. In addition to your FSM, give a short explanation (e.g., a paragraph long) of how your receiver works. In particular explain how it ensure alternating delivery of messages from A and B, and passes up (via ) received data item (in the interleaved/alternating fashion) from A or B as soon as that data item has been received correctly.


Unlock instant AI solutions
Tap the button
to generate a solution








