计算机网络知识点复习——CSMA/CD协议

一、何为CSMA/CD协议

该协议的是CSMA(Carrier Sense Multiple Access)协议的改进方案,CSMA/CD协议的工作流程可简单概括为“先听后发、边听边发、冲突停发和随机重发”,对于该协议的理解可以分为两个要点来理解就好。
(1)载波监听(Carrier Sense):是指每个站点在数据发送前和数据发送中都必须不停检测信道。其中在数据发送前检测信道是为了获取发送权(先听后发),数据发送中检测信道是为了及时发现发送的数据是否发生了碰撞(边听边发)。
(2)碰撞检测(Collision Detection):碰撞检测就是边发送边监听,如果监听到了碰撞,则立即停止数据发送(冲突停发),然后随机等待一段时间再重发(随机重发)。

当然如果概念不好理解,也可以举一个生活中常见的例子,以便于更好的理解该协议的工作流程,就拿生活中开会讨论的例子:
(1)有这么一个会议室,大家在里面讨论问题需要举手示意再发言,但是举手发言之前有这么一个前提:当前有没有人在发言,有人发言那我们就不能打断别人,要等别人发言完成之后再举手发言(先听后发)。
(2)在我们获得发言权之后,我们发言中还要关注其他人是否同意我们的观点,如果同意继续发言(边听边发)。
(3)当我们发言过程中的某一个观点跟某个人(路人甲)的意见不合时,路人甲忍不住就反驳你(我唔同意!),然后你们就吵起来了(甚至大打出手),旁边人看到让你们都去冰箱冷静一下再回来参加会议(冲突停发)。
(4)都去冰箱随机冷冻了随机一段时间后(几分钟?几个小时?每个人体质不一样嘛),两人都顶不住了才和解(毕竟命更重要嘛这不),重新回到会议室继续参与发言(随机重发)。

二、传播时延对载波监听的影响

这一个知识点可以用王道书上的一个例图来介绍。

风行男孩制作

这里假设τ为单程传播时延,这个例图可以这么来理解:
(1)在t=0时刻,站点A开始发送数据,在t=τ时刻,由于此时的时间t<τ,所以A发送的数据并未到达站点B,因此站点B检测到信道空闲并开始发送数据。
(2)由于信道中信息传播的速度一致,因此A的数据和B的数据在τ-δ时刻之后,各跑了单程传播时延剩下的δ时间的一半,也就是各自传送了δ/2的时间之后,二者信息发送碰撞,也就是t=τ-δ/2时刻。(此时A和B都还未知发生了碰撞)
(3)在t=τ时刻,A发送的信息到达B,B检测到该信息有差错,因此知道所收到的信息在传输过程中发生了碰撞,丢弃该信息,并停止发送信息。
(4)虽然B停止了发送,但已经有一部分信息在信道中传输了,发生碰撞的时间在t=τ-δ/2,因此这部分的信息在t=2τ-δ时刻传送到站点A,A检测到信息不完整,因此检测到发送了碰撞。

对于A为什么是在t=2τ-δ时刻检测到碰撞,可能有部分人有疑惑,这里可以举个例子来解释:

(1)在一条直线赛道的两端(西边和东边),分别有A和B两人,两个人均不知道终点在哪里,在t=0时刻,两个人需要以相同的速度往相对方向跑(A往东,B往西跑),这么一来总会有一个时刻在某个地方(小雷音寺)两人相遇(上面的t=τ-δ/2),相遇之后A把终点位置告诉给B,B继续往下跑。
(2)重点来了,A从起点花了τ-δ/2的时间跑到小雷音寺,那么B从小雷音寺知道终点后,他要从小雷音寺跑到终点(A的起点)所花的时间是不是一样的,也是τ-δ/2
(3)因此当B跑到终点后,也就是2*(τ-δ/2)时刻,A的起点(B的终点)那边负责掐表的人是不是就知道了A和B一定发生了碰撞(如果没有发送碰撞,也就是A没有把终点告诉给B,B压根不知道终点在哪里)。

