首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >3.5.2_2 CSMA CD协议(上)

3.5.2_2 CSMA CD协议(上)

作者头像
用户11290648
发布2025-08-18 08:31:37
发布2025-08-18 08:31:37
1920
举报
文章被收录于专栏:学习学习

继续来看随机访问介质访问控制。在之前的学习中介绍了ALOHA协议和CSMA协议,其中CSMA 协议又可以进一步的细分为1-坚持、p-坚持和非坚持这样的几种类型。

这个小节要学习的CSMA/CD协议和1-坚持CSMA协议是比较类似的,可以对比着学习。CSMA/CD协议也是考研的重点,同时也属于难点,所以做了一个重点标记,CSMA/CD协议经常被使用于早期的有线以太网当中,早期的有线以太网通常是总线型的,比如在上世纪80年代,以太网的构造通常就是很简单,用一个同轴电缆,在这根同轴电缆上挂接着多台计算机,或者说多个节点。这些节点对于这一根同轴电缆的访问,就是共享的,无论是从物理上看,还是从逻辑上看,这种以太网都属于总线型,这种总线型的网络都会有信道征用的问题。也就是当一个节点往信道上发送数据的时候,它的这个数据会无差别的广播给所有的节点。其他节点如果同时发送数据,此时就会发生信号的冲突,这种同轴电缆构成的总线型网络就可以使用CSMA/CD协议去实现介质访问控制。除了这种同轴电缆构成的有线局域网之外,在上世纪90年代,也经常会使用集线器去连接多个节点,组成有线局域网,通过集线器连接多个节点构建的这种局域网,在物理上看,似乎是星型的结构,但是在逻辑上看,依然属于总线型的结构。因为各个节点之间发送信号的时候也是具有无差别的广播给所有节点,就是具备广播的特性。这种由集线器组成的有线局域网当中同样也是用CSMA/CD协议去实现节点之间信道的访问。CSMA/CD协议在以太网这种技术的发展过程当中,其实扮演了非常重要的角色,我们现在使用的有线局域网,也是以太网技术,只不过现在的有线局域网通常都是 星型结构,而不是总线型结构。因为现在集线器用的已经很少了,通常来说是用一个交换机去连接各个节点,用交换机连接的这种网络就属于星型的结构,而不是总线型的结构。总之,总线型的以太网在互联网技术发展的浪潮当中扮演着非常重要的角色,与此同时,总线型的以太网都是使用了CSMA/CD协议去实现各个节点对信道的访问。因此,这个协议的地位很高,所以考试也非常喜欢 考,而且考的会比较深、比较难一些。

由于这个协议的内容比较多,为了降低大家的记忆负担,比较重要的东西都总结在了这张图里,接下来会从上至下依次去展开讲解。首先来看一下CSMA/CD协议的一些要点。

首先解释一下CSMA这个缩写是什么意思?通过之前的学习我们知道CSMA这个英文缩写的意思是载波监听,这一段缩写当中最重要的一个隐含的特性就是监听,也就是任何一个节点在发送数据之前,需要先监听信道,只有信道空闲的时候才会发送数据,这么做可以降低冲突的概率,这是监听 的特性,接下来看CD, CD指的是Collection Detection,也就是冲突检测的意思。所以CSMA/CD 这种协议是在CSMA协议监听机制的基础上,再增加冲突检测的新的机制。来看一下这个协议是怎么工作的,总结起来一句话:先听后发,边听边发,冲突停发,随机重发。首先先听后发这个特点我们在CSMA协议当中其实有过介绍。什么意思呢,比如现在B结点正在往信道上发送数据,B节点发送的数据会充斥整个信道,与此同时,如果A节点也想要发送数据,在发送数据之前,它会先监听信道,通过监听发现此时信道不空闲,于是A节点暂时不发送数据。在CSMA/CD协议当中,如果信道此时不空闲,节点会持续监听,也就是它具备坚持的特性,会坚持监听,直到信道空闲的时候,就会立即把自己的数据帧发送到信道上,也就是说CSMA/CD协议具备1-坚持的特性。信道不空闲的时候坚持监听,当信道空闲的时候会以1的概率立即把帧发送到信道上,所以CSMA/CD 协议,本质上是1-坚持CSMA协议的一个进化版本。回到刚才这个故事,根据刚才的分析我们知道,A节点会持续监听信道,直到某一个时刻B节点撤销了自己的信号,此时A节点发现信道空闲,于是他会把自己的信号发送到信道上,这就是第一个特性先听后发。 第二个特性叫做边听边发,什么意思呢?当A结点往这个信道上发送数据的时候,与此同时,其他结点也有可能会往信道上发送数据,如果说其他节点也在往信道上发送数据,此时就会出现信号的冲突,对于A节点来说,一边发送自己的数据,一边还要继续监听有没有其他节点的信号被打到信道上了,如果发现了这种情况,说明发生了冲突,而一旦检测到冲突,A结点就会立即停止发送自己的数据帧。

