一、基本原理
CSMA(Carrier Sense Multiple Access,载波监听多路访问)
发送数据之前,先监听信道上是否有人在发送。若有,说明信道正忙,否则说明信道是空闲的,然后根据预定的策略决定:
(1)若信道空闲,是否立即发送;
(2)若信道忙,是否继续监听。
二、三种监听算法
非坚持型监听算法:后退随机时间由于随机时延后退,从而减少了冲突的概率。问题是因为后退而使信道闲置一段时间,这使信道的利用率降低,而且增加了发送时延。
1-坚持型监听算法:继续监听,不等待有利于抢占信道,减少信道空闲时间。但是,多个站同时都在监听信道时必然会发生冲突,冲突概率和利用率都高(双高)。
P-坚持型监听算法:若信道空闲,以概率P发送,以概率(1-P)延迟一个时间单位,P大小可调整。
三、二进制指数退避算法
(1)检测到冲突后,马上停止发送数据,并等待随机时间再发送数据。
(2)等待的随机时间=τ*Random[0,1,..2^k-1
τ是基本退避时间,可以看作固定值。Random表示随机函数。
k=min[重传次数,10],根据公式,如果重传12次后,k=min[12,10]=10,那么可能等待的时间是τ*Random[0,1023],一共有1024种可能。
每次站点等待的时间都是随机数,故后一次退避时间不一定比前一次长。重传次数越多,退避窗口(即Random取值)越大,从而降低冲突概率。
如果连续发生16次碰撞后,认为网络繁忙或故障,不再尝试发送
练习举例:
在CSMA/CD中,同一个冲突域中的主机连续经过3次冲突后,每个站点在接下来信道空闲的时候立即传输的概率是多少:
冲突1次后,k=min[1,10]=1,那么等待时间τ*Random[0,1],有2个可选数字。
冲突2次后,k=min[2,10]=2,那么等待时间τ*Random[0,1,2,3],有4个可选数字。
冲突3次后,k=min[3,10]=3,那么等待时间τ*Random[0,1,2,3,4,5,6,7],有8个可选数字。
立即传输即等待时间为0,而0是8个随机时间之一,故立即传输的概率是1/8
计算过程:
1. k 值的计算
公式 k = min[冲突次数, 10] 表示取冲突次数和 10 这两个值中的较小值。
冲突1次后,冲突次数为1,1和10中较小值是 1,所以k=1。
冲突2次后,冲突次数为2,2和10中较小值是 2,所以k=2。
冲突3次后,冲突次数为3,3和10中较小值是 3,所以k=3。
2. 等待时间中随机数范围的确定
这里Random[起始值, ... 结束值] 表示生成在该范围内的随机数。
当k=1时,随机数范围是Random[0,1],即从0到1这两个整数中取随机数。
当k=2时,随机数范围是Random[0,1,2,3],这里其实是以2^k-1 为结束值,2^2-1=3,所以是从0到3这4个整数中取随机数。
当k=3时,同样以2^k-1为结束值,2^3-1=7,随机数范围就是Random[0,1,2,3,4,5,6,7] ,即从0到7这8个整数中取随机数。
3. 可选数字数量的计算
可以看出可选数字数量是按照 2^k 来计算的:
当k=1时,2^1=2,有2个可选数字。
当k=2时,2^2=4,有4个可选数字。
当k=3时,2^3=8,有8个可选数字。
k 参数说明:
当冲突次数≤10时,k取冲突次数;
当冲突次数>10且<16时,k始终固定为10;
若冲突次数达到16次,协议判定传输失败,直接丢弃帧。
参数k与冲突次数相关,当冲突次数不超过 10 次时,k就等于冲突次数;当冲突次数大于10次且小于16次时,k一直取值为10 ;当冲突次数达到16次后,就认为发送失败并丢弃传输的帧。所以在整个冲突处理和退避过程中,只要遵循这个算法规则,“10” 这个值保持不变。