空闲信道评估(CCA)是指无线节点在物理层倾听802.11射频传输媒介,并在传输前要求媒介必须保持空闲。物理载波侦听的问题在于并非所有节点都可以互相侦听到对方。请时刻牢记无线传输媒介的半双工特性,在任何给定的时间,只有一个无线射频卡可以发送帧。如果一个客户端在执行完CCA后,并没有侦听到其他正在传输的无线节点,会发生什么事情哪?如果无线节点在执行CCA的过程中没有检测到任何射频能量,它便会开始传输。两个节点同时传输的结果就是帧发生碰撞破坏,重传将会发生。当某客户端被接入点听到,但没有被BSS中的其他客户端听到,就会出现隐藏节点(hiddnen node)问题。客户端互相听不到对方,因此会同时传输。接入点如果听到两路相互干扰的传输信号,入向的传入就会失败。
图12-12显示了接入点的覆盖范围。请注意,一堵厚墙位于某客户端和所有其他客户端之间,这些客户端均与接入点关联。即使所有节点都可以听到接入点发出的传输信号,但这个单独的客户端的传输信号不能被所有其他节点“听到”,这个不能被“听到”的无线节点就是隐藏节点。每次隐藏节点传输信号,而其他节点之一也同时传输时就会发生冲突。隐藏节点会持续与在空闲信道评估过程中没有探测到该隐藏节点的所有节点发生碰撞。持续的冲突导致第2层重传,最终结果是吞吐量下降。隐藏节点可能使重传率达15%-20%,甚至更高。重传当然也会影响吞吐量,产生延迟和抖动等问题。(至此,我要纠正很多初学者认为“工作站只与路由接入点单点通讯”的误区,各个工作站之间也是有相应的协议互相协调工作)
拙劣的无线局域网设计或因为障碍物(如新建墙体或新安装的书架等)的影响都可能会导致隐藏节点问题。用户移动到某障碍物之后可能会导致隐藏节点问题。VowiFi电话往往也会成为隐藏节点,因为用户会考虑去安静的角落或地区接听电话,而在那些地方电话的射频信号无法被其他客户端侦听到。台式机用户通常将无线网卡置于金属桌子的底部,这很容易将诊无线网卡转换成不为所知的隐藏节点。
隐藏节点在两个客户端位于RF覆盖蜂窝的两端时,有时也会发生,因为它们互相听不到对方,如图12-13所示。这在接入点发射功率过大导致更大的覆盖范围时经常发生。通常推荐禁用接入点2.4GHz射频卡的1Mbps和2Mbps数据传输率以满足无线接入容量的目的。禁用这些数据速率的另一个原因是2.4GHz的1Mbps和2Mbps的覆盖蜂窝相当大,通常会导致隐藏节点。如果隐藏节点问题发生,可能需要RTS/CTS机制。
你是如何解决隐藏节点问题的?如果终端用户抱怨吞吐量下降,可能的原因之一就是隐藏节点。协议分析仪在确定隐藏节点问题时,是一个很有用的工具。如果协议分析仪显示某客户端比其他客户端重传率更高,隐藏节点就很可能存在。某些协议分析仪甚至可以基于重传阈值产生隐藏节点警报。
另一种方法是使用请求发送/清除发送顿(RTSCTS)来诊断问题。为此可以尝试降低RTS/CTS阈值到约500字节。这个数值可以根据通信类型进行调整。例如,如果部署在仓库环境中的终端仿真应用存在隐藏节点问题,此时RTS/CTS阈值应设置为更小的值,如50字节。协议分析仪可用来确定这一阙值。图12-15描述的是隐藏节点启用RTS/CTS交换的过程。
障碍物另一边的无线终端可能听不到隐藏节点发出的RTS顿,但可以听到AP发出的CTS帧。接收到CTS帧的无线终端将重置其NAV值,确保这段时间隐藏节点可以传输数据顿并接收ACK帧,在隐藏节点上执行RTS/CTS可以预留传输媒介并强制所有其他无线节点暂停传输,碰撞和重传将会因此减少。隐藏节点导致的碰撞和重传将使吞叶量降低。启用RTS/CTS机制通常也会降低吞吐量。但是,如果在被怀疑的隐藏节点上执行RTS/CTS,吞吐量有可能因为碰撞和重传的减少而增加1。如果被怀疑的隐藏节点在启用RTSCTS后吞吐量反而增加,证明隐藏节点确实存在。RTS/CTS通常不应被视为解决隐藏节点的方法,RTS/CTS只能临时解决隐藏节点问题,通常只用于诊断。但针对点到多点桥接(PIMP)是个例外。 PMP方案中的非根网桥因为相隔很远,互相不能听到对方,RTS/CTS应该部署在非根网桥上以消除因不能听到对方而产生的隐藏节点问题带来的冲突。
解决隐藏节点问题的方法:
使用协议分析仪或RTS/CTS进行隐藏节点问题诊断。 RTS/CTS还可用作临时解决隐藏节点问题的方法。
大多数客户端具备固定的传输功率。但是,如果客户端的输出功率可以调整,增大发射功率可以增加客户端的传输范围。客户端互相听到对方的可能性就会随之增加。但是这不是推荐的解决方案,最佳实践是要求BSS中的所有无线节点具备相同的传输功率。
如果确定某种形式的障碍物阻止客户端互相听到对方,简单的消除障碍物就可以解决这个问题。很明显,你不能随意拆除一堵墙,但如果障碍物是一张金属桌子或一个文件柜,可以将它简单换个地方就可以解决这个问题。
如果一个或两个无线终端无法被其他节点侦听到,只需将其移动到其他节点的传输范围内,就可以解决这个问题。
添加新的接入点是解决隐藏节点问题最好的办法。如果无法移动隐藏节点,那么就在隐藏节点所在区域添加一个新的接入点即可纠正这个问题。