用流程图表示就是这样的,当结点一边发送自己数据帧的时候,一边继续监听信道,如果在发送的过程当中检测到了冲突,就会立即停止发送当前的数据帧,同时根据冲突的次数进行相应的处 理,这个一会再展开探讨,如果说在整个发送的过程当中都没有检测到冲突,也就是发送的过程当中没有监听到其他节点发来的数据,或者说信号,就说明数据帧是能够传输成功的,当一个数据帧传输成功之后就可以去传输下一个数据帧。接下来探讨发生冲突的时候,应该怎么处理。首先需要判断这是第几次发生冲突,如果当前发送的这个数据帧已经是第16次发生冲突了,是不是就说明此时网络可能非常的忙,网络的负载特别高,在这种情况下,就会直接放弃传输当前的数据帧,紧接着把情况报告给网络层。这是冲突的次数特别多的情况,如果冲突的次数还不是特别多,冲突的次数k小于等于15 的话,我们会用一种算法确定一个随机的时间,等待这段随机时间之后,再重新尝试发送当前的数据帧。

先结合这张图示来解释一下,为什么当一个结点正在发送数据的时候,有可能检测到冲突。来看这样的一个故事:假设A结点刚开始监听到信道空闲,他会把自己的信号或者说自己的数据发送到信道上,我们知道信号的传播是有速度的,比如说在某一个时刻A结点发出的数据沿着信道传播,已经传播到红色箭头指的位置了,在这种情况下,B节点尝试去监听信道,它会发现信道是空闲的,因为A结点发过来的信号还没有到达B结点位置,所以B结点会误以为信道此时是空闲的,于是B结点也会把自己的数据发送到信道上。随着时间的推移,A结点的信号过一段时间,就可以被B结点检测到,所以B结点在发出一小段数据之后会检测到冲突,同时就会停止发送B节点自己的数据帧,这就是冲突停发的意思。来看B结点发出的小坨数据,接下来会发生什么情况?我们知道B结点发出的小部分数据,它其实就是一些电信号或者说电磁波信号,这些信号一旦发送到信道上之后,并不会停在这个位置,虽然B节点停发了,它停发只是意味着并不会把更多的比特,更多的信号发送到信道上,之前已经发出来的信号,它还会沿着信道继续往前传播,也就是说当这些信号传播到A结点位置的时候,其实A结点也能检测到,原来在我发送的这个过程当中,B节点也在尝试发送数据,于是A节点也可以检测到冲突,一旦检测到冲突,就会立即停止发送,并且随机等待一段时间,再次尝试重发。接下来我们要看随机等待的时间是怎么确定的。

根据冲突的次数来决定,先引入一个概念叫做争用期,先不管争用期的具体定义,现在只需要知道争用期是一个固定长度的时间,知道这点就可以了。可以假设争用期是两毫秒,当发生冲突的时候,随机等待的时间的长短应该是等于r倍的征用期,这儿的r是一个随机数,这个随机数又是如何确定的呢,当冲突的次数小于等于十次的时候,会在0到2的k次方减一这个区间内取一个随机数r, 直接代入具体的数值,这样看着会更直观一些,假设 k=1,也就是第一次发生冲突的时候,会在0到2的一次方减一,也就是0到1之间选择一个随机数r,这意味着当第一次发生冲突的时候r有可能取到的值只会是两个要么等于0,要么等于1。如果第二次发生冲突,我们可能在0到2的2次方减一,也就是0到3区间内去取一个随机数r。因此,当第二次发生冲突的时候r可能的取值就是0、1、2、3。紧接着当k=3,第三次发生冲突的时候,有可能在0到2的3次方减一,也就是0到7之间取一个随机数r,因此随机数r在第三次冲突的时候,它的取值范围就变成了0、1、2、3、4、5、6、7中的任一个数,r可能的取值就变多了,刚才说确定了随机数之后,就可以确定接下来随机等待的这段时间到底是多长,用r乘以争用期的长度,刚才假设的是争用期的长度是两毫秒,这就意味着当第一次冲突的时候,下一次尝试重传的时间应该是等于0×2,或者1×2,有可能随到两个值,也就是说下一次重传的时间可能是现在就重传,不用等,0毫秒,或者再等待两毫秒的时间,再去尝试重传。同样的道理,当第二次发生冲突的时候,随机等待的时间可能是0毫秒,可能是0毫秒,4、6可能这四种情况,同样的道理,第三次重传的时候,有可能等待的时间是不是就0毫秒,或者2毫秒,或者等待4毫秒,或者.....,最多有可能需要等待 14 毫秒。因为当k=3的时候,r最多取到7,当冲突发生的次数越多的时候,随机等待的这个时间的范围也会逐渐的扩大,为什么要这么设计呢?因为冲突发生的次数越多,越说明此时网络是越拥堵的,越拥堵网络的负载会越高,所以冲 突发生越多,就越应该让各个节点下一次尝试重传的时间尽可能的错开,所以冲突次数越多,随机数r可能取值范围就越大,相应的用r乘以争用期获得的随机等待时间的范围就可能被拉开,各个节点之间下一次尝试重传发生冲突的概率就可以被降低,就是这样的一个道理。这地方还需要注意一个小细节,就是k=10是一个分水岭,当k小于等于10的时候,按照刚才说的方式去确定整数r的取值范围,当k大于10的时候,随机数的取值区间就不会再扩大了,最多就停留在0到1023这个区间内去取r的值。所以检测到冲突的时候,第10次发生冲突和第16次发生冲突,是两个比较重要的分水岭,当第10次发生冲突之后,随机数r的取值区间就不会再继续扩大,当第16次发生冲突的时候,就认为这个网络实在是太堵了,这个时候就放弃传输当前的数据帧,并且报告给上层网络层。这就是CSMA/CD协议的一个主要流程。关于什么是争用期以及争用期的长度到底是怎么确定的,放在之后再来探讨。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档