无线网络技术原理、应用和实践:(六)隐藏节点和暴露节点
隐藏节点(Hidden Node Problem/Hidden Terminal Problem):
隐藏节点问题是无线局域网主要考虑的问题,严重影响到无线网络的性能。
隐藏节点是指在接收者的通信范围内而在发送者的通信范围外的终端,当某节点发送数据,而它的通信范围之外的节点感知不到有节点在发送数据,从而可能会造成冲突。可以简单描述为节点之间无法互相监听对方。但当其不可以同时传输时,其同时传输,从而导致冲突发生。隐藏节点在单个AP(或者单个Receiver)时就有可能发生。隐藏节点和暴露节点都是由于CSMA/CA中所采用的LBT机制所引起。
※CSMA/CA:载波侦听多路访问/冲突避免(Carrier Sence Multiple Access/Collsion Avoidance)
※LBT:先听后发(Listen Before Talk)
情形1:同AP下终端不可见
图中A与B为两个节点,均关联在AP上。由于图中A与B发送范围无法互相覆盖,即无法通过物理载波监听的方法,探测对方是否有发送数据。从而A与B可能会误以为信道空闲,从而同时发送,继而造成冲突,最终导致这一轮传输失败。这一轮失败之后,A与B采用BEB算法重新选择随机数进行回退,但是由于两者没有办法互相监听,所以很容易再次出现同时传输的现象。所以在隐藏节点的情况下,网络性能最差时是无法传递数据包的,换言之,A与B的吞吐量都趋近于0。
在无线网络中,由隐藏节点所导致的碰撞问题相当难以监听,因为无线收发器是半双工工作模式,即无法同时收发数据。
在高密度部署的网络中,可能存在众多的AP和STA,由于复杂的无线环境,很多的设备之间可能构成隐藏节点,或者相互之间的信号可见度比较低,造成干扰多、竞争机制效率下降、重传次数增多,又反过来恶化了整个WLAN网络的应用。
情形2:同频AP间重叠覆盖
图中两个AP存在交叉覆盖区域,但AP间无法侦测彼此信号,即监测部件不在另一AP覆盖区域内,在交叉覆盖区域内存在用户时,AP因为无法监测另一个AP的信号发送情况而同时向终端发送数据,在终端侧形成冲突。
※全重叠覆盖与半重叠覆盖:两个相邻AP的工作信道相同,当AP处于全重叠覆盖状态时,相互间能够侦测对方的行为,两者此时以自由竞争形势占用信道,发生碰撞现象较小;当两个AP处于半重叠覆盖状态时,无法发挥802.11中MAC的监听机制,AP间无法侦测由于对方行为而导致的信道占用,导致AP在同一时间向同一信道发送数据,造成干扰区内碰撞率急剧上升,网络的整体效能急剧下降。
易导致隐藏节点的覆盖方式:
1)室外覆盖室内
2)室分合路覆盖
※不正确的覆盖方式会带来隐藏节点问题,如果用户数量不多,隐藏节点效应不明显,用户勉强可以使用网络;如果网络中用户很多,隐藏节点效应会更加凸显,网络中会有大量的冲突和由于冲突导致的重传报文,大幅度降低网络吞吐量,用户网络体验很差。
隐藏节点问题在以用户容量为覆盖原则的蜂窝式覆盖环境中已经不明显,因为为了满足大量用户使用,AP需要降低功率,以保证AP的高密度部署不会干扰。AP降低功率就减少了AP覆盖范围,同时接入该AP的终端也不会存在由于相对距离比较远导致互为隐藏节点的问题了。但是一些用户由于投资预算问题或对WLAN技术不够了解采用一些不科学的方法扩大AP覆盖区域从而导致覆盖区域内隐藏节点问题更加严重,网络性能大量下降。
暴露节点:
暴露节点是指在发送者的通信范围内而在接收者的通信范围外的终端。暴露节点由于听到发送者的发送而延迟发送,但因为它在接收者的通信范围之外,它的发送实际上并不会造成冲突,从而造成不必要的延迟。
暴露节点问题可以简单定义为:节点之间能够互相监听对方。但其可以同时传输时,其不传输,从而造成浪费。暴露节点在多个AP(或者多个Receiver)时才有可能发生。
图中AP1处于A的覆盖范围内,而不在B的覆盖范围内。AP2处于B的覆盖范围,而不在A的覆盖范围内。换言之,AP1只能接受到A的数据,AP2也只能接收到B的数据。当A与B同时发送时,接受节点AP1或者AP2处均不会发生冲突,故其是可以同时传输的。但是由于这样的拓扑特殊性以及DCF中CSMA/CA的工作机制,造成A与B无法同时传输,该问题则是暴露节点问题。
在CSMA/CA中,接入是遵守LBT(Listen Before Talk)机制的,其中信道空闲与否是通过载波监听机制进行判断的,而在DCF中,存在物理载波监听和虚拟载波监听两种模式,这两种监听方式都有可能引起暴露节点问题。
1)物理载波监听引起的暴露节点:
由于A与B可以互相监听。但B选择了较小的随机数进行倒数,从而其最先倒数至0,并进行发送。当B首先发送数据包给AP2后,A监听信道为忙状态,从而无法发送信息。故根据拓扑而言,A是可以传数据给AP1的,但是由于监听B正在传输,导致信道忙,故A悬挂随机倒数计数器,无法继续倒数,从而无法传输。
※在CSMA/CD中,实际上是没有悬挂过程的,只有在CSMA/CA中才存在。在CSMA/CD中,若信道忙,节点就不停的去监听信道,一旦发现空闲就传输。而在CSMA/CA中,节点在中间实际上不是监听信道,而是接收数据。其主要原因在于,A在检测到B正在传输造成信道忙时,其立刻开始接收该B的数据,因为A不知道该数据是否是发给自己的。只有当完整接收数据,CRC校验通过后,A才可以检查帧MAC头部所对应的目的BSSID地址,看是否是自己的数据包,若不是才可以丢包。换言之,CSMA/CA中,悬挂实际上是为了接收,从而导致的现象是悬挂而已。
2)虚拟载波监听引起的暴露节点:
在暴露终端场景中,若B不仅选择了较小的随机数进行优先倒数,并且其发送的数据包是RTS数据包。当A识别到该RTS数据包后,其就会被设置为NAV状态,无法在后面的过程主动竞争信道,进而无法传输。与之前描述用RTS/CTS解决隐藏终端问题时不同,在解决隐藏终端问题中,NAV是由AP所反馈的CTS帧所进行保护。而这里由于A与B能够互相监听,换言之,在暴露终端情况下,A的NAV是被B所发送的RTS帧进行保护的。在A被NAV保护后,其也无法传输,最终导致暴露终端问题。
解决隐藏节点&暴露节点的方法:
1)开启“请求发送/信道清除 (RTS/CTS)”的 CSMA/CA 功能:
每次发送报文前,通信双方先使用控制报文进行握手,其他听到回应握手信号的节点必须延迟发送。但启用该功能,可能造成单个AP的性能有大约10%的下降。
开启 RTS/CTS 的目的是允许在客户端和接入点之间进行协商,接入点会为请求客户站分配完成发射所需的介质。为了防止碰撞发生,802.11 允许工作站使用请求发送(RTS)和允许发送(CTS)帧来清空传送区域。由于RTS与CTS帧会延长数据交易过程,因此RTS帧、CTS 帧、数据帧以及最后的应答帧均被视为相同基本连接的一部分。
RTS/CTS:请求发送/信道清除(Request To Send/Clear To Send,RTS/CTS)
RTS:即请求发送帧。RTS帧是一个单播帧,没有加密,其duration字段中填充包含后续发送过程中总体所需要时间。
CTS:即信道清除帧。节点在收到CTS后,确认信道是空闲的,可以发送。CTS也是一个单播帧,没有加密,其duration字段包含除去RTS以及一个SIFS后,发送过程总体所需要时间。
RTS帧本身带有两个目的:预约无线链路的使用权,并要求接收到这一消息的其他的工作站停止发言。一旦收到RTS 帧,接收端会以CTS帧应答。和RTS帧一样,CTS帧也会令附近的工作站保持沉默。整个RTS/CTS 传输过程会用到好几个帧,实际开始传输数据之前的延迟也会消耗相当的频宽。因此,它通常只用在高用量的环境,以及传输竞争比较显著的场合。对低用量的环境而言,通常无此必要。
★在单信道条件下使用控制分组的方法只能解决隐发送节点,不能解决隐接收端和暴露节点的问题。为此,必须采用双信道的方法,利用数据信道收发数据信号,利用控制信道收发控制信号。
★但在实际应用中,802.11协议将是否使用RTS/CTS门限的权利下放给了每个终端,由终端自己决定是否使用这个机制,在实际使用中,用户很少会去配置这个功能,因此RTS/CTS实际效用不大,很多终端缺省设置为不采用。
2)功率控制方法:
基于功率控制的方法是根据双方的距离、能量损失因子等因素,决定最佳发送功率,控制发送范围,使受干扰范围减到最小程度,从而消除部分隐藏节点和暴露节点问题的一种方法。
3)基于定向天线的方法:
由于全向发送接收模式对于天线范围内的其他节点产生了不同程度的干扰,定向天线由于天线的导向功能、自适应波束成形等优势,能把发送接收波束限制在一定宽度,使主波束直接对准通信节点,增大节点之间的连通度,使干扰范围变小。使隐藏节点和暴露节点的问题得以减轻。但因为定向天线的定向性,也带来了定向隐藏节点和聋节点等新的问题。