Tags
The Block Ack mechanism improves channel efficiency by aggregating several acknowledgments into one frame. There are two types of Block Ack mechanisms, immediate and delayed. Immediate Block Ack is suitable for high-bandwidth, low-latency traffic while the delayed Block Ack is suitable for applications that tolerate moderate latency.
The Block Ack mechanism is initialized by an exchange of ADDBA Request/Response frames. After initialization, blocks of QoS data frames may be transmitted from the originator to the recipient. A block may be started within a polled TXOP or by winning EDCA contention. The MPDUs within the block of frames are acknowledged by a BlockAck frame, which is requested by a BlockAckReq frame.
Below diagram (source IEEE 802.11-2012) shows message sequence chart for the setup, data and Block Ack transfer, and the teardown of the Block Ack mechanism.
Setup
Tx STA (originator) first check whether the intended recipient STA is capable of participating in BlockAck mechanism by discovering and examining its Delayed Block Ack and Immediate Block Ack capability bits. If the intended recipient STA is capable of participating, the originator sends an ADDBA Request frame indicating the TID for which the Block Ack is being set up.
The recipient STA shall respond by an ADDBA Response frame. The recipient STA has the option of accepting or rejecting the request. When the recipient STA accepts, then a Block Ack agreement exists between the originator and recipient.
Data & BlockAck
Originator may transmit a block of QoS data frames separated by SIFS period, with the total number of frames not exceeding the Buffer Size subfield value in the associated ADDBA Response frame and subject to any additional duration limitations based on the channel access mechanism. Each of the frames shall have the Ack Policy subfield in the QoS Control field set to Block Ack.
The originator requests acknowledgment of outstanding QoS data frames by sending a Basic BlockAckReq frame. The recipient shall maintain a Block Ack record for the block.
Below shows the BlockAck sequence when using delayed block ack policy
Teardown
When the originator has no data to send and the final Block Ack exchange has completed, it shall signal the end of its use of the Block Ack mechanism by sending the DELBA frame to its recipient. There is no management response frame from the recipient. The recipient of the DELBA frame shall release all resources allocated for the Block Ack transfer.
The Block Ack agreement may be torn down if there are no BlockAck, BlockAckReq, or QoS data frames (sent under Block Ack policy) for the Block Ack’s TID received from the peer within a duration of Block Ack timeout value.
Here is a frame capture shown this BlockAck frame exchange.Here is the Add Block Ack Request (ADDBA Request) frame detail (frame 284). It is an management action frame (action category 3 & action code 0). You can find these frame using following wireshark display filter.
(wlan_mgt.fixed.category_code == 3)&&(wlan_mgt.fixed.action_code == 0)
Dialog Token
The Dialog Token field is set to a nonzero value chosen by the STA.
Block Ack Parameter
The Block Ack Parameter Set field is used in ADDBA frames to signal the parameters for setting up a Block Ack. The length of the Block Ack Parameter Set field is 2 bytes. The Block Ack Parameter Set field is shown in below.
A-MSDU Supported: determines whether an A-MSDU may be carried in a QoS data MPDU sent under this Block Ack agreement. When equal to 1, use of A-MSDU is permitted. When equal to 0, use of A-MSDU is not permitted.
Block Ack Policy: set to 1 for immediate Block Ack and 0 for delayed Block Ack.
TID: contains the value of the TC or TS for which the BlockAck is being requested.
Buffer Size: indicates the number of buffers available for this particular TID.When the AMSDU Supported field is equal to 0 as indicated by the STA transmitting the Block Ack Parameter Set field, each buffer is capable of holding a number of octets equal to the maximum size of an MSDU. A-MSDU Supported field is equal to 1 as indicated by the STA, each buffer is capable of holding a number of octets equal to the maximum size of an A-MSDU that is supported by the STA.
Block Ack Timeout
The Block Ack Timeout Value field (2 byte) is used in the ADDBA Request and Response frames to indicate the timeout value for Block Ack.
Here is the ADDBA Response frame detail. It is Management Action frame (Category 3 & action code 1). Status code 0 mean it is ADDBA request accepted by recipient STA. Dialog Token value is copied from the ADDBA Request frame.
(wlan_mgt.fixed.category_code == 3)&&(wlan_mgt.fixed.action_code == 1)
ADDBA Response frame has following fields
Once Originator send block of frames it is requesting recipient to acknowledge them. This request is done by sending a BlockAck Request frame which is a control frame.
Here is the frame format of this BlockAck Request frame.
For BlockAckReq frames sent under Delayed and HT-Delayed agreements, the BAR Ack Policy subfield of the BAR Control field has the meaning shown in Table 8-15. For BlockAckReq frames sent under other types of agreement, the BAR Ack Policy subfield is reserved.
Here is the BlockAck frame sent by the recipient STA.
For BlockAck frames sent under Delayed and HT-Delayed agreements, the BA Ack Policy subfield of the BA Control field has the meaning shown in Table 8-17. For BlockAck frames sent under other types of agreement, the BA Ack Policy subfield is reserved.
The DELBA frame is sent by either the originator of the traffic or the recipient to terminate the Block Ack participation. The Action field of a DELBA frame format contains the information shown below.
References
1. IEEE 802.11-2012 Standard
2. CWAP Official Study Guide – Chapter 5
Hi ,
What happens when a MPDU is corrupted in A-MPDU. Could you please tell behaviour how frame is being retransmitted and how BAR/Blockack works that time
Based on Bit map in Block Ack frame re retransmission will takes place for corrupted frames .
Hi,
I have a doubt. Could you pls give some clarity
I am analysing sniffer trace and seeing QoS data packets are transmitted as burst after sifs and getting implicit block ack. According to this behaviour QoS data should carry block ack policy bit set to 1 expect last data such that implicit black ack works. But in my trace all QoS data set block ack field as normal ack. Is this expected behaviour?
Hi, I have the same experiences. All the QoS data packets have ‘0b00’ bits (Normal ACK). The difference between the last packet and the others are its length. The preceding bursts are of 1598 bytes long and the last one is 1602. (when, their Data length is the same, and 1516 bytes).
Hi,
Could you already find an explanation for this behavior?
I also see the same behavior. QoS Data frames have Normal Ack policy. No Bock Ack Request is sent by the transmitter, but the receiver still sends a Block Ack. Have you found more information on this?
Very nice sir. Your hard really became lively hood for us. God bless you.
Thanks,
Chandra Sekhar Reddy
Thank you Chandra for kind words
Rasika
Thank you for your explanation,
Actually i need to know the durations of control frames ( ADDBA REQ/RES, BA, ACK)? Are the ones displayed on the pcap files the right ones or they include an SIFS duration? is the duration below frame control field represents the duration of the corresponding frame?
Thank you for your help,
Kaoutar
Thank you for your explanation,
Actually i need to know the durations of control frames ( ADDBA REQ/RES, BA, ACK)? Are the ones displayed on the pcap files the right ones or they include an SIFS duration? is the duration below frame control field represents the duration of the corresponding frame?
Thank you for your help,
Kaoutar
Regarding Chittarasan’s question: According to IEEE 802.11-2016 Table 9-9, when both bits 5 and 6 of the QoS control field are 0, this means “Normal Ack or Implicit Block Ack Request.”
According to my understanding, implicit block ack is used when a QoS frame’s ack policy is b’00 and the use of block ack scheme is agreed between receiver and transmitter. Otherwise, b’00 means “normal ack”.
Implicit block ack means that after each A-MPDU the receiver generates a block ack *without* waiting for a block ack request from the transmitter.
Thank you for the explanation,
Is it necessary that a device is connected to an AP to send Block Ack ?
or it can exist before association ?
Answer will be very appreciated.
Thank you
Block Ack it to acknowledge multiple frames received from another station (AP is a station in the cell). So client has to connect to a BSS (AP) prior to start any data communication. Therfore Block Ack seen once they connected to the AP & starting data transfers
HTH
Rasika