CSMA介质访问控制原理

6.2 CSMA介质访问控制原理

    在总线型网络中,每个站点都能独立地决定帧的发送(没有主站点和从站点之分),很显然,如果两个或多个站点同时向总线上发送帧,就会产生介质访问冲突(仅指在没采用信道复用情况下),导致所发送的帧都出错。因此,在这种总线型网络中,一个用户数据发送的成功与否,很大程度上取决于发送数据时是否会与其它用户发送的数据产生总线介质争用。这时就需要一种能有效避让冲突发生的技术,确保每个站点在向总线上发送数据时,其它站点均不发送数据,也就是如何使各个站点能尽快地检测到总线介质是否空闲。本节所介绍的CSMA(载波侦听多路访问)就是这样一种能比较有效解决总线型网络中介质争用的技术。

    CSMA技术也称为LBT(Listen Before Talk,先听后说),也就是先侦听要访问的介质,当发现介质忙时先避让一段时间,不发送数据,仅当侦听到介质空闲时才进行数据发送。在这里就涉及到一个问题,就是在站点侦听到当前信道中有数据在传输时,要避让多长时间才再次侦听,这就是CSMA技术的退避算法。但CSMA可以采用的退避算法有几种,也可算是对应类型的CSMA,那就是:非-坚持CSMA(no persistent CSMA)、1-坚持CSMA(1-persistentes CSMA)、P-坚持CSMA( P-persistant CSMA)。下面是这些算法的具体诠释。

6.2.1 非-坚持算法

    “非-坚持”中的“非”的意思就是指各站点不连续侦听总线介质是否空闲,即在发现介质忙时,先停止侦听,等过一段时间再来侦听。具体来讲,“非-坚持CSMA”就是某站点发现总线介质上没有数据在传输时(处于闲状态),立即发送在等待发送的数据;如果检测到总线介质上有数据在传输时(处于忙状态),则等待一段时间再来侦听,再忙时再等待一段时间来侦听,以此类推,直到发现总线介质处于空闲时本站点才可发送数据。

    如图6-7所示的是一个“非-坚持CSMA”介质访问控制示例。示例中某站点准备要发送一个数据帧Fi。它第一次检测时发现总线是处于忙状态,于是隔了一段时间t1后,再来侦听,还发现总线介质是处于忙状态,于是它再隔一段时间t2来侦听,终于在第三次侦听时发现总线介质是处于闲状态,于是这个站点立即把Fi帧发送出去。

图6-7 “非-坚持CSMA”介质访问控制示例

   这时大家可能已经有疑问了,那就是这个“非-坚持CSMA”算法中,在上次侦听发现介质处于忙状态时需要等待多长时间再来侦听介质的状态呢?答案是不固定的,这个等待的时间是根据“非-坚持CSMA”算法随机产生的(具体产生机制大家可不必深究)。如果采用TDM(时分复用)传输方式,则这个延迟时间就是一个时隙长度。

    虽然“非-坚持CSMA”算法可以在一定程度上减少冲突的发生,但还是不能完全消除冲突的发生,因为毕竟每个站点发送的数据速度不一样,数据在信道中传输是需要时间的,而且等待的时间也不一定就可以满足一个帧完全传输完毕,所以尽管每个站点都是在检测到介质空闲时才发送数据,但仍可能存在前一个帧还在信道中传输时,后一个站点的帧就追上来了,发生冲突。

    另外,“非-坚持CSMA”算法还存在一个明显的缺点,这就是一旦侦听到介质忙就马上延迟一个随机时间再重新侦听,但很可能在再次侦听之前信道就已经空闲了。也就是“非坚持CSMA”不能把信道刚一变成空闲的时刻找出,影响了信道利用率的提高。所以这种算法主要适用于小型的总线,或者树形拓扑结构网络中,不适用于像现在大型的树形结构以太网中。为了克服这一缺点,可采用下面介绍的两种“坚持CSMA”。

6.2.2 1-坚持算法

    “1-坚持”中的“1”有两层含义:一是指发现总线介质忙时一直持续、不间断侦听,直到发现介质处于闲状态;二是在侦听到介质处于空闲状态后一定(也就是100%)发送数据。前面介绍的“非-坚持CSMA”算法是在发现介质忙后,即随机等待一个延时,然后继续侦听,发现介质处于闲状态后立即发送数据;而此处的“1-坚持CSMA”算法中是在发现介质忙时不等待、继续侦听,一旦发现空闲即立即发送数据;在数据传送过程中发生冲突时放弃当前的数据传送任务,才等待一个延时后再继续侦听。

    如图6-8所示的是一个“1-坚持CSMA”介质访问控制示例。示例中某站点准备要发送一个数据帧Fi。它第一次检测时发现总线是处于忙状态,于是继续侦听(不等待),第二次侦听还是还发现总线介质是处于忙状态,于是它再继续侦听,一直到第n次侦听时才发现总线介质是处于闲状态,于是这个站点立即把Fi帧发送出去。

