802.11 MAC层
1. 介绍
本文主要介绍了802.11 MAC层
2. 访问机制
CSMA/CA: Carrier Sense Multiple Access with Collision Avoidance
WiFi采用带冲突避免的载波监听多路访问机制来控制对传输媒介的访问
不同于以太网,WiFi没有明确的冲突碰撞检测机制
WiFi MAC层指定了如下规则来检测冲突碰撞
- 使用介质前,speaker必须指示将使用多久,通知其他潜在speakers在使用介质所需要等待的时间 - 直到前一个speaker指示的时间后,其他speaker才能使用介质 - 当收到肯定确认后,speaker才认为数据成功传输 - If two participants happen to start speaking at the same time, they are unaware they are speaking over each other. The speakers determine they are speaking over each other because they do not receive confirmation that their voices were heard. - 当发送的数据没有收到肯定确认时,speaker会等待一个随机时间然后再次使用介质发送没有成功的数据
当没有收到肯定确认时,WiFi MAC层认为检测到了碰撞
3. MAC层功能
MAC子层包括DCF和PCF
- DCF: Distributed Coordination Function
- PCF: Point Coordination Function
3.1 载波监听
STA有两种方法来判断当前介质是否空闲
- 检查PHY层,是否有载(Carrier)存在
- 使用虚拟载波监听(Carrier Sense)功能,NAV(Network Allocation Vector )
NAV是MAC层提供的一种定时器,保存了其他STA使用介质的持续时间
其他STA发送的数据中带有的Duration大于所保存的时间时,STA就更新自己的NAV
当NAV为0并且PHY层指示当前介质可用时,STA才能发送数据
3.2 DCF
DCF是基于CSMA/CA的接入方法,尽可能避免冲突,可以自动高效地共享介质
DCF提供基本模式和RTS/CTS模式两种介质访问方式
利用竞争窗口的二进制指数回退机制协调多个STA对共享链路的访问,避免出现因争抢介质而无法通信的情况
其核心思想是利用二进制指数回退机制减轻数据分组的碰撞以及实现发生碰撞后对分组的有限重传控制
STA发送数据帧时,首先检测介质的状态
如果介质空闲且持续一个DIFS时间(DCF InterFrame Space)后
- 在基本模式下立即发送数据帧
- 在RTS/CTS模式下,发送RTS帧
并同时检测有没有发生分组碰撞
如果发生碰撞,STA随机在[0,Wi]之间均匀选取一个值Random()
ØWi被称作竞争窗口,其大小依赖于数据分组重新传输次数
CWmin ≤CW≤CWmax
并计算出backoff timer(=Random() * slot time)
随后,当STA探测到介质空闲时间等于一个slot time时,计数器减1;而当检测到介质忙时,计数器值保持不变
并在介质空闲时间等于DIFS时,重新激活延时计数器且STA继续监测介质;直到计数器值减到0时STA才发送MAC帧
另外,为了避免某STA长时间占用信道,STA在两次连续的数据帧发送之间也必须进行随机延迟
3.3 应答帧
某些帧需要接收STA回应一个应答帧,称为ACK帧;ACK帧的传输不需要等待backoff timer
而是等待SIFS(Short Interframe Space)时间;SIFS通常比DIFS少2个slot time
3.4 RTS/CTS
RTS: Request to send;CTS: Clear to send由于信号的缘故(距离太远),某些STA之间无法直接通信,无法感知彼此的存在,
若此时同时给处于两者之间的STA发送帧,导致中间STA佷尴尬
因为只有中间STA知道发生了冲突;此时,需要使用RTS/CTS来解决该问题
STA发送RTS帧,预约介质的使用权和要求接收STA保持沉默
接收STA以CTS应答,CTS帧要求附近的STA保持沉默直到过程结束
然后开始帧的传输过程
RTS/CTS通常用在高用量的环境下以及传输竞争比较显著的场合
3.5 帧分片
帧分片(Frame Fragmentation)的作用在于提高无线介质中传输的可靠性
将一个完整帧分为几个更小的帧来分别传输,每个分片帧都需要ACK
这样当某个分片帧出现错误时,只需要重新传输该帧即可
然而这也可能增加MAC层过载问题(Overhead)
注意:
- 帧分片只发生在单播帧中
- 每个分片帧具有相同的帧序列号和递增的帧编号
3.6 PCF
PCF作为DCF的补充,是一种可选的介质访问机制
提供了不必通过竞争即可使用介质的服务,为了满足实时业务需求
用于Infrastructure模式网络架构中,由AP进行协调
PCF以周期的形式进行帧的传输
每个周期包括一个无竞争阶段和一个竞争阶段
- 无竞争阶段(CFP: Contention-Free Period)
- 竞争阶段(CP: Contention Period)
CFP阶段传输实时业务,PCF起作用
CP阶段传输非实时业务,DCF起作用
4. MAC帧格式
MAC帧基本格式如下图所示:
4.1 Frame Control字段
Frame Control各字段含义如下
- Protocol Version: 目前为0 - Type: 帧类别, 有下面三种, 每个类别又有一些子类别(见Subtype) - Subtype: 帧子类别, 与Type共同来决定一个帧的类型, 详细如下表所示 - To DS/From DS: 指示帧目的地是否为DS(分布式系统), 可以简单地理解为是否【发往/来自】AP - More fragments: 指示是否还有分片(除去最后一个分片) - Retry: 指示当前帧是否为重传帧, 接收方收到后会删掉重复帧 - Power management: 指示STA的电源管理模式, 1表示STA在数据交换完成后进入省电模式, 对于AP恒为0 - More data: 指示AP为进入省电模式的STA进行帧缓存(来自DS) - WEP: 指示frame body是否使用WEP加密 - Order: 指示将进行严格次序(StrictlyOrdered)传送
Type的取值如下
- 00: 管理帧(Management Frame) - 01: 控制帧(Control Frame) - 10: 数据帧(Data Frame) - 11: 保留未使用
Subtype取值如下
To DS/From DS取值如下
4.2 其他字段
MAC帧其他字段含义如下
- Duration/ID: 持续时间/ID字段 - Address: 由帧类型决定使用哪几个地址字段, 通常有三个, SA、DA和BSSID - Sequence Control: 包含两个子字段, 4位的分片编号(Fragment Number)和12位的顺序编号(Sequence Number) - Frame Body: 帧主体也称数据字段(Data field), 用于传递上层有效载荷(Payload), 可为0 - FCS: 帧校验序列, 采用循环冗余校验(CRC)码, 计算范围包括MAC头中所有字段及帧主体
Duration/ID可以用在下面三个场景中
- Duration第15位置0, 用于设定NAV, 数值代表预计使用介质的微秒数 - 在CFP帧中, 第14位置0, 第15位置1, 其他值为0, 字段值为32768, 让其他没有收到Beacon帧的STA公告无竞争周期 - 在PS-Poll帧中, 第14、15位同时置1, 用于从省电模式醒来的STA发送AID(关联标识符)以取得在AP中的缓存帧
Address有如下五种类型
- BSSID, 基本服务集标识符
- DA, 目的地址
- SA, 源地址
- RA, 接收端地址
- TA, 发送端地址
Sequence Control格式如下,顺序编号4096的模数,从0开始,每处理一个上层封包就加1
若上层封包分片处理,所有帧分片采用相同顺序编号;对于重传帧,顺序编号不变
4.3 帧主体数据
不同于以太网,802.11的Frame Body以802.2的逻辑链路控制(LLC)来封装不同类型的网络协议
有两种封装方式: RFC 1042、802.1H
下图是802.11里的IP封装
5. MAC帧类型
主要有如下几种类型帧
- 管理帧(Management Frame) - 控制帧(Control Frame) - 数据帧(Data Frame)
5.1 管理帧
管理帧的基本结构如下图
5.1.1 Beacon帧
Beacon帧的主体部分如下
5.1.2 ATIM帧
ATIM即IBSS Announcement Traffic Indication Message;其主体部分为空
5.1.3 Disassociation帧
5.1.4 Association Request帧
5.1.5 Association Response帧
5.1.6 Reassociation Request帧
5.1.7 Reassociation Response帧
5.1.8 Probe Request帧
5.1.9 Probe Response帧
5.1.10 Authentication帧
5.1.11 Deauthentication帧
5.2 控制帧
5.2.1 RTS帧
5.2.2 CTS帧
5.2.3 ACK帧
5.2.4 PS-Poll帧
PS-Poll,即Power-Save Poll
5.2.5 CF-End帧
5.2.6 CF-End + CF-Ack帧
5.3 数据帧
数据帧MAC头如下
其中Address字段由To DS/From DS位来决定
6. MAC层操作集
802.11从管理上可分为三个组件
- MAC层管理实体: MLME(MAC Layer Management Entity) - 物理层管理实体: PLME(Physical Layer Management Entity) - 系统管理实体: SME(System Management Entity)
MAC层操作集包括: 扫描、认证、关联及省电状态
6.1 扫描
扫描(Scanning)的目的在于STA发现所在区域中的无线网络
扫描有两种
- 被动扫描: Passive Scanning, STA在信道列表(Channel List)间不断切换等待Beacon帧到来, 记录收到的信息
- 主动扫描: Active Scanning, STA在每个信道上发出Probo Request帧请求某个特定的网络予以响应
扫描的结果则是获取到如下信息
- BSSID - SSID - BSSType - Beacon intercal, 信标间隔 - DTIM period, DTIM周期 - Timing parameter, 定时参数 - Phy参数、CF参数、IBSS参数 - BSSBasicRateSet, 基本速率集
6.2 认证
扫描完成后,STA会选择某个SSID进行关联,关联之前则需要先进行认证(Authentication)过程
认证有两种模式
- 开放系统身份验证(Open System Authentication)
- 共享密钥身份验证(Shared Key Authentication), 即WEP
若身份验证失败,STA将收到AP发来的取消关联(Deauthentication)帧
6.3 关联
完成身份验证后,STA就可以和AP进行关联(Association),以获得网络的访问权
关键参数如下
- Listen interval, 用于省电模式中,由STA提供给AP - SSID element, 指示STA所关联AP的SSID - Support rates element, 指示STA所支持的速率
6.4 重新关联
重新关联(Reassociation)的目的在于从关联关系从一个AP转至新的AP,和关联过程大体相同
6.5 省电模式
省电模式(Power Save)有两种类别
- Unicast frame operation
- Multicast/broadcast frame operation