3.1.5.7 Acknowledgment Vector Payload

This payload is defined in section 2.2.1.2.6.

  • Refer to section 3.1.1.1.3 and section 3.1.1.1.4 for the procedures to convert BaseSeqNum and TimeStamp back to their respective full ranged variables.

  • The Acknowledgment Vector payload is sent by the Receiver to the Sender when the Receiver detects that there is at least one packet still missing that has its sequence number smaller than the currently highest sequence number from all packets received. This missing packet could be due to delays or reordering in timing somewhere in the internet, or it could have been dropped. In all of these cases, the Receiver sends an Acknowledgment Vector payload to inform the Sender about the current state of all the subsequent sequence numbers that it has knowledge of, starting from the first missing sequence number.

    The full resolution base sequence number derived from BaseSeqNum usually represents the first missing packet known to the Receiver at this point. The Acknowledgment Vector array of size AckVecSize bytes codes the complete state of all sequence numbers following BaseSeqNum, up to the highest sequence number received so far by the Receiver. Each byte in the array can be independently coded in one of the two modes for the state information:

    • State map mode: bit 7 set to 0: In this mode, the remaining 7 bits code a bit map of state for all the 7 following sequence numbers. A value of 1 indicates that the sequence number has been received; value of 0 indicates that it is still missing.

    • Run-Length mode: bit 7 set to 1: In this mode, the bit 6 represents the state. A value of 1 indicates that the sequence numbers in this run are received; a value of 0 indicates the sequence numbers in this run are still missing. The lower 6 bits represent the length of the run.

    Example 1: Assuming the base sequence number is 1000, then an ACK vector byte of 0x64 indicates that it is coded in the bit map mode, the sequence numbers 1000, 1001, 1003, and 1004 are still missing, and the sequence numbers 1002, 1005, and 1006 have been received.

    Example 2: Assuming the base sequence number is 1000, then an ACK vector byte of 0xe4 indicates that it is coded in the run-length mode with the state being 1 and the length of the run being 36. In other words, all sequence numbers from 1000 through 1035 have been received.

Because AckVecSize is limited to 127, the maximum number of sequence numbers coded in this ACK vector is limited. In theory, there can be a case where one acknowledgement vector is not be enough to represent a series of missing and received states. In this case, more than one acknowledgement vector SHOULD be sent by the Receiver. The first acknowledgement vector SHOULD NOT have the TimeStampPresent set, and its base sequence number SHOULD specify the missing state. The last acknowledgement vector can have the TimeStampPresent set, indicating that it has valid timestamp information for the packet with the latest sequence number received.