802.11帧结构
下图显示了802.11网络的帧结构。一般802.11的网络帧都是由9个字段构成的。
802.11帧结构 |
1. Frame Control
所有的802.11帧都是由2字节的帧控制字段开始的,包括如下的字段:
- Protocol([0:1]):表示该帧所使用的MAC版本,目前只有一个版本协议编号为0。
- Type([2:3]):表示帧类型。在802.11中定义了三种帧分别是:管理帧(Type=00b)、控制帧(Type=01b)、数据帧(Type=10b)。
- Subtype([4:7]):对于Type定义的三种帧,进行了进一步的细化,详细参见表1。
- ToDs([8]):表示该帧是BSS向DS发送的帧。
- FromDs([9]):表示该帧是DS向BSS发送的帧。
- More Frag([10]):说明了长帧分包发送的情况,为1表示该帧之后还有其它帧,为0表示该帧为最后一帧。
- Retry([11]):任何重传的帧都会将此位设定为1,以协助接收端剔除重复的帧。
- Pwr Mgmt([12]):只是该帧传送结束之后,Station应采用的电源管理模式。1表示Station即将进入省电(power-save)模式, 0表示将进入激活(active)模式。
- More Data([13]):针对处于省电模式的Station,AP会将从分布系统中接收来的帧加以缓存。AP将此位置1表示至少还有一帧需要传给休眠中的Station。
- Protected Frame([14]):如果该帧经过WEP(Wired Equivalent Privacy)加密处理则置1,否则置0。
- Order([15]):在分段传送长帧的时候,将该位置1,表示接收端需要严格按照顺序处理该帧。
表1 802.11的Type和Subtype
Type | Subtype | 功能描述 |
---|---|---|
管理帧2b'00 | 4b'0000 | 关联请求(Association Request) |
4b'0001 | 关联响应(Association Response) | |
4b'0010 | 重新关联请求(Reassociation Request) | |
4b'0011 | 重新关联响应(Reassociation Response) | |
4b'0100 | 探测请求(Probe Request) | |
4b'0101 | 探测响应(Probe Response) | |
4b'1000 | 信标(Beacon) | |
4b'1001 | 通知传输指示消息(Announcement traffic indication message, ATIM) | |
4b'1010 | 取消关联(Disassociation) | |
4b'1011 | 身份验证(Authentication) | |
4b'1100 | 解除身份验证(Deauthentication) | |
控制帧2b'01 | 4b'1010 | 省电-轮询(Power Save(PS)-Poll) |
4b'1011 | 请求发送(Request to Send, RTS) | |
4b'1100 | 清除发送(Clear to Send, CTS) | |
4b'1101 | 确认接收(Acknowledgment, ACK) | |
4b'1110 | 无竞争周期结束(Contenion-Free-End, CF-End) | |
4b'1111 | CF-End + CF-ACK | |
数据帧2b'10 | 4b'0000 | 数据(Data) |
4b'0001 | Data + CF-ACK | |
4b'0010 | Data + CF-Poll | |
4b'0011 | Data + CF-ACK + CF-Poll | |
4b'0100 | 空数据(Null) | |
4b'0101 | CF-ACK(无数据传送) | |
4b'0110 | CF-Poll(无数据传送) | |
4b'0111 | Data + CF-ACK + CF-Poll | |
4b'1000 | Qos Data | |
4b'1001 | Qos Data + CF-ACK | |
4b'1010 | Qos Data + CF-Poll | |
4b'1011 | Qos Data + CF-ACK + CF-Poll | |
4b'1100 | Qos空数据(Null) | |
4b'1101 | Qos CF-ACK(无数据传送) | |
4b'1110 | Qos CF-Poll(无数据传送) | |
4b'1111 | Qos Data + CF-ACK + CF-Poll |
2. Duration ID
Frame Control之后就是Duration ID。 此字段与我们在802.11简介中介绍的媒介访问时机有重要的关系。 如下图所示,有三种形式:
Duration字段 |
- Duration设定NAV:当最高位为1b'0时,该字段就说明了当前的传送预计需要占用无线媒介多少微秒。接收到帧的Station必须根据该字段更新NAV计数。
- CFP Frames:最高两位为2'b10,其余各位为0。该字段用于无竞争周期(Contenion Free Period, CFP),它让没有收到Beacon的Station更新NAV计数为一个较大的数值。
- PS-Poll Frames:最高位为2'b11。当一个省电模式下的Station复苏后,就需要发送一个PS-Poll帧,从关联的AP获取其缓存的帧。 该字段的剩余部分记录了关联的标识符(Association ID, AID)。
3. Address字段
在802.11的帧结构中有4个Address字段,在不同类型的帧中,它们具有不同的意义。大多数情况下只会用到其中的3个地址,Address1表示接收端地址,Address2表示发送端地址, Address3常用作掩码过滤地址。比如说在基础结构网络中,Address3就常被拿来判定接收的帧是否属于关联的网络。
802.11网络的寻址方式与以太网一致,也是用48位的数据来表示一个地址。如果第一位为0,则该地址代表单一设备,也称为单播(unicast)。 如果第一位为1则代表一组Station,称为组播(multicast),如果所有位都是1的话就是广播(broadcast)的形式,发送给所有的Station。
4. Sequence Control字段
在Address字段中间有一个顺序控制(Sequence Control)字段,它由4位的片段编号(fragment number)和12位的顺序编号(sequence number)。 上层吧帧交给MAC时,就会为每一个帧赋予一个顺序编号。如果是重传帧,顺序编号是不会改变的。如果需要拆分发送,则所有的帧片段都是一样的, 它们之间的区别就在于片段编号。第一个片段编号为0,其后的各个片段的序号就会累加。
5. Frame Body字段
Frame Body字段中往往记录的是通信中实际的数据,所以该字段也是数据字段。它最多可以传送2304个字节的数据(为了能够支持WEP, 各供应商在具体实现的时候通常是支持2312个字节的数据)。802.11的LLC需要占据8个字节,因而最多可以传送2296个字节的数据。
6. FCS字段
802.11帧是以帧校验序列(Frame Check Sequence, FCS)结束的,通常是一种CSC(Cyclic Redundancy Check)校验位。 FCS用于检查接收到的帧的完整性。上层应用将要发送的帧传递给MAC,MAC会先计算FCS,然后依次将之通过射频等无限媒介发送出去。 接收端在接收到数据后也计算一次FCS,然后与接收到的FCS对比。若不一致,则在数据传送的过程中一定发生了错误。发生了错误后,就应该重传。