三、最小帧长问题

从上面可以知道站点A从t=2τ-δ时刻才能检测到碰撞,考虑一种极限状态,当δ趋于0时,也就是A发送的信息几乎差一点点(可忽略的距离)就发送到B了,此时B才发出信息,这样一来,站点A是不是最多经过(争用期/冲突窗口)的时间才检测到发送碰撞,大于2τ之后就认为没有发生碰撞了。

现在考虑一种情况,A给B发送信息,B给C发送信息(所有信息的发送共享一条信道)。
(1)当站点A给站点B发送了一个很短的信息(帧),因此发送很快,在他发送完成之前都没有检测到发生了碰撞,发送完之后他认为他的工作就完成了。
(2)A发送的信息在传输的过程中,B也开始向C发送信息,在某一时刻两个消息发生了碰撞。
(3)碰撞之后,所发送的信息继续向终点传播,B收到A的信息和C收到B的信息之后都发现信息有差错,会丢弃,B检测到发生碰撞后会重发给C的信息,而B收到的消息后发现有差错已经丢弃了,这个信息需要重新获取,但是A不知道有碰撞,所以也不会重发。

因此为了避免这种情况,才规定了一个最小帧长,最小帧长的计算公式如下:

         最小帧长=总线传播时延(τ)* 2 * 数据传输速率

这个公式可以这么来理解,上面所提到的站点A最多经过t=2τ的就能检测到信息发送过程是否发生了碰撞(超过2τ认为无碰撞),那么只要我在这的时间里一直有数据可发就行了,当在某个时刻检测到了碰撞,立即停止发送,等待一段随机时间再重发就行了。因此为了保证我能检测到碰撞,在这2τ的时间里要保证一直有数据可发,再用时间乘以数据传输速率,就得到了我们的最小帧长了。

四、截断二进制指数退避算法

那么当检测到发生碰撞之后,我需要重发,我需要按什么规则来重发呢?如果一旦检测到发送碰撞立即重发,毫无疑问这是没有意义的,这会导致无休止的冲突。而CSMA/CD就采用了截断二进制指数退避算法来解决这个问题。算法主要精髓如下:
(1)基本退避时间确定为(争用期)。
(2)重传次数k(0,1,2,…10),其中k<=10,当重传次数k大于10后,k不再增大,会一直等于10,也就是k=min[重传次数, 10]。
(3)从离散的整数集合**[0, 1, 2, (2^k)-1]随机取一个数r**,重传所需要的时延就是r倍的基本退避时间,也就是r*2τ(2rτ)。
(4)当重传次数k=16后如果仍然不成功,则抛弃该帧冰箱高层报告出错。

我们可以来看一个例子:
(1)当某个适配器发送信息时检测到了碰撞,开始第一次重传,此时重传次数k=1,因此随机从[0, 1]中取一个数作为r,延迟时间0或者2τ的时间再重传。
(2)若再次发生碰撞,则第二次重传,k=2,因此随机从[0, 1, 2, 3]中取一个数作为r,延迟时间为0或2τ或4τ或6τ再重传。
(3)若再次发生碰撞,则第二次重传,k=3,因此随机从[0, 1, 2, 3, …, 7]中取一个数作为r,延迟时间为0或2τ或4τ或6τ…再重传。
(4)如继续发生碰撞,则继续第二步,直到重传成功或者重传次数k=16之后停止。

五、要点总结

本篇文章主要对CSMA/CD协议的一些知识点进行复习,重点记住该协议的工作流程为先听后发、边听边发、冲突停发、随机重发、最大碰撞检测时间为(端到端传播时延的两倍)、最小帧长的计算以及二进制指数退避算法。(码字不易,如本篇文章若有帮助,留个赞当痕迹就好)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值