2.2.1.2.6 Acknowledgement Vector Payload

The Acknowledgment Vector payload contains the information of a vector of acknowledgments for all packets within the current Receiver Window (section 3.1.1.2.2). The presence of this payload is flagged by the ACKVEC (0x008) flag in the header (section 2.2.1.1), and it is sent by the Receiver. Upon receiving this packet, the Sender can interpret the current state of unacknowledged packets within its Sender Window (section 3.1.1.2.1).


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

BaseSeqNum

codedAckVecSize

A

TimeStamp (optional)

...

SendAckTimeGapInMs

codedAckVector (variable)

...

BaseSeqNum (2 bytes): A 16-bit unsigned integer that specifies the lower 16 bits of sequence number for the base of this acknowledgment array.

codedAckVecSize (7 bits): A 7-bit unsigned integer that specifies the number of entries in the codedAckVector field.

A - TimeStampPresent (1 bit): A 1-bit flag that indicates if the TimeStamp is present.

TimeStamp (3 bytes, optional): A 24-bit unsigned integer that specifies the lower 24 bits of the timestamp for the highest sequence number received that has not been acknowledged yet. The TimeStamp field MUST be present if TimeStampPresent is set to 1 and MUST NOT be present if TimeStampPresent is set to 0.

SendAckTimeGapInMs (1 byte, optional): An 8-bit unsigned integer that specifies the time interval (in milliseconds) between the sent time of the current Acknowledgement Vector packet and the arrival time of the latest data packet that has been received. A value of 255 indicates that the meaning of this field is invalid, and it MUST NOT be used. The SendAckTimeGapInMs field MUST be present if TimeStampPresent is set to 1 and MUST NOT be present if TimeStampPresent is set to 0.

codedAckVector (variable): An array of bytes, of size specified by codedAckVecSize, which contains a list describing the acknowledgement state of each packet in the range starting at BaseSeqNum. Each byte MUST be independently coded in one of the following two modes. The array represents the state information of sequential packets within the Receiver Window (section 3.1.1.2.2).

ยง State map mode: In this mode, the most significant bit of the byte MUST be set to 0. The remaining 7 bits MUST be set to a bit vector representing the state for the next 7 consecutive sequence numbers. A value of 1 indicates that the packet with that sequence number has been received; a zero value indicates that the packet with that sequence number has not been received.

  • Run-Length mode: In this mode, the most significant bit of the byte MUST be set to 1. The second most significant bit represents the state for the run length. If the second most significant bit is set to 1, the sequence numbers in this run have been received, and if the second most significant bit is 0, the sequence numbers in this run have not been received. The remaining 6 bits MUST contain the length of the run which represents the number of subsequent consecutive sequence numbers that are in the state specified by the second most significant bit.