Receive Protocol Handler Design Pattern

Provide a common framework for receive direction sliding window protocol implementation.

Also Known As

Motivation

Different sliding window protocols have a lot of similarity. This similarity can be captured in a common design pattern for their implementation. Here we will focus on the receive side of the protocol.

Applicability

Receive Protocol Handler Pattern can be used to implement protocols at any layer.

Structure

This pattern is implemented by just one class, Receive Protocol Handler. This class receives the packets from the other end and performs the following operations:

To achieve this functionality, the following sequence numbers are maintained:

Participants

The Transmit and Receive Protocol Handlers are the main participants in this pattern. The received messages are added to the Receive Queue. The received message will be picked by the next higher layer.

Collaboration

The following diagram shows the relationship and collaboration between the Transmit Protocol Handler, Receive Protocol Handler and the Receive Queue classes.

Receive Protocol Handler

Consequences

Using this pattern simplifies the implementation of receive end point of a sliding window protocol. The design is flexible enough to adjust to any protocol.

Implementation

Handling of the received message is described below:

  1. Receive Protocol Handler's "Handle Received Packet" is invoked.
  2. Compare the packet's transmit sequence number with the expected sequence number.
  3. If the sequence number matches, take the following actions:
    1. Request Transmit Sequence Handler to acknowledge the just received packet.
    2. Add the message to the receive queue
    3. Modulo increment the next expected sequence number
  4. Compare the packet's receive sequence number with the last acknowledged sequence number. (Change in sequence number implies that an acknowledgement has been received from the other end).
  5. If a change is detected in the received sequence number, the following action is taken:
    1. Store the new receive sequence number as the last acknowledged sequence number.
    2. Inform the Transmit Protocol Handler about the acknowledgements received from the other end.

Sample Code and Usage

Here we present the code for a typical implementation of this pattern. Code is provided for the Receive Protocol Handler class. Receive Queue can be implemented using the message queue pattern.

Receive Protocol Handler

Known Uses

Related Patterns