802.11无线网络权威指南(二):无线帧结构
- 无线协议桢的三种类型
- 无线网络帧结构
- 完整帧格式
- control frame
- Duration/ID
- Address
- Sequence Control
- QoS Control
- HT Control 字段
- Frame Body 帧体
- FCS 校验域
- 帧细节
- 管理帧
- 控制帧
- RTS 帧
- CTS 帧
- ACK 帧格式
- PS-POLL省电轮询
- 数据帧
无线协议桢的三种类型
类型和字段定义了无线网络的三种类型,分别是:
-
管理帧(Management frames)
维护接入点和无线客户端之间的通信,管理该框架拥有以下子类型:
Authentication 身份认证帧
De-authentication 解除认证帧
Association Request 关联请求帧
Association Response 关联回应帧
Reassociation Request 重新关联请求帧
Reassociation Response 重新关联回应帧
Disassociation 解除关联帧
Beacon 信标帧
Probe Request 探测请求帧
Probe Response 探测响应帧
ATIM帧 -
控制帧(Control frames)
负责客户端和接入点的数据交换,类型为:
RTS帧(Request to Send)
CTS帧(Clear to Send)
ACK帧(Acknowledgement) -
数据帧(Data frames)
这些不同类别的数据包被统称为数据包类型。
解释几个比较难理解的帧:
beacon 帧:由AP以一定的时间间隔周期性发出,以此来告诉外界自己无线网络的存在,相当于广播。
RTS 帧:发送数据之前的请求帧。
CTS 帧:由接收方发出,用于确认可以接收数据包,并通过广播方式通知其他设备不要发送数据包,以确保接收方能够正常接收。
RTS/CTS 的流程:
a. RTS/CTS 是用来解决传送大的数据包前的信道预约功能,由程序中设定的门限值来控制的;超过该门限值的数据帧由 RTS/CTS 先行清空介质,而较小的帧则直接传送,不需要发送。
b. 发送大数据前,先向AP路由发送RTS请求占用信道;
c. AP收到后广播发出CTS,告知所有设备;
d. 设备收到CTS和ACK后即可开始发送大的数据帧。
按照书里的描述:RTS/CTS技术是一种用于解决无线网络中的信号冲突问题的方法。在无线网络中,当多个设备同时发送信号时,会发生信号碰撞,导致数据包损坏和传输延迟增加。RTS/CTS技术通过引入两个新的控制帧,即RTS帧和CTS帧,来协调发送方和接收方之间的通信,有效减少信号冲突,提高网络传输效率。
ATIM帧:(Announcement Traffic Indication Message)是WLAN中用于通知处于休眠状态的接收者有信息待传的一种管理帧。
无线网络帧结构
完整帧格式
Control frames | Duration/ID | adress1 | adress2 | adress3 | Sequence control | adress4 | QoS control | HT control | Frame Body | FCS |
---|
完整的帧共分三大部分:
- 802.11 协议MAC头部分
- Frame Body(帧体部分)
- FCS帧校验
control frame
Protocol | Type | Sub type | To DS | From DS | More Flag | Retry | Pwr Mgmt | More Data | protected frame | Order |
---|---|---|---|---|---|---|---|---|---|---|
2bit | 2bit | 4bit | 1bit | 1bit | 1bit | 1bit | 1bit | 1bit | 1bit | 1bit |
-
Protocol:表示802.11协议版本,目前802.11数据帧有两个版本:0或1;
-
Type:802.11 帧的类型,3类;
-
Sub type:802.11帧的子类型,后面讲;
-
To DS 和From DS:这两个位用来指示帧的目的地是否为分布式系统。在基础结构型网络里,每个帧都会设定一个DS位(其中DS为Ap或DS系统);
To DS 和 From DS 取值 | 含义 |
---|---|
To DS = 0 From DS = 0 | 1.同一IBSS中,从一个STA到另一个STA;2.同一个BSS中,从一个非 AP 的STA到另一个非AP的STA或者BSS外部 |
To DS =1 From DS = 0 | 代表发送给DS或AP的MAC帧;发往DS的帧必须通过AP转发 |
To DS =0 From DS = 1 | 代表来自DS或AP的数据帧 |
To DS =1 From DS = 1 | 仅 Mesh BSS 支持 |
- More Frag:表示该帧是否有更多的分片;
- Retry:表示该帧是否需要重传;
- Pwr Mgt:
1: 表示STA在发送完本帧后,将关闭天线处于休眠状态;
0:表示处理工作状态
(说明:AP不允许休眠,只有STA可以,因此AP发送的数据帧该字段恒为0) - More Data:
1:至少还有一个数据帧要发送给STA;
0:此帧已经发送完成;(说明:此bit只用于管理数据帧,在控制帧中此bit恒为0) - Protected Frame:
1:表示该帧受到链路层安全协议的保护;否则为0; - Order:
1:长帧分段传送采用严格编号方式;否则为0。
Duration/ID
Duration / ID 是持续时间和ID位,共有16bit,根据第14bit和15bit的取值组合,有以下三种类型的含义:
- 当第15bit被设置为0时,该字段就会被用来设定NAV值,表明该帧和它的确认帧将会占用信道多长时间(单位为微秒);工作站必须监视所收到的任何帧头并据此更新NAV(0 - 32767)。
- 当第15bit被设置为1,第14bit为0时,该字段用于无竞争周期(CFP)中,该值被解读为NAV(固定为32768),它让没收到beacon的所有工作站都得以公告无竞争周期;
- 当第15bit被设置为1,第14bit为1时,用于PS-Poll帧,PS中的工作站会定期醒来,此时会发送一个PS-Poll,其中有关联标识符(AID),以表示其所属的BSS。(值范围为:1 - 2007)
Address
一个802.11帧最多包含4个Address。因随着帧类型的不同,这些字段的作用也有所差异。分别为:
- SA:源地址
- DA:目的地址
- TA:传输工作站地址
- RA:接收工作站地址
SA与DA必不可少,后两个只对跨BSS的通信有用。
目的地址可以为单播地址(Unicast address)、多播地址(Multicast address)、广播地址(Broadcast address)。
- 如果传送给实际媒介的第一个位为0,则该地址为单播(unicast);
- 如果第一位为1,则该地址为组播(multicast);
- 如果所有的位均为1,则该地址为广播(broadcast)。
802.11帧中Address字段含义根据帧的不同而不同,具体如下表所示:
网络类型 | Address1(接收端) | Address2(发送端) | Address3 | Address4 |
---|---|---|---|---|
IBSS | DA | SA | BSSID | 未使用 |
To AP | BSSID | SA | DA | 未使用 |
From AP | DA | BSSID | SA | 未使用 |
以下为To DS和From DS字段和Address字段 间的关系的使用场景:
Sequence Control
序列控制域。 共16位,前4位代表片段编号(Fragment Number),后12位为帧顺序编号(Sequence Number),域格式如图下所示。
-
sequence number:当上层帧交付到MAC层传送时,会被赋予一个 sequence number。
a. 相当于已传帧的计数器取 4096 的模;此计数器由 0 起算,MAC每处理一个上层封包就会加1;
b. 如果上层封包被分片处理, 所有帧片段(Fragment Number)都会具有相同的顺序编号;
c. 如果是重传帧,则顺序编号不会累加;
d. 也是从0开始计数,如果满了以后那么循环为0,重新计数。
e. 控制帧没有帧顺序编号,重传帧不使用新的帧顺序编号。 -
Fragment Number:用于控制分片帧。如果数据量太大,则MAC层会将其分片发送。每个分片帧都有对应的分片编号, 其初始为0,每新增一次分片其会增加1;
QoS Control
QoS control是802.11e中新增的一个MAC层的字段。
Qos Control域有2个字节,QoS Control field中比较重要的字段是 TID(Traffic identifier)。
TID 值 0-7 用于具有优先权的默认 QOS 设定值,表示使用者的优先顺序(UP);
TID 值 8-15 用于自定义的QOS类型,即表示数据流ID(TSID),节点可以通过ADDTS过程和AP(WLC)协商,从而特定设置一些对应的QoS参数。
QoS control字段格式定义如下图所示,主要分几个部分:
- BIT0-BIT3:TID(Traffic identifier)业务流相关的ID号(有8种TC和8种TS数据类型);
- BIT4:标志,直接决定BIT8-BIT15的内容。有 以下几种情况:
a. EOSP:End Of Service Period。数据下行(即由AP发送),此时又分两种情况:
① AP发Null Data+CF ACK: BIT8-BIT15内容为 AP PS Buffer State;为1代表当前服务周期结束;
② AP发CF Pull包:BIT8-BIT15内容为TXOP Limit值;
b. 0:数据上行(由STA发送),BIT8-BIT15内容为TXOP Duration Request;
c. 1:数据上行(由STA发送),BIT8-BIT15内容为Queue size; - Bit5-Bit6:ACK Policy;
- Bit7:打开和关闭A-MSDU帧聚合的标志;
TID有4个Bit(B0-B3),一共可以表示16个类型,其中8个对应TC(规定的8种默认优先级类型),另外8个对应TS,TS的参数是通过STA与AP协商的。
也就是说TID不仅仅被设置为AC_BK、AC_BE、AC_VI和AC_VO,还可以使用TS进行协商。
802.11e 提供了4个不同的优先级的流量种类,当流量 MSDU 到达 802.11e 定义的MAC层时,会根据其 802.1D 的 tag 标识被分别存放到4个不同的queue里,分别是AC_VO,AC_VI,AC_BE,AC_BK,如下 图所示:
- 语音服务(Voice,AC_VO):一般为 VoIP 流量类型,对延迟最为敏感,同时也是优先级最高的流量。
- 视频服务(Video,AC_VI):视频流量的优先级低于语音服务。视频服务也是延迟敏感类型的服务,所以具有一定的优先级。
- 尽力传输(Best-effort,AC_BE):默认的无线流量类型就是best-effort类型,比如网页访问的数据流量类型。对于延迟有一定需求,但是没有那么敏感。
- 背景流量(Background,AC_BK):对于延迟要求最不敏感的流量,比如文件传输,打印作业的流量。
HT Control 字段
该字段在 802.11 的 11n 协议中引入,11ac和11ax还有点不同,先只看11n的,字段如图:
- Link Adaption Control (Bit0-Bit15)
- TRQ:Training Request.探测请求,该位设置为1请求接收者发送探测帧(sounding PPDU), 主要用于波束成形(beaming);
- MAI:MCS Request (MRQ) or ASEL Indicator。用于mcs请求或天线选择;值设置为14表示打开ASELC(天线选择控制)标志; 否则即为MCS请求,用于链路自适应动态选择最佳MCS;
- MFSI:MCS Feedback Sequence Identifier。用于调制解调方案的反馈;
- MFB/ASELC:MCS feedback and Antenna Selection Command。MAI设置为天线选择字段,说明天线选择命令和数据;否则该字段包含推荐的MCS反馈;
- Calibration Position (BIT16-BIT17):校准位置;
- Calibration Sequence (BIT18-BIT19):校准序列;
- Reserved;
- CSI/Steering (BIT22-BIT23): Beamforming feedback类型
0:No feedback required
1:CSI
2:Noncompressed beamforming
3:Compressed beamforming - NDP Announcement:设置为1表示有一个后续的NDP;
- AC Constraint:指示RD数据帧的映射AC是否被约束到单个AC
- RDG/More PPDU:Reverse Direction协议相关。当使用反向 (RD) 协议时,获得了 TXOP 的 STA 可以授予其他 STA 在同一 TXOP 内回传数据的机会,而无需响应的 STA 在传输之前竞争介质。
Frame Body 帧体
- 代表数据域, 也称为数据字段,负责传输上层有效载荷(Payload)。在802.11标准中,传输的载荷报文也被称为MSDU(MAC Service Data Unit);
- 这部分内容的长度可变,其具体存储的内容由帧类型(type)和子类型(sub type)决定;
- 根据帧类型,封装的上层数据单元长度为0~2312个字节;所以802.11帧在没有帧聚合(A-MSDU)的情况下最大长度为:2312 + 34(MAC头和CRC,不包括QoS和HT control) = 2346个字节;
FCS 校验域
包含32位循环冗余码。用于检查接收帧的完整性。类似于Ethernet中的CRC。
帧细节
Frame Control(帧控制域)中的Type(类型域)和Subtype(子类型域)共同指出帧的类型。
当Type的 Bit3 和 Bit2 位为:
00:管理帧
01:控制帧
10:数据帧
管理帧
主要用于STA与AP之间协商和连接的控制,如关联、认证、同步等。 而Subtype进一步判断帧类型,如管理帧里头细分为关联和认证帧;
Type | SubType | FrameType |
---|---|---|
00 | 0000 | Association request (连接请求) |
00 | 0001 | Association response (连接响应) |
00 | 0010 | Reassociation request(重连接请求) |
00 | 0011 | Reassociation response(重连接联响应) |
00 | 0100 | Probe request(探测请求) |
00 | 0101 | Probe response(探测响应) |
00 | 1000 | Beacon(信标,被动扫描时AP 发出,notify) |
00 | 1001 | ATIM(通知传输指示消息) |
00 | 1010 | Disassociation(解除连接,notify) |
00 | 1011 | Authentication(身份验证) |
00 | 1100 | Deauthentication(解除认证,notify) |
00 | 1101~1111 | Reserved(保留,未使用) |
控制帧
用于竞争期间的握手通信和正向确认(RTS信道预约、CTS预约成功、ACK等)、结束非竞争期等,为数据帧的发送提供辅助功能。
Type | Subtype | Frame type |
---|---|---|
01 | 1010 | Power Save(PS)- Poll(省电-轮询) |
01 | 1011 | RTS(请求发送,即: Request To Send ,预约信道,帧长20字节) |
01 | 1100 | CTS(清除发送,即:Clear To Send ,同意预约,帧长14字节) |
01 | 1101 | ACK(确认) |
01 | 1110 | CF-End(无竞争周期结束) |
01 | 1111 | CF-End(无竞争周期结束)+CF-ACK(无竞争周期确认) |
RTS 帧
RTS 帧可用来取得媒介的控制权,以便传送大型帧;大型帧是超过网卡驱动程序中 RTS threshold(阈值)的帧。
媒介访问权只能保留给单播(unicast)帧使用,而广播(broadcast)与组播(multicast)帧只是简单地传送。
RTS 帧只有帧头,不携带任何数据,帧头之后就是 FCS 帧校验码,格式如下:
RTS 帧会试图预约媒介使用权,供帧交换过程使用。因此 RTS 帧传送必须计算 RTS 帧结束后还需要多少时间用于帧交换。不过下图也明示了要 3 个 SIFS 周期、一个 CTS 持续时间、最后的 ACK 加上传送第一个帧片段所需要的时间。
RTS 帧的 duration 字段:
CTS 帧
CTS 帧有两种目的,其格式如下:
起初 CTS 帧仅用于回复 RTS 帧,如果之前没有 RTS 帧出现,就不会产生 CTS。
后来 CTS 帧被 802.11g 保护机制用来避免干扰较旧的工作站。
而用来响应 RTS 的 CTS 帧的发送端会以 RTS 帧的 duration 值作为持续时间的计算基准。RTS 帧会为整个 RTS-CTS-frame-ACK 交换过程预留媒介使用时间。
不过当 CTS 帧被传送出去后,只剩下其他未传帧或帧片段及其确认待传。CTS 帧发送端会将 RTS 帧的 duration 值减去传送 CTS 帧及其后的短帧间间隔送需要的时间,然后将计算结果置于 CTS 的 duration 字段中。
CTS 的持续时间:
ACK 帧格式
确认帧。因为无线网络的特点,很难保证数据一定会到达目的地。
为了确保数据一定到达,802.11采用确认、重传机制,即每一个数据都必须确认ACK,如果未收到ACK,发送方重新发送。
这会导致信号差的时候,重传概率加大,造成传输速度下降;
非最终ACK帧的 Duration 字段:
PS-POLL省电轮询
当一个移动工作站从省电模式中苏醒后,便会传送一个 PS-Poll 帧给接入点以取得任何缓存帧。
PS-POLL 帧:
AID:PS-Poll 帧会以 MAC 标头的第三位与第四位来代表关联标识符(association ID)。
关联标识符是接入点指定的一个数值,用来识别关联。将此标识符放入帧中,可让接入点找出为其(移动式工作站)缓存的帧。
PS-Poll 帧没有 duration,因此无法更新 NAV。
但是收到 ACK 的工作站会以短帧间间隔加上传送 ACK 信号需要的时间来更新 NAV。
数据帧
用于在竞争期和非竞争期传输数据。
一般数据帧:
这种数据帧只能在无竞争周期出现。不可能出现在 IBSS(独立基本服务集)。
另一种区分方式是对携带数据与提供管理功能的帧加以区分。
下面是数据帧的分类方式:
Type | Sub type | Frame type |
---|---|---|
10 | 0000 | Data(数据) |
10 | 0001 | Data+CF-ACK |
10 | 0010 | Data+CF-Poll |
10 | 0011 | Data+CF-ACK+CF-Poll |
10 | 0100 | Null data(无数据:未传送数据) |
10 | 0101 | CF-ACK(未传送数据) |
10 | 0110 | CF-Poll(未传送数据) |
10 | 0111 | Data+CF-ACK+CF-Poll |
10 | 1000 | Qos Data |
10 | 1001 | Qos Data + CF-ACK |
10 | 1010 | Qos Data + CF-Poll |
10 | 1011 | Qos Data + CF-ACK+ CF-Poll |
10 | 1100 | QoS Null(未传送数据) |
10 | 1101 | QoS CF-ACK(未传送数据) |
10 | 1110 | QoS CF-Poll(未传送数据) |
10 | 1111 | QoS CF-ACK+ CF-Poll(未传送数据) |
参考书:《802.11无线网络权威指南》
参考链接:https://zhuanlan.zhihu.com/p/679499856