4.1.2 On the Receiver when receiving the packet

  1. A packet is received at the RDP-UDP layer. Because the UDP version is set to RDPUDP_PROTOCOL_VERSION_3, it is passed to the RDP-UDP2 stack for processing as an OnWire version of the packet (section 1.3.1).

  2. The OnWire version is converted to a Packet Layout and is passed to the RDP-UDP2 transport for further processing (section 3.1.1.1.5.2).

  3. The RDP-UDP2 transport decodes its header, along with the optional payloads it carries, and dispatches packets for further processing based on the optional payloads it possesses (section 2.2.1).

  4. Because the DATA payload is present, the Receiver obtains both the channel sequence number and the sequence number. In the scenario that there is no packet loss and no re-ordering, these two numbers are incremented by 1 to the current highest numbers respectively (section 3.1.1.2.2).

  5. The Receiver then forwards the packet to the Reliability Controller. The Reliability Controller strips out the channel sequence number and sets it as the current channel sequence number, and then forwards the rest of the data payload to the upper layer immediately (section 3.1.1.2.4.2).

  6. The Receiver updates the circular upper bound of the active range of the Receiver window buffer to 1 more than the newest sequence number (section 3.1.1.2.2).

  7. The Receiver constructs an acknowledgment packet containing the sequence number and reception timing information. It may or may not send it immediately, depending on the policy set for the DelayAckInfo payload and if there is any opposite direction traffic to piggy back on. But eventually it will be sent out to the Sender (section 2.2.1.2.1).