发布时间:2023-03-04 15:00
1. 为什么要有RTS/CTS
2. RTS threshold
在以太网络中,工作站是通过接收传输信号来行使CSMA/CD载波监听的功能。空中的介质线路中包含了信息,而且会传输到各网络节点。无线网络的界线比较模糊,有时候并不是每个节点都可以跟其他节点直接通信,如下图
节点1和节点3互为隐藏节点,节点2可以跟节点1和节点3通信。如果使用简单的transmit-and-pray协议,节点1与节点3有可能在同一时间传送数据,这会造成节点2无法辨识任何信息。此外,节点1与节点3将无从得知错误发生,因为只有节点2才知道有冲突发生。
在无线网络中,由隐藏节点所导致的碰撞问题相当难以监听,因为无线收发器通常是半双工工作模式,即无法同时收发数据。为了防止碰撞发生,802.11允许工作站使用请求发送(RTS)和允许发送(CTS)帧来清空传送区域。由于RTS与CTS帧会延长数据交易过程,因为RTS帧、CTS帧、数据帧以及最后的应答帧均被视为相同基本连接的一部分。
如上图所示,Source有个数据帧待传输,因此送出一个RTS帧启动整个过程。RTS帧本身带有两个目的:预约无线链路的使用权,并要求接收到这一消息的其他工作站停止发言。一旦收到RTS帧,接收端会以CTS帧应答。和RTS帧一样,CTS帧也会令附近的工作站保持沉默。等到RTS/CTS完成交换过程,Source即可传送上面要传送的帧,无须担心来自其他隐藏节点的干扰。
整个RTS/CTS 传输过程会用到好几个帧,实际开始传输数据之前的延迟也会消耗相当的频宽。因此,它通常只用在高用量的环境,以及传输竞争比较显著的场合。对低用量的环境而言,通常无此必要。
随着802.11 逐渐成熟,隐藏节点已经不成问题。在小型、不太活跃、只有几部客户端共享一个接入点的网络里,很少会有同时进行传输的情况,何况还有不少闲置频宽可供重传之用。在比较大型的网络环境里,由于覆盖范围内有相当密集的接入点,客户端就有可能坐落在好几台接入点的共同覆盖范围内。如果802.11 网卡的驱动程序支持,使用者可以通过调整RTS 门限值(RTS threshold)来控制RTS/CTS 程序。只要大于此门限值,就会进行RTS/CTS 交换程序。小于此门限值则会直接传送数据帧。
早期的802.11帧最大长度为2346,RTS threshold的范围是0-2347 bytes。
当设为0表示只要发送数据包,AP就要先发送RTS。
当设为其他值 :比如设为400, 只要一个数据包大小为410的数据包要发送时,因为410超过了400,路由就会发送RTS信号通知对方,以防信号冲突。
当设为2347,表示所有数据包直接发送,无需先发RTS。
随着HT、VHT、HE等更高吞吐量的无线模式出现,802.11帧的最大长度早已不再是2346, 所以RTS threshold也不应限制在2347。如果是一个HT的设备,它的RTS threshold最大值应该设为65536(如果是VHT,HE的设备,它的maximum A-MPDU size更大,但是802.11无线模式都是向下兼容的,RTS threshold最好也为0-65536)。
以发送1500 bytes的以太报文为例,如果AP/STA支持802.11n/ac/ax模式,RTS threshold设置为2347. 那么说明只要发送聚合报文(A-MSDU, A-MPDU),发包之前都会先发送RTS。