概述
- DCF是IEEE 802.11 MAC的基本接入方法,采用CSMA/CA技术,属于节点(站点)间信道竞争方法;
- 在竞争过程中存在需要解决一些重点问题:
- 节点监听信道时,如何判断信道空闲呢?
- 节点发送数据时,如何规避数据发送冲突的问题?
- 节点发送数据时,如果控制节点发送报文的顺序?
网络分配矢量(Network Allocation Vector NAV)
- 站点(节点)可通过两种方式确定媒介(信道)是否被占用:物理载波监听与虚拟载波监听。
- 基于射频的媒介中实现物理载波监听硬件非常昂贵;
- 由于隐藏节点随处都是,物理载波监听无法提供所有必要信息;
- 因此802.11主要采用虚拟载波监听。
- 虚拟载波监听由网络分配矢量(NAV)提供。
- NAV是一个计时器,用来指定媒体还要被占用多少时间;
- 站点将NAV设为预计使用媒介的时间,其他工作站倒数NAV的值直到零,NAV不为零,代表媒介处于忙碌状态。
- 由于无线传输的特殊性(广播),即其他站点可以监听到站点发送的数据帧,802.11帧的Duration字段中会记录NAV的值,那么其他站点的NAV可以被更新(符合要求时)。
示例
- A发送一个帧给C,因为无线媒介的特点是广播,B也可接收到这个帧。
- 802.11帧包含一个duration字段,其中记载的时间足够发送完帧并收到确认帧。
- B,C将会更新它的NAV=duration字段的值(针对不同的距离范围,节点更新自身NAV的值也不同),并且在NAV倒数为0前不会尝试发送。
- 要求:工作站只会在duration字段的值大于当前NAV值时更新NAV。
帧间间隔(Inter Frame Space IFS)与优先级
- IEEE 802.11规定了一系列长度不等的帧I间间隔IFS,用于实现优先级模式,如下常用类型:
- SIFS(short IFS):最短的IFS,被用于所有的立即响应动作中。
- PIFS(point coordination function IFS,点协调功能IFS):一个中间长度的IFS,在发布轮询时,被中央控制器用于PCF模式
- DIFS(distributed coordination function IFS,分布协调功能IFS):最长的IFS,用于非同步帧的接入竞争。
DCF工作原理
DCF工作流程图
(1)如果站点有帧发送时,会监听信道是否空闲:
- 站点通过接收广播无线报文,获取报文数据帧中duration字段,当duration字段的值大于当前站点NAV值时更新NAV,在NAV倒数为0前站点不会尝试发送数据帧;
(2)如果当前站点NAV值倒数为0,表示信道空闲:
- 如果信道空闲,节点就再等待一个指定的时间DIFS(不同的帧间间隔确定了帧的优先级,优先级高的IFS有利于站点更快地发送报文);
- 如果在DIFS结束前没有监听到其他站点的发送,则计算一个随机退避时间,启动随机退避机制(随机退避机制能够减少了同一时间点上的多个工作站之间的竞争碰撞概率),设置了一个退避时间计时器,否则重复步骤(1)
(3)站点每经历一个时隙的时间就检测一次信道:
- 如果检测到信道空闲,退避计时器继续计时,否则冻结退避计时器的剩余时间,重复步骤(1)
- 如果退避计时器的时间减小到零时,就开始发送整个数据帧
(4)发送报文时,并且监听信道:
- 未监听到其他站点的报文,报文未发生碰撞,否则发送碰撞信号,记录碰撞次数(如果次数未超过16,继续尝试发送,否则判断发送失败,错误信息上报上层应用),重复步骤(1)
- 每次发送的报文数据帧中duration字段记录站点占用信道的时间,即源站点和目标站点报文交互,报文发送完成的时间;
- 如果站点报文发送完成,释放信道,信道空闲,其他站点有数据发送时,重复步骤(1)
DCF实例
(1)源站监听信道,发现信道空闲:
- 并且等待DIFS时间后,信道仍然空闲,启动随机退避定时器(时间可以设置为0),定时器倒数为0时,开始发送控制帧RTS
- 控制帧RTS中duration字段记录源站占用信道的时间(用于完成与目标站点的数据交互)
(2)由于报文属于无线广播报文,目标站点和其他站点都能收到 RTS数据帧报文:
- 目标站收到报文后:
- 通过address等字段确定是发送给自己的报文,继续解析报文、获取数据、进行业务处理,并且等待SIFS时间后,发现信道仍然空闲,发送应答控制帧CTS
- 应答控制帧CTS中duration字段同样记录目标站占用信道的时间(用于完成与源站点的数据交互)
- 其他站收到报文后:
- 通过address等字段确定不是发送给自己的报文,不继续解析报文,不应答;
- 同时获取报文数据帧中duration字段,当duration字段的值大于当前站点NAV值时更新NAV,在NAV倒数为0前站点不会尝试发送数据帧;
(3)由于报文属于无线广播报文,目标站点和其他站点都能收到 CTS数据帧报文:
- 源站收到报文后:
- 通过address等字段确定是发送给自己的报文,继续解析报文、获取数据、进行业务处理,并且等待SIFS时间后,发现信道仍然空闲,发送数据帧
- 数据帧中duration字段同样记录源站占用信道的时间(用于完成与目标站点的数据交互)
- 其他站收到报文后:
- 通过address等字段确定不是发送给自己的报文,不继续解析报文,不应答;
- 同时获取报文数据帧中duration字段,当duration字段的值大于当前站点NAV值时更新NAV,在NAV倒数为0前站点不会尝试发送数据帧;
(4)由于报文属于无线广播报文,目标站点和其他站点都能收到 数据帧报文:
- 目标站收到报文后:
- 通过address等字段确定是发送给自己的报文,继续解析报文、获取数据、进行业务处理,并且等待SIFS时间后,发现信道仍然空闲,发送应答控制帧ACK
- 应答控制帧ACK中duration字段同样记录目标站占用信道的时间(用于完成与源站点的数据交互)
- 其他站收到报文后:
- 通过address等字段确定不是发送给自己的报文,不继续解析报文,不应答;
- 同时获取报文数据帧中duration字段,当duration字段的值大于当前站点NAV值时更新NAV,在NAV倒数为0前站点不会尝试发送数据帧;
(5)此时源站和目标站完成数据交互,占用信道时间结束,其他站点同样发现信道空闲(自身NAV为0):
- 其他站监听信道,发现信道空闲,并且等待DIFS时间后,如果信道仍然空闲,启动随机退避定时器(时间可以设置为0),定时器倒数为0时,开始发送控制帧RTS
- 报文中duration字段记录其他站占用信道的时间(用于完成与目标站点的数据交互)