图6-8  “1-坚持CSMA”介质访问控制应用示例

    很明显,这种算法相对前面介绍的“非-坚持”算法来说的优点就是提高了介质的利用率,每个站点都在抓住一切有利时机发送数据,因为在没有发生冲突时是无需等待一个随机延迟就立即进行继续侦听,不会出现介质处于空闲状态仍没有站点发送数据的情况。但是,该算法仍有两个致命的弱点:一是在有多个站点发送数据的情况下,这种毫不等待的算法,也就使得冲突时常发生。原因就是前面所说的,可能在网络中同时有多个站点在同一时间检测到介质空闲(因为中间没有一个延迟,也就是一直在侦听介质状态),而立即进行了数据发送,所以更容易发生冲突。二是这种算法发现在介质忙时一直侦听,占用了大量网络和设备资源。所以“1-坚持CSMA”算法也仅适用于小型的总线型或者树形拓扑结构网络,不适用于像现在大型的树形结构以太网中。

6.2.3 P-坚持算法

    既然前面介绍的两种算法都存在明显的不足,自然就会有人继续后面的开发,于是就生产了新的“p-坚持CSMA”退避算法。其实,“p-坚持CSMA”算法是前面介绍的“非-坚持CSMA”和“1-坚持CSMA”这两种算法的一种折中算法,取两者的长处,而尽量克服了两者的不足。

    理解“p-坚持CSMA”退避算法的关键就是其中的“p”,是指侦听到介质空闲时发送数据的概率(小于1,也就是小于100%),就是指站点在发现介质空闲时可以立即发送数据的概率为p,也就是不一定(不是100%)发送数据,还有(1-p)概率是不发送数据。其目的就是为了避免与其他站点发生冲突。

    具体来讲,“P-坚持CSMA”算法的具体介质访问控制方法与前面介绍的“1-坚持CSMA”类似,也是在侦听到介质处于忙状态时持续侦听,当侦听到介质处于空闲状态时,但此时站点不一定会马上发送数据,根据概率p(这个p值是算法事先确定好的)来选择发送数据,而在另一个(1-p)概率的时候,即使介质处于空闲状态,也会延迟一段时间t(这个t是指端到端的“传播延时”)后再重新侦听介质状态。

    上面所说的“传播延时”是有计算公式的,具体如下:

传播延时(μs)=两站点间的距离(m)÷ 信号传播速度(m/s)

    如已知传播距离为1000km,信号在介质上的传播速率为2×108m/s,则可计算出它的传播延时为1000×1000/(2×108)=0.005s。

    这里最难理解就是p概率了。打个比方,p为0.8,也就是80%的空闲状态下是可以立即发送数据的,还有20%(1-p)的机率是不发送数据,是延迟一个t时间(也就是“传播延时”)再来侦听介质状态。如果在某段时间中,前面已有一个空闲状态下没有发送数据,则下一个空闲状态下就很可能会立即发送数据了(毕竟有80%的可能性是要发送数据的),否则如果前面连续几个空闲状态下都立即发送了数据,则下一个空闲状态下就可能不发送数据了。总体来说,是否发送数据是随机的,没有固定哪个空闲状态下必须发送数据,或者不发送数据,但整体通信过程中在空闲状态下发送数据的概率都是在p以内。

    如图6-9所示的是一个“p-坚持CSMA”介质访问控制示例。示例中某站点准备要发送一个数据帧Fi。它第一次检测时发现总线是处于忙状态,于是继续侦听(不等待),第二次侦听还是还发现总线介质是处于忙状态,于是它再继续侦听,第3次侦听时发现总线介质是处于闲状态,但根据概率计算出现在不能发送数据,于是等待一个t时间后,再来侦听介质状态,到第4次侦听时发现介质还是处于空闲状态,根据概率计算得出马上可以发送数据了,于是把Fi帧发送出去。

图6-9  “p-坚持CSMA”介质访问控制应用示例

    从以上分析可以看出,“P-坚持”退避算法是一种既能像“非-坚持CSMA”算法那样减少冲突,又能像“1-坚持CSMA”算法那样减少介质空闲时间的折中方案,也就是综合了前面所介绍的两种算法的优点,以实现优缺点互补。

展开阅读全文

没有更多推荐了,返回首页