我是靠谱客的博主 谨慎吐司,最近开发中收集的这篇文章主要介绍以太网的CSMA/CD协议,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

以太网

Ethernet的核心的技术就是载波侦听访问协议(carrier sense Multiple access with collision detection,CSMA/CD)

CSMA/CD协议

基本原理:站在发送数据之前,先侦听信道上是否有其他站发送的载波信号,若有,说明信道正在忙;若没有,信道是空闲的,然后根据预定的策略决定;

  1. 若信道空闲,是否立即发送;
  2. 若信道正忙,是否继续侦听

一.即使信道是空闲的,若立即发送仍然可能会发生冲突。

一种情况是远端的站刚开始发送,载波信号尚未传到侦听站,这时候若侦听站立即发送,就会和远端的站发生冲突;另一种情况是虽然暂时没有站发送,但是碰巧两个站都看到了这种情况,都开始发送数据,这样也会发生冲突。所以,上面的控制策略的第1点就是想要避免这种情况虽然稀少,但仍然有可能发生的冲突。二. 若信道正忙,如果坚持侦听,发送的站一旦停止就立即抢占信道,但是有可能几个站同时侦听,同时都抢占信道,从而发生冲突。以上控制策略的第二点就是进一步优化侦听算法,使得有些侦听站或所有侦听站都后退一段随机时间然后在侦听,以避免这种冲突。

载波侦听只能减少冲突的概率,不能完全避免冲突。当两个帧发生冲突之后,若继续发送,将会浪费网络带宽。如果帧比较长,对带宽的浪费就很可观了。为了进一步改进带宽的利用率,发送站应采取边发送边侦听的冲突检测方法。即

  1. 发送期间同时接收,并把接收的数据与站中存储的数据进行比较;
  2. 若比较结果一致,若结果一致,说明没有冲突,重复(1);
  3. 若比较结果不一致,说明发生冲突,立即停止发送,并发送一个简短的干扰信号(Jamming),是所有站点都停止发送。
  4. 发送Jamming信号后,等待一段随机长的时间,重新侦听,然后再尝试着着重新发送。

带冲突检测的CSMA算法把浪费带宽的时间减少到检测冲突的时间。对于局域网来说这个时间很短。如下图所示,说明了检测冲突需要的最长时间。

 

设图中的两端的站A和B相聚1KM,用同轴电缆相连。电磁波再1KM电缆中的传播时延约为5微秒,因此,A向B发出的数据,在约5微秒后才能传送到B。换句话说,B若在A发送的数据到达B之前发送自己的数据帧(因为这时B的载波侦听不到A发送的信息),则必然在某一个时间和A发送的数据帧产生冲突。冲突的结果是两个帧都变得无用。在局域网分析中,常把总线上的单程端到端的传播时延记为T。从图中可以看出,这样,当A发送数据之后,最迟要经过2T才可以判断自己发送的数据可其他站发送的数据是否有冲突。由于局域网上任意两个站之间的时延有长有短,因此局域网必须按最坏的情况打算,所以T取总线两端的两个站之间传播时延(这两个站之间的距离最大)。

显然,在使用CSMA/CD协议的时候,一个站不可能同时接收和发送。

因为在每次传送过程中,接收模块被用于侦听冲突了。因此使用CSMA/CD协议的以太网不可能进行全双工通信,而只能采用半双工通信。

下面是上图的一些重要的时刻。

  1. 在t=0时,A发送数据。B检测到信道为空闲。
  2. 在t=T-Q时(这里T>Q>0),A发送的数据还没有到达B时,由于B检测到信道是空闲的,因此B发送数据。
  3. 经过时间Q/2后,即在t=T-Q/2时,A发送的数据和B发生的数据发生了冲突。但是这时A和B都不知道发生了冲突。
  4. 在t=T时,B检测到发生了冲突,于是停止发送数据。
  5. 在t=2T-Q时,A也检测到发生了冲突,于是也停止发送数据。

由此可见,每一个站点自己发送数据之后的一小段时间内,存在着遭遇冲突的可能性,并且这一小段时间是不确定的,它取决于另一个发送数据的站到本站的距离。因此,以太网并不能保证某一段时间之内一定能够把自己的数据帧成功的发送出去(因为存在产生冲突的可能)。以太网的这一特点称为发送的不确定性。如果希望在以太网上产生冲突的机会很小,必须使整个以太网的平均通信量远小于以太网的最高数据率。因此,以太网的端到端往返时间2T称为争用期(contention period),争用期又称为冲突窗口(collision window),这是因为一个站在发送完数据后,只有通过争用期的“考验”,即经过争用期这段时间还没有检测到冲突,才能肯定这次发送不会发生冲突。

