由802.11 隐藏节点引发的一些思考
来源:互联网 发布:js游戏开发教程 编辑:程序博客网 时间:2024/06/11 05:19
本来对隐藏节点不太清楚,查了些资料了解后,对为什么会产生隐藏节点,如何解决该问题,产生了疑问,顺便又搜了些资料,这里做了个总结。首先介绍下802.11 MAC的CSMA/CA,接着讲述下隐藏节点的分类,最后讲述下如何通过RTS/CTS来解决该问题。
一 802.11MAC层介绍
IEEE802. 11协议的MAC层的有两种控制方式:中心控制(PCF)和分布控制(DCF) ,其中以DCF为主要介质访问控制方式.DCF以CSMA/ CA为主,以RTS/ CTS消息交换机制为辅。
802.11为半双工模式,采用时分模式,因此同一冲突域内存在多个用户时,只允许1个终端或者AP发送数据,其他终端必须处于空闲监听状态。
在802.11无线局域网协议中,冲突的检测存在一定的问题,为了要检测冲突,设备必须能够一边接受数据信号一边传送数据信号,而这在无线系统中是无法办到的。DCF不提供冲突检测功能,由于无线介质的特殊性,介质上的信号的动态范围很广,所以发送站点不能有效的识别出是噪音信号还是自己的传输。所以在无线局域网中检测冲突是不现实的。802.11采用了避免冲突的方式CSMA/ CA。
以太网中的CSMA/CD和802.11中CSMA/CA的主要差别对比如下:
CSMA/CD:即载波监听多路访问/冲突检测方法
CSMA/CA:带有冲突避免的载波侦听多路访问,发送包的同时不能检测到信道上有无冲突,只能尽量‘避免’;
1.两者的传输介质不同,CSMA/CD用于总线以太,而CSMA/CA则用于无线局域网802.11b;
2.检测方式不同,CSMA/CD通过电缆中电压的变化来检测,当数据发生碰撞时,电缆中的电压就会随着发生变化;而CSMA/CA采用能量检测(ED)、载波检测(CS)和能量载波混合检测三种检测信道空闲的方式;
3.WLAN中,对某个节点来说,其刚刚发出的信号强度要远高于来自其他节点的信号强度,也就是说它自己的信号会把其他的信号给覆盖掉;
4.本节点处有冲突并不意味着在接收节点处就有冲突;
基本的CSMA/CA流程
1、首先侦听这个信道有没有STA在用
2、没人用则进行随机等待DIFS时间,有人用则自己继续侦听
3、如果在等待DIFS的时候有数据传输,则自己从新回到等待DIFS时间,并且侦听
4、等DIFS时间过后自己开始进入倒计时状态,倒计时的过程中没有数据传输则,倒计时完后自己进行数据传输
5、如果倒计时的时候有数据传输则自己继续侦听,等待其他用户发送数据,并且记录倒计
时时间,比如倒计时时间是10,STA1数到7的时候发现有STA传输数据,则自己等待其他STA发完数据后再继续进行DIFS时间等待,等完DIFS时间后进入7这个倒计时状态,来倒数,直至数完再进行数据发送。
6、不管是单个STA发送数据还是多个STA发送数据都要经过DIFS分布式帧间隔和倒数这两个时间,各个厂商wlan设备都是基于这个协议的。
CSMA/CA示例
1、STA1在进行数据传输,所以其他STA继续侦听。
2、STA1数据传输完成,但是还要传输数据则4个STA同时进入DIFS分布式帧间隔时间等待。
3、DIFS时间等待完成后4个STA开始进入倒计时状态,因为刚刚STA1已经发送过数据了,所以它的等待时间是10(随机时间10只是便于理解),而其它的STA在刚刚STA1发送数据的时候都已经进行倒数了,所以现在分别是9、3、5,这个时候当STA1倒数到7的时候STA3已经把倒数时间数完了,所以,这时候STA3开始发送数据。
4、当STA3发送完数据后,4个STA再次进入DIFS时间,完了开始进入倒计时时间,因为各自记录着自己刚刚的倒计时时间,所以,随着刚刚的时间继续到数,而STA3从10开始倒数。
5、这时STA3倒数到8的时候,STA4倒数时间已经数完,所以现在STA4开始传输数据。
6、当STA4发送完数据后,4个STA再次进入DIFS时间,完了开始进入倒计时时间,因为各自记录着自己刚刚的倒计时时间,所以,随着刚刚的时间继续到数,而STA4从10开始倒数。
7、这时STA4倒数到6的时候,STA2倒数时间已经数完,所以现在STA2开始传输数据.
二 隐藏节点
同一AP下终端间不可见
同一区域内的两个终端因相隔较远或者有屏蔽较重,而互相检测不到信号收发。可能同时发数据在AP侧形成冲突,导致数据无法正确接收
同频不可见AP间存在重叠覆盖
同频AP因为使用定向天线,或者有障碍物阻挡,且在重叠覆盖区域有终端上网。如图所示,两AP无法检测对方的信号,存在同时向重叠区域终端发送数据的可能,将在该终端产生冲突。
由隐藏节点所导致的碰撞问题相当难以监听,因为无线收发器通常是半双工工作模式,即无法同时收发数据。为了防止碰撞发生,802.11允许工作站使用请求发送(RTS)和允许发送(CTS)帧来清空传送区域。由于RTS与CTS帧会延长数据交易过程,因此RTS帧、CTS帧、数据帧以及最后的应答帧均被视为相同基本连接的一部分。
三 RTS/CTS
RTS/CTS:请求发送/清除发送,用于半双工时,收发切换。
在此机制下每个站在访问介质时在竞争窗口内随机选择一个时隙,选择时隙较早的站获得介质控制权.获得介质访问控制权的站并不是直接发送数据分组而是向接收站发送RTS帧(Ready to send) , 接收站回复CTS帧(Clear to send) ,其他非RTS帧目的站的站点接收到RTS帧之后读取其中的传输时间预留信息,也就是网络分配矢量NAV,并据此更新本地NAV.收到CTS帧的非CTS帧目的站也同样读取其中的网络分配矢量并更新本地NAV,这样无论是位于发送站传输范围的站还是位于接收站传输范围的站都能了解介质忙闲状况,解决了隐藏工作站问题.双方在成功交换RTS/CTS信号对(即完成握手)后才开始真正的数据传递,保证了多个互不可见的发送站点同时向同一接收站点发送信号时,实际只能是收到接收站点回应CTS帧的那个站点能够进行发送,避免了冲突发生。即使有冲突发生,也只是在发送RTS帧时,这种情况下,由于收不到接收站点的CTS消息,大家再回头用DCF提供的竞争机制,分配一个随机退守定时值,等待下一次介质空闲DIFS后竞争发送RTS帧,直到成功为止。
802.11中的时间间隔
IEEE802. 11中有四种帧间隔,其长度由小到大依次分别是SIFS(Short interframe space) , PIFS(PCF interframespace) , DIFS(DCF interframe space) ,EIFS(Extended interframe space).
SIFS主要用于确认或响应帧的获得介质访问权的时间间隔.
PIFS主要用于中心控制方式无竞争期的站点获得介质访问权的时间间隔.
DIFS用于分布控制方式竞争期的站点获得介质访问权的时间间隔,这种时间间隔使得工作于PCF方式下的工作站获得比工作于DCF方式下工作站享有更高的帧发送优先级.
EIFS是工作于DCF方式下用于FCS值错误导致接收数据错误的情况下作为等待时间,为接收站发送确认(ACK)帧提供足够的时间.通过不同的帧间隔,不同优先级的帧能获得相应的介质访问优先权.
退避时间算法
退避时间选取如下:
T=CW×Random() ×Slot Time
其中Random()是随机数, Slot Time是总传播时延,CW是竞争窗口,它是Slot Time的整数倍.
CW在CWmin和CWmax之间选择,当一帧进入发送缓存时CW初始化为CWmin,以后每次尝试重传后CW加倍直至CWmax。
NAV网络分配矢量
MAC控制机制利用帧格式中的持续时间(Duration)字段的保留信息实现虚拟监听协议。
由于天线半双工的工作方式和信号空间传播的复杂性,无线网络相对于有线网络更易发生冲突,这个问题在物理层难以解决. IEEE802. 11在MAC层通过使用虚拟载波监听技术解决了这个问题.每个工作站维护一个网络分配矢量NAV(Network AllocationVector) , 用NAV来指示网络的忙闲状态,每个发送站在发送帧时估计网络忙的时间,即NAV,并把这一时间信息装入帧头,其他站接收到此帧后如发现本地NAV小于此时间则利用此时间更新本地NAV.各个工作站通过这种虚拟载波监听技术和物理层的载波监听技术来判断网络的忙闲状况
其示意图如下图所示。
首先获得介质使用权的终端在等待DIFS后发送RTS信号,请求接收端回应,接收端附近的终端也会收到该信号,提取消息中NAV更新自己的NAV,知道在该段时间内有终端在信道上传输数据,故保持缄默。接收者收到消息后,经过SIFS间隔后,向发送者返回CTS(准备好接收)消息,该消息是广播的,故发送者附近的终端也能收到,并根据CTS中的NAV更新自己的NAV,在NAV表示的时间内,缄默不发数据。发送者收到CTS后,即发送数据,接收者接收到到数据后,返回ACK消息。此时所有NAV到期,重新开始竞争。
RTS/CTS总结:
1.解决了隐藏工作点带来的冲突,提高了带宽利用率.
2.利用短控制帧(RTSor CTS)的冲突代替长数据帧的冲突,提高了带宽的利用率.
3.增加的控制帧增加带宽开销.
4.预留空间传输时间可能引起的不必要带宽开销.
格式较乱,在WORD中已经排好版的,粘贴过来部门无法编辑,字体都没法改,不知道为何,见谅。
- 由802.11 隐藏节点引发的一些思考
- 由url 引发的一些思考
- 由QTP引发的一些思考
- 由使用多态引发的一些思考
- PHP:由一些小问题引发的思考
- 由循环次数设定引发的一些思考
- 由InvocationTargetException引发的思考
- 由BigDecimal引发的思考
- 由IsPostBack引发的思考
- 由InvocationTargetException引发的思考
- 由B2C引发的思考
- 由cursor引发的思考
- 由size_t引发的思考
- 由volatile引发的思考
- 由一道面试题引发的思考
- 由一个问题引发的思考
- 一个由PING引发的思考
- 由 memcpy 与 memset 引发的思考
- 数据结构之链表与数组(-)——数组和链表的简介
- css学习(二) - 五爷
- 单片机串行口
- Dictionary存储本地图片_FileInfo读取本地图片路径和名字
- ubuntu12.04 更新源(网易163)
- 由802.11 隐藏节点引发的一些思考
- SessionID的本质
- C# dataTable分页
- java面试系列题目2------转述
- 写一个函数int Func(int* A, int nSize), 使A把0移至后面,非0整数移至数组前面 并保持有序,返回值为原数据中第一个元素为0的下标。
- 安卓监听返回键,提示用户退出
- SourceInsight 操作整理
- csapp2e 家庭作业 4.47
- 深入理解HTTP协议(转)