4.2.8 以太网技术(八)退避算法
在CSMA/CD协议中,一旦检测到冲突,为了降低再一次发生冲突的概率需要等待一个随机的时间后再使用CSMA/CD的方法试图进行下一次的传送,为了保证这种退避的维持稳定,我们在以太网中采用了一种被称为二进制指数退避算法的技术。
一、二进制指数退避算法
-
指数退避算法是指在遇到重复的冲突时,站点将重复传输,每一次冲突之后,冲突推迟时延平均值将加倍。
-
二进制指数退避算法提供了一个处理重负荷局域网冲突问题的方法
-
在退避算法中尝试传输重复失败次数越多将会导致更长的退避时间,这有利于负荷的平滑。
如果没有这样的退避算法将会导致两个或者多个站点同时尝试传输导致冲突后这些站点又立即尝试重传导致新一轮的冲突发生。
二、二进制指数退避算法过程
-
假设重传次数为rtx_count,允许的最大重传次数为rtx_count_max,通常为16。如果rtx_count<=rtx_count_max,则计算二进制指数退避算法的三个过程为:
- 计算N=min[rtx_count,10]即重传次数与10之间取小的那个。所以这里我们就应该知道如果重传次数在第10次以后N值就不再变化了。
- 从0,1,,……( 2 N − 1 2^N-1 2N−1)这 2 N 2^N 2N个整数中随机的选择一个数,记为r;
- 计算退避时间time_backoff= 2 τ ⋅ r 2\tau\cdot r 2τ⋅r
-
我们来具体的解释一下这个过程
- 退避时间 time_backoff= 2 τ ⋅ r 2\tau\cdot r 2τ⋅r
- 基本退避时间为: 2 τ 2\tau 2τ(争用期)
- 第一次冲突后,r={0,1},每个站点将会等待在0或者1个基本退避时间后进行重传。
- 第二次冲突后,r={0,1,2,3},每个站点将会随机等待0,1,2,3之中选取一个随机数乘以基本退避时间作为退避时间后再开始重传。
- 第 i ≤ 10 i\leq10 i≤10次冲突后,r={0,1,2,3,…… 2 i − 1 2^i-1 2i−1}会在0到 2 i − 1 2^i-1 2i−1之间的整数中选取一个随机数乘以基本退避时间作为退避时间后再开始重传。
- 第10次冲突后,r={0,1,2^=……1023},第十次之后,选择的基本的时间将会固定的在0到1023之间选取一个随机数乘以基本退避时间作为退避时间后开始重传。
- 第16次冲突后,发送失败,报告上层
-
这里我们以第二次发生冲突为例:N=2
- MIN(2,10)=2
- r={0,1,2,3}
- 10Mbit/s的争用期 2 τ = 51.2 μ s 2\tau=51.2\mu s 2τ=51.2μs
- 退避时间={ 0 , 51.2 μ s , 102.4 μ s , 153.6 μ s 0,51.2\mu s,102.4\mu s,153.6\mu s 0,51.2μs,102.4μs,153.6μs}
三、二进制退避算法举例
例:以太网中,第四次冲突之后,一个节点选择的随机退避系数r的值为4的额概率是(C)。
-
A、 1 4 \frac{1}{4} 41
-
B、 1 8 \frac{1}{8} 81
-
C、 1 16 \frac{1}{16} 161
-
D、 1 32 \frac{1}{32} 321
解题思路:
- 第四次冲突N=4
- MIN(4,10)=4
- r={0,1,2,3,……15}
四、小结
- 以太网中采用CSMA/CD协议的随机访问的媒体访问控制方法在某一个微观的时刻,某一总线型的结构当中只能够有一个站点是出于发送状态。
- 碰撞(或者称为冲突)在所难免,尤其是在网络中站点数较多,而且每个站点发送的概率比较大或者称之为网络负荷比较重的情况下,在这种情况下如果发生了冲突除了要发送一个冲突加强的信号以外,还必须要执行一个二进制指数退避算法。
- 二进制指数退避算法:这个算法的精髓在于牺牲时间效率,换取冲突概率减小,当冲突发生的次数逐渐增大时,会造成退避的随机参数值范围越选越大,所以退避的时间是指数增加的可能性,但是这种情况带来的好处是再一次发生冲突的概率将会减半。