与冲突检测相关的参数是最小帧长。设想在图中的A站发送的帧比较短,在2r内已经发送完毕,这样的A站在整个发送期间检测不到冲突,从而错误的以为已经成功地发送出去了。为了避免发生这种冲突,所有的帧至少需要2r才能发送完毕。这样可以保证当冲突回到发送方的时候,传送过程仍在运行,网络标准中根据设计的数据速率和最大网段长度规定了最小帧长

Lmin=2R*d/v

式中R为网络的速度;d为最大网络段长度;v为信号传播速度。

从公式中可以看出,随着网络速度R的提高,要保证等式成立,要么最小帧长Lmin成比例的增加,要么最大网段的长度d成比例缩短。

   

 

对于一个最大网络段长为2500m(由粗同轴电缆构成),具有4个中继器的10MpbsLAN来说,在最差情况下,往返一来回的时间大约为50微秒,其中包括了通过4个中继器所需要的时间。这样在10Mpbs的情况下,一位需要100ns,所以50微秒要求帧至少为500位(50微秒/100ns),考虑到加上一点安全余量,该数字被增加到512位,或者说64B。这样以太网的争用期变为了51.2微秒(512b/10Mpbs)。对于小于64B的帧,可以通过填充域来扩充到64B长。

由此可以看出,以太网在发送数据时,如果帧的前64B没有发生冲突,那么后续的数据就不会发生冲突。换句话说,如果发生冲突,就一定是在发送的前64B之内。由于一检查到冲突就会立即终止发送,这时,已经发送出去的数据一定是小于64B的,因此以太网闯关规定凡长度小于64B的帧都是由于冲突而异常终止的无效帧。接收站对收到的帧要检查长度,小于最小帧长的帧被认为是冲突碎片而被丢弃。

采用CSMA/CD算法检测到冲突之后,除了立即停止发送数据外,还要发送一个干扰信号(Jamming),以便让所有用户都知道现在发生了冲突。这里的干扰信号为32比特或者48比特。然后后退一段时间重新发送,后退时间的多少对于网络的稳定性有很大影响。特别在负载很重的情况下,为了避免很多站连续发生冲突,需要设计有效的后退算法。截断二进制指数退避算法让发生冲突的站在停止发送数据后,不是等待信道变为空闲就立即发送数据,而是推迟一个随机的时间,这样做的目的是为了重传时再发生冲突的概率很小。具体的退避算法如下:

  1. 确定基本退避时间,就是他的争用期为2T,以太网把争用期定为51.2微秒。
  2. 从离散的整数集合【0,1,...,(2(k)次方-1)】中随机取出一个数,记为r。重传应退后的时间就是r倍的争用期。上面的参数K按下面的公式计算:

 K=Min【重传次数,10】

 由此可见,当重次数不超过10次,参数K等于重传次数;当重传次数超过10次,参数K 的值为10。

  1. 当重传达到16次仍然不能成功时(这表明同时打算发送数据的站太多,以至连续发生冲突),则丢失该帧,并向高层报告。

例如,在第一次重传时,k=1,随机数r从整数{0,1}中随机选择一个数,因此重传的站可选择的重传推迟时间为0或2T,在这两个时间中随机选择一个。

若在发生冲突,选择第2次重传,k=2,随机数r从整数{0,1,2,3}中选择一个数,因此重传推迟的时间从0,2T,4T,6T中随机的选择一个。

若在发生冲突,选择第三次重传,K=3,随机数r从整数{0,1,2,3,4,5,6,7}中随机的选择一个数,因此重传推迟的时间从0,2T,4T,6T,8T,10T,12T,14T,在这些时间中随机的选择一个。

以太网还规定了帧间的最小间隔为9.6微秒,相当于96比特时间。这样做是为了使刚刚收到的数据帧的站的接收缓存来得及清理,做好接收下一帧的准备。                    

 

最后

以上就是谨慎吐司为你收集整理的以太网的CSMA/CD协议的全部内容,希望文章能够帮你解决以太网的CSMA/CD协议所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部