RTS/CTS协议如何隐藏终端问题?

定义

RTS/CTS协议,即请求发送、允许发送协议,相当于一种握手协议,主要用来解决“隐藏终端”问题。
协议精读
隐藏终端信号覆盖范围

提出

隐藏终端

STA 1和STA 2向基站AP发送信息,STA 1未检测到STA 2也向AP发送,所以STA 1和STA 2同时将信号发送到AP,引起信号冲突,最终导致STA 1和STA 2的信号都丢失了。 隐藏节点:由于距离太远而导致一个站点无法检测到介质竞争对手的存在。
"隐藏终端"多发生在大型单元中(一般在室外环境),这将带来效率损失,并且需要错误恢复机制。当需要传送大容量文件时,尤其需要杜绝"隐藏终端"现象的发生。
RTS/CTS协议如何隐藏终端问题?_第1张图片
从图中,我们可以得知,由于两个节点的发送范围无法互相覆盖,从而两者在发送数据时,是无法通过物理监听的方法,探测对方是否有发送数据。

如何解决隐藏终端问题呢?

IEEE802.11提供了如下解决方案。
在参数配置中,若使用RTS/CTS协议,同时设置传送上限字节数----一旦待传送的数据大于此上限值时,即启动RTS/CTS握手协议:
RTS:Request To Send,即请求发送。RTS帧是一个单播帧,没有加密,其duration字段中填充包含后续发送过程中总体所需要时间。
CTS:Clear To Send,即信道清除帧。节点在收到CTS后,确认信道是空闲的,可以发送。CTS也是一个单播帧,没有加密,其duration字段包含除去RTS以及一个SIFS后,发送过程总体所需要时间。

  • 首先,STA 2发送RTS数据帧给AP。
  • 若在AP没有冲突,即AP成功解调出STA 2的RTS,AP会在等待SIFS之后发送CTS给STA 2。由于无线信道是一个广播信道,要是帧没有加密的话,那么所有节点都是可以解析信息的,所以这里AP虽然是发送CTS给STA 2,不过STA 1也可以解析该CTS信息,这也是很多书上写,RTS/CTS都是一个广播过程的原因。
  • 当STA 1接收到CTS之后,该CTS不是STA 1请求所得。或者说CTS不对应,那么STA 1会将CTS数据帧的duration给提出,并设置在自己本地的NAV(Network Allocation Vector)上。若NAV没有倒数到0,那么其会主动悬挂其随机回退计数值,在NAV没有倒数到0之前,其随机回退计数值不再继续倒数。
  • 当STA 2接收到CTS后,其发现该其是之前发送RTS的反馈。故节点已知信道空闲,在等待SIFS后,STA 2发送数据。当数据传输完成之后,AP向STA 2反馈ACK,从而最终完成一次传输。

RTS/CTS协议如何隐藏终端问题?_第2张图片
RTS/CTS工作机制对应的时序图如下:
RTS/CTS协议如何隐藏终端问题?_第3张图片
注意:NAV:虚拟载波监听。图上画错了,STA 1在重新backoff的时候,从3直接开始倒数而不是6。

实际应用

在实际的路由器中,RTS/CTS模式不是以开关的形式存在,而是以RTS_threshold的形式存在的。RTS/CTS另外一个思维就是通过短的控制包来预留出带宽,即 “采用小的数据包碰撞,来避免大的数据包碰撞” ,从而如果数据包太小,那么则不需要采用RTS/CTS机制。设置RTS_threshold的范围一般为2347,其单位是byte,即如果数据包大小如果大于2347 byte,那么才会采用RTS/CTS模式,在现实应用中,可以根据具体的情况,设置一个最适合的值。

总结

本文描述了RTS/CTS的定义,它是一种握手协议,用于解决“隐藏终端”问题。我们还介绍了什么是隐藏终端,RTS/CTS是如何解决隐藏终端问题的。隐藏终端问题是由于信号源之间无法互相通讯而发生碰撞引起的。RTS/CTS通过某一个基站向终端发送RTS,终端从而广播CTS清除信道内其他信号,让其他信号进行NAV等待,最后成功发送PACKAGE。

你可能感兴趣的:(NS3,网络,服务器,运维,网络协议,c++)