cisen / blog

Time waits for no one.
135 stars 20 forks source link

CSMA/CA 协议相关 #871

Open cisen opened 4 years ago

cisen commented 4 years ago

该协议可以分为两个部分来看:

  1.Carrier sence:每个节点在传输之前,先对信道进行监听,看有没有其他节点在占用信道进行传输。

  2.collision avoidance:如果有节点占用信道,则等待一段时间,再进行监听。

在竞争接入时期内,设备想要传输数据帧或者 MAC 命令帧(确认帧后面可以被快速传输的帧除外,参考 5.1.6.3 的时序需求),需要使用 CSMA/CA 算法访问信道。确认帧、免竞争阶段的数据帧、信标模式 PAN 网络中的信标帧都不需要使用 CSMA/CA 算法。

  在一个 PAN 网络中,MAC 子层在竞争接入时期访问信道有两种 CSMA/CA 算法:时隙版 CSMA/CA 和非时隙版 CSMA/CA。如果 PAN 中使用周期性信标,则采用时序版 CSMA/CA 算法;相反,如果 PAN 中没有使用周期性信标或者周期性信标不能被定位,则采用非时隙版的 CSMA/CA 算法。这两种算法都使用一个叫做退避周期的时间单位实现。一个退避周期等于 aUnitBackoffPeriod。

  在时隙版 CSMA/CA 中,退避周期的边界应该与 PAN 协调器的超帧时隙边界对齐,即退避时间的开始时间与信标帧的开始时间对齐。在时隙版 CSMA/CA 中,MAC 子层必须确保物理层在退避时间的起始边界开始传输数据。在非时隙版 CSMA/CA 中,设备的退避周期与该 PAN 网络中的其它设备的退避周期不相关。

  设备在进行传输时会维护三个变量:NB(Number of Backoff),CW(Content Window)和 BE(BAckoff Exponent)。NB 表示的是当前退避的次数,首次调用 CSMA/CA 机制发送报文时,该值会初始化为 0,随着信道接入的失败,该值会增 1 后重试接入信道发送报文。在超过系统预定义的门限 macMaxCSMABackoffs 时, CSMA/CA 机制宣告报文发送失败并丢弃此报文。CW 定义的是竞争窗口大小,表示 CSMA/CA 机制要求接入信道发送报文前需要信道连续空闲的检测次数。CW 初始化为 2,当信道忙闲检测为忙时,CW 将被重新初始化为2,当信道忙闲检测为闲时,该值自减 1, 直至为 0 时,开始报文发送。CW 只用于时隙版 CSMA/CA 算法。BE 定义的是退避指数,表征着节点竞争信道时随机退避范围的上限值。在非时隙系统、或者 BLE 字段被置为 0 的时隙系统中,该值被初始化为 2 和 macMinBE 中的最小值。如果 macMinBE 被设为 0,CSMA/CA 算法在进行第一次迭代时就不使用冲突避免。

  尽管在 CSMA/CA 算法进行信道忙闲检测时, 设备的接收器是打开的, 但是设备会丢弃这段时间内接收的所有帧。

  图 11 描述了 CSMA/CA 算法的流程。如果该算法的最终结果是“Success”,那么 MAC 层就可以开始传输帧。否则,该算法认为访问信道失败。 图 11  CSMA、CA 算法

cisen commented 4 years ago

https://www.cnblogs.com/cherishui/p/4046360.html 网络通讯,必须依靠介质来传递数据,将数据调制到模拟信号上,再把此信号通过介质传递到远方。根据介质的不同,分为有线网络和无线网络。为了让世界上各种各样的网络设备生产商生产的设备互联互通,他们必须遵循一定的“通讯语言“,就像一个中国人和美国人在一起,假如他们生产的设备只能够说“本国语言”,那碰在一起,就是驴头不对马嘴,根本无法沟通。为了解决这个问题,IEEE组织推出了两种协议,一种适用于有线网络的IEEE 802.3标准和另一种适用于无线网络的IEEE 802.11标准。在底层传输上,有线网和无线网,都属于广播形式的网络,这也就是说,当一个节点发送信息时,网络范围内的所有节点,都能够接收到,如果有多个节点在同时发送数据,这就容易形成数据堵塞和碰撞,导致网络速度变慢。

为了解决这个问题,协议指定CSMA机制来解决这个问题,CSMA全称为Carrier Sense Multiple Access,中文为载波监听多路访问,具体处理方法根据传输介质的不同而不同。有线网络采用冲突检测(Collision Detection),无线网络采用冲突避免(Collision Avoidance),从字面意思上来看差不多,但是具体细节上还是有些不同。

下面介绍两种避免冲突的方法。

CSMA/CD(有线)

这种方式,在发送方发送信号前,先监听通信信道是否空闲。 如果空闲,则立即发送数据,并且边发边监听信道,如果此时监听到冲突,则立即停止发送数据,同时告诉其他节点已经发送碰撞(发送阻塞信息),自己则随机等待一段时间后重新发送数据包。当监听到信道忙碌时,也需要随机等待一段时间,时间值通过指数退避算法来获得。当尝试若干次都失败的话,则停止发送,通知上层。

下面介绍二进制指数退避算法的基本流程:

1. 确定基本退避时间单位(2T),对于以太网来说,为51.2us

  1. 定义一个参数K,它与重传次数N之间的关系为, K = min[N,10]

  2. 从上述定义的K,构造离散型整数集合[0,1,2,3,4…,(2^k - 1)]

  3. 计算重传时间,从离散整数集合中随机取一个数,乘以基本退避时间单位就是退避时间。

CSMA/CA无线) 发送数据前,先检测到信道状态,等到信道空闲后,再等待一段时间后,再次检测信道是否空闲,如果还是空闲,那么立刻发送数据,否则,随机等待一定时间,等时间到期后,再次发送检测。

发送真实数据前,先向目标端发送的请求传送报文(RTS),等接收到目标端响应报文CTS,发送端才开始传送真正的数据。采用这种RTS-CTS机制,可以确保接下来传送数据时,不会被碰撞。由于RTS-CTS的封包都很小,因此不会增大整体传输开销,此方式可以确保接下来传送数据时,其他设备不会使用信道以避免冲突。

那么,CSMA/CA是如何避免冲突的发送呢?它采用了带确认的发送机制,类似于TCP的ACK回应,如果发送方收到了接收方对其发送数据的ACK确认,那么,不管空中信道是多么的拥挤,数据包还是艰难的穿梭到收发双方,其表现就是收到了ACK信号.

CSMA/CA通过上述三种方式,信道空闲检测、RTS-CTS和ACK确认,提供避免碰撞的无线信道分时访问。

信道的空闲检测有三种方式,分布是通过能量检测、载波检测和能量载波混合检测三种方式来检测信道,统称为CCA。

有线网络和无线网络,因为传输介质的不同,检测冲突的方法也就不同。在传统的有线网络中,检测方法是通过通过电缆中电压的变化检测冲突,当数据传输发生碰撞时,电缆中的电压就随着发生变化。在无线网络中,空气作为传输介质,必须采用其他的碰撞检测机制。CSMA/CA提供了三种检测信道空闲(CCA)的方式:

1. 能量检测(ED) : 对接收信号的能量大小进行判断,当功率大于某一确定值时,就认为信道被占用

2. 载波检测(CS) : 对接收信号与本地的伪随机码(PN码)进行运算比较,如果其值超过某一极限,就认为信道被占用

3. 能量和载波混合检测(ED & CS)

为什么采用电缆传输和采用空气传输,需要不同方式的检测方法呢?

这是由于传输介质所决定的,不同的传输介质上,信号衰减的速度不一样。在有线传输上面,假设发出去的信号对于的电压值为3.3(瞬间电压),当检测到冲突时,也就是接收到来自其他设备的信号,通过电压的叠加,可能会得到6V左右的瞬间电压,这很容易检测出来。但在无线传输上,干扰信号就没有这么强劲了,随着传输距离的增加,信号衰减的很快,在发送端,当接收到其他非预期信号的干扰时,电压的拨动不会那么明显,因此需要上面提到CCA方法。

CSMA/CA算法概述

下图是CSMA/CD机制的发送数据和接收数据的流程图。 0_13117737288832

在无线信标网络中,网络中的协调器会定期发送信标给所有的可感知节点。所有待发送数据的设备,在发送数据前,都会通过CSMA/CA机制来竞争传输媒介的使用权。根据网络中是否有信标,将无线网络分为信标网络和非信标网络。在不同网络模式下,CSMA/CA算法版本不一样,分为信标版本slotted CSMA-CA 和非信标版本的unslotted CSMA-CA算法。

两者的区别主要在信标版本下,所有设备的退避时间和和协调器的信标帧传输时间对齐,保证在每段CAP开始时,才开始传输数据,以减少冲突的可能性。在2.4GHz的传输频段下,每1毫秒可以传送完毕62.5个symbols,那么传输一个symbols所需的时间为(1/62.5)毫秒。根据待传输的MPDU的长度(以aMaxSIFSFrameSize,默认为18个字节为界限),帧与帧之间的间隔时间有所不同,具体要求如下:

IFS: Interframe spacing 帧与帧之间的空隙

LIFS : long IFS 长帧与长帧之间的空隙

SIFS : short IFS 短帧与短帧之间的空隙

image

image 281807095656699

281807103001841

如果需要ACK确认的帧,则在收到ACK后等待IFS时间,如果不需要,则根据传输帧长度,在等待相应的时间。

在此算法中,有三个重要的参数:

NB(后退次数,Number of Back):每检测到信道忙,该值就会加1.在IEEE 802.15.4中,Nb最大值定义为24.为了优化效率,当信道经过4次退避延迟检测后,仍然为忙,则放弃此次传送。在每次传输开始时,该值初始化为0.

CW(碰撞窗口长度, content window length): 每次退避等待时间值,单位为传输20个symbol所需的时间,CW的初始值为2,最大值为31.当判断信道为忙时,重置该值为2. 此参数仅在信标网络下才使用。

BE(退避指数,Backoff exponent):设备尝试去退避的最大次数,也就是节点接入信道的能力。

当接收信标帧中的BLE域为0时,BE应该初始化为MAC层的macMinBE值,否则,BE值应该设为2和macMinBE两者中的小者。在IEEE 802.15.4中,BE默认值为3,取值范围在0~macMaxBE。其中,macMaxBE的取值范围为[3-8],默认为5.

下图是简要算法流程图: 281807125817710

cisen commented 4 years ago

http://www.2cto.com/net/201307/226574.html

《数据通信与网络》笔记--CSMA/CD和CSMA/CA

CSMA/CD

工作原理

CSMA/CD(Carrier Sense Multiple Access/Collision Detect)即载波监听多路访问/冲突检测机制,它工作在共享式以太网中,应用在

OSI 的第二层数据链路层。

它的工作原理是: 发送数据前 先侦听信道是否空闲 ,若空闲,则立即发送数据。若信道忙碌,则等待一段时间至信道中的信息传输结束后再发送数据;若在上一段信息发送结束后,同时有两个或两个以上的节点都提出发送请求,则判定为冲突。若侦听到冲突,则立即停止发送数据,等待一段随机时间,再重新尝试。

下图描述了第一位发生冲突的情况,冲突的双方是站点A和站点C。

20130710103936551

在时刻t1,站点A开始发送帧,从左往右传输,在时刻t2,站点C还没有侦听到A发送的第一个位,站点C开始发送帧,向两边传输,在时刻t2后的某一时刻,冲突发生了,在时刻t3,站点C收到了站点A的第一个位,他检测到了冲突,他放弃了传输,在时刻4,站点A收到了站点C的第一个位,他也放弃了传输。他们都等待一个随机时间后再次重新尝试。

帧的最小长度

为了实现CSMA/CD,需要限定帧的长度,在发送帧的最后一位前,发送站点必须检测冲突,如果有任何冲突要放弃传输。这是因为一旦整个帧被发送了,站点就无法保留帧的副本并无法掌控线路的冲突检测了。因此,帧的传输时间至少是最大传播时间的两倍,即从A传播到D的时间的2倍。

以太网中,帧的最小长度为64个字节。

帧的最大长度

由于信道是所有主机共享的,如果数据帧太长就会出现有的主机长时间不能发送数据,而且有的发送数据可能超出接收端的缓冲区大小,造成缓冲溢出。为避免单一主机占用信道时间过长,规定了以太网帧的最大帧长为1518个字节。

CSMA/CA

工作原理

CSMA/CA(Carrier

Sense Multiple Access with Collision Avoidance)即即载波监听多路访问/冲突避免机制,一般工作在无线网中。

·其工作流程分为一下两个:

1.送出数据前,监听媒体状态,等没有人使用媒体,维持一段时间后,再等待一段随机的时间后依然没有人使用,才送出数据。由於每个设备采用的随机时间不同,所以可以减少冲突的机会。

2.送出数据前,先送一段小小的请求传送报文(RTS : Request to Send)给目标端,等待目标端回应 CTS: Clear to Send 报文后,才开始传送。 利用RTS-CTS握手(handshake)程序,确保接下来传送资料时,不会被碰撞。 同时由於RTS-CTS封包都很小,让传送的无效开销变小。

CSMA/CA通过这两种方式来提供无线的共享访问,这种显式的ACK机制在处理无线问题时非常有效。然而不管是对于802.11还是802.3来说,这种方式都增加了额外的负担,所以802.11网络和类似的Ethernet网比较总是在性能上稍逊一筹。

为什么无线网一般使用CSMA/CA

CSMA/CD的基本理念是一个站点在传输过程中检测到冲突时,要有能力去接受信号,当没有冲突时,站点接受到一种信号:它自身的信号。当冲突发生时,站点接收到两种信号:它自身的信号和第二个站点传输的信号。为了区别以上2中情况,不同情况接收到的信号应该明显不同。换言之,来自第二个站点的信号需要为第一个站点产生的信号增加大量的能量。

在一个有线网络中,接收信号的能量和发送信号的能量基本一样,这就是说在冲突中,被检测到的能量几乎翻倍。但是在一个无线网络中,大量发送信号的能量在传输中丢失。接收信号的能量也很小。因此,一个冲突可能只增加5%~10%的额外能量,这对有效的冲突检测起不了什么作用。所以我们在无线网络中要尽量避免冲突。