无线Block Ack(BA,块确认)是一种用于提高Wi-Fi网络性能和效率的机制,特别是在高吞吐量(High Throughput,HT)Wi-Fi标准(例如802.11n、802.11ac、802.11ax)中广泛使用。它是一种确认机制,用于在无线通信中减少确认帧(ACK帧)的数量,从而提高了数据传输的效率。
它用于提高Wi-Fi网络性能和效率的机制,通过减少确认帧的数量和降低时延,可以更有效地传输数据,特别是在高吞吐量Wi-Fi网络中。这种机制对于实现高速数据传输和降低无线网络拥塞非常重要,对于实时应用和高吞吐量的应用程序也非常有用,如视频流和大文件传输。
1、背景:在传统的Wi-Fi通信中,每个成功接收的数据帧都需要发送一个ACK帧作为确认。这意味着每个数据帧都需要一个往返的确认帧,这会增加通信的时延,特别是在拥挤的网络中,这种确认帧的数量会显著增加,降低了网络的吞吐量。
2、Block Ack的引入:为了减少确认帧的数量并提高网络性能,引入了Block Ack机制。Block Ack允许接收方在单个确认帧中确认多个数据帧的接收。这意味着发送方可以在发送一组数据帧后等待单个Block Ack帧,而不是等待每个数据帧的单独确认。这显著降低了确认帧的数量。
3、Block Ack的操作:以下是Block Ack的基本操作步骤:
帧聚合:发送方将多个数据帧聚合成一个块(Block)。这个块中可以包含多个数据帧。
Block Ack请求:发送方发送一个请求(Block Ack Request)帧,请求接收方确认块中的数据帧。
Block Ack确认:接收方接收到请求后,发送一个单个的Block Ack确认帧,确认块中的所有数据帧的接收。
数据帧传输:在接收方发送Block Ack确认后,发送方可以继续传输下一块数据帧。
4、优势:Block Ack带来了几个优势:
减少确认帧数量:由于多个数据帧可以用一个Block Ack帧来确认,减少了确认帧的数量,降低了信道上的冲突和干扰。
降低时延:减少了往返确认帧的时延,提高了数据传输的效率。
提高吞吐量:通过减少空闲时间,提高了网络的吞吐量,特别是在高数据率的情况下。
5、支持的Wi-Fi标准:Block Ack最早引入到802.11n标准中,并在802.11ac和802.11ax等标准中得到改进和扩展。
但它也有一些潜在的缺陷和限制,包括以下几点:
1、支持限制:虽然Block Ack是在一些较新的Wi-Fi标准(如802.11n、802.11ac)中引入的,但不是所有的Wi-Fi设备都支持它。因此,在使用Block Ack时,需要确保所有通信的设备都支持这一机制,否则可能无法充分利用其优势。
2、配置复杂性:配置Block Ack可能需要一些额外的管理工作,包括在设备和网络上进行特定的设置。这可能会增加部署和维护的复杂性,尤其是在大型网络中。
3、误差传播:由于Block Ack确认了一组数据帧,如果其中的一个数据帧在传输过程中受到严重的干扰或丢失,整个块都需要被重新传输,即使其他数据帧没有问题。这种误差传播可能导致一定的效率损失。
4、延迟变化:在使用Block Ack时,发送方通常会等待接收到Block Ack确认后才继续发送下一组数据帧。这可能导致传输的延迟变化,特别是在网络负载变化较大的情况下。在某些应用中,这种延迟变化可能不可接受。
5、块大小选择:选择块的大小是一个挑战。较大的块可以减少确认帧的数量,但如果块中的一个数据帧出现错误,需要重新传输整个块,可能浪费带宽。较小的块可以降低误差传播的影响,但会增加确认帧的数量,可能降低性能。
6、不适用于所有应用:Block Ack适用于需要高吞吐量和较低延迟的应用,但并不是所有应用都需要这种机制。对于某些低延迟要求不高的应用,使用Block Ack可能会引入额外的复杂性而没有明显的好处。
尽管有这些潜在的缺陷和限制,无线Block Ack仍然是提高Wi-Fi网络性能和效率的有力工具。在特定的使用情境中,正确配置和使用Block Ack可以显著改善数据传输的效率和性能。然而,在部署Block Ack之前,需要仔细考虑网络的需求和设备的支持情况,以确保其能够产生所期望的好处。
下面补充一下block ack的帧结构以及每个帧结构的具体16进制字节信息和所占用的字节数:
无线Block Ack有两种关键帧类型:
Block Ack请求帧(Block Ack Request Frame):这个帧用于请求对一组数据帧的确认。它包含了需要确认的数据帧的信息,如起始序列号和结束序列号。
Block Ack确认帧(Block Ack Acknowledgment Frame):一旦接收到Block Ack请求帧,接收方可以使用这个帧来确认一组数据帧的成功接收。它通常只包含一个状态字段,指示请求是否被成功接受。
8位等于1字节。
一、Block Ack请求帧(Block Ack Request Frame)
1、帧控制字段(Frame Control Field)(16位):
帧类型(Frame Type)(2位):指示帧的类型,Block Ack使用管理帧类型。0x0840
子类型(Subtype)(4位):标识子类型,Block Ack使用不同的子类型来表示请求和确认。0x0D00
帧版本(Frame Version)(2位):指示Wi-Fi协议的版本。0x0000
保留位(Reserved)(8位):保留字段,用于未来协议扩展。0x0000
(To DS 和 From DS:指示帧是否进入或离开分布式系统(DS)。Block Ack通常在DS模式下使用)
To DS (到分布系统): 如果为 1,表示数据传输至分布系统。通常用于基于基础设施的网络。
From DS (来自分布系统): 如果为 1,表示数据来自分布系统。也通常用于基于基础设施的网络。
More Fragments (更多分片): 用于指示是否还有更多的分片帧需要传输。
Retry (重试): 指示是否为重试的帧。
2、持续时间/ID字段(Duration/ID Field)(16位):
持续时间(Duration)(16位):指示帧的持续时间,通常用于网络管理。例如0x0000。
接收者地址(Receiver Address)(48位):接收Block Ack的设备的MAC地址。,例如0x001122334455。
传输者地址(Transmitter Address)(48位):发送Block Ack请求的设备的MAC地址。,例如0xAABBCCDDEEFF。
3、帧体(Frame Body)(长度可变):
帧体包含Block Ack的相关信息。具体内容取决于帧的类型。例如,Block Ack请求帧将包含需要确认的一组数据帧的序列号,Fragment Number (分片编号)。如Block Ack请求信息,包括:
起始序列号(Start Sequence Number):例如0x0001,指示待确认数据帧序列的起始序列号。
结束序列号(End Sequence Number):例如0x0005,指示待确认数据帧序列的结束序列号。
选择性ACK字段(Selective ACK):用于选择性确认某些数据帧。具体字节数取决于要确认的数据帧数量和序列号。
4、Block Ack Request Control (Block Ack 请求控制): 这是一个特定于 Block Ack 请求的字段,通常包括以下信息:
Block Ack Policy (Block Ack 政策): 指示是使用立即 Block Ack 还是延迟 Block Ack。
TID (传输标识符): 指示哪个数据流的 Block Ack 请求。
Reserved (保留位): 保留字段,通常为 0。
5、Block Ack Timeout Value (Block Ack 超时值): 指示 Block Ack 超时的时间,即 Block Ack 请求的有效期。
6、FCS字段(Frame Check Sequence Field,帧校验序列字段)(32位):
FCS字段包含帧的CRC完整性校验(循环冗余校验),用于检测数据传输中的错误。
二、Block Ack确认帧(Block Ack Acknowledgment Frame)
整体上和请求帧差不多,但
帧类型:0x0840
子类型:0x0E00
帧体是状态字段(Status):指示Block Ack请求的状态。通常,这个字段占用了18位,但具体大小可能会根据使用的协议版本而变化。
总字节数:帧控制字段(2字节) + 持续时间/ID字段(2字节) + 接收者地址字段(6字节) + 传输者地址字段(6字节) + 帧体(可变长度) + FCS字段(4字节)。
需要注意的是,帧体的长度会根据Block Ack请求帧和Block Ack确认帧的具体信息而变化,因为Block Ack请求帧包含需要确认的数据帧的信息,而Block Ack确认帧包含请求的状态信息。