3.1.1.2.1 Sender Window Buffer

The Sender Window Buffer is a circular buffer implemented by the Sender. The circular buffer is of size 1<<(LogWindowSize field in the RDP-UDP2 Packet Header) (section 2.2.1.1). It contains an active range of nodes each representing a packet that has been sent but for which the Sender has not yet forwarded the packet's state to higher layers of the RDP-UDP2 implementation for further processing.

Each node in the active range has one of three possible states:

Pending: The packet has been sent, but no acknowledgment has been received from the Receiver.

Received: The Sender has received an acknowledgment from the Receiver using an ACK payload, or an ACK Vector payload where the state for this packet was marked as received.

Lost: The Sender has not received acknowledgment from the Receiver indicating that this packet was received, and the Sender's loss detection implementation has declared that this packet is lost (section 3.1.1.2.3).

The upper bound of the active range in the circular buffer increases when a new packet is ready to be sent. The state of the new packet is set to "Pending". The lower bound of the active range in the circular buffer increases until the next lower bound value is a node in the "Pending" state. The lower bound is increased when any of these events occur.

  • The Sender receives an ACK payload containing the sequence number that matches the entry corresponding to the lower bound of the active range. The state of that packet is set to "Received". All the nodes with lower sequence numbers in the active range in the "Pending" state are changed to the "Received" state.

  • The Loss Detection logic (section 3.1.1.2.3) detects that a packet has been lost and the sequence number of the packet matches a node in the active range. The state of that node is set to "Lost". All the nodes with lower sequence numbers in the active range in the "Pending" state are changed to the "Received" state. In this scenario, the Sender SHOULD send an AckOfAcks packet to inform the Receiver of the new lowest sequence number that is in the active range.

When the circular lower bound is increased, the nodes that were removed from the active range are sent to the higher layers of the RDP-UDP2 implementation for further processing. These higher layers SHOULD include concepts like the Reliability Controller (section 3.1.1.2.4) for retransmitting lost packets, Congestion Controller for inferring the runtime network conditions, and the components that will consume the payload from the packet.