一、协议背景

  最早的以太网是总线网络,当一台计算机发送数据时,总线上所有计算机都能检测到这个数据(广
  播通讯方式)。为了通讯的简便,传统总线型以太网采取了以下措施:

  1.提供的服务为不可靠的交付:

       (1.采用较为灵活的无连接工作方式,发送数据不必先建立连接
       (2.对发送的数据帧不进行编号
       (3.不要求接收方发回确认,对有差错的数据帧(用CRC查出有差错),把帧丢掉且什么都不做,
           差错帧是否重传由高层来决定。(若高层协议决定重传,则以太网也会当做新的帧传输)

  2.数据信号采取曼切斯特编码,利用中间的跳变来区分1和0

  3.在半双工通讯方式和随机接入的前提下,利用CSMA/CD减少冲突的发生。
     因为总线上只要有数据,传输资源就会被占用。因此传统总线型以太网采取半双工的通讯方式
     和最简单的随机接入,且用CSMA/CD协议来减少因随机接入而产生的数据碰撞。
   

二、CSMA/CD概述

    1.概述:

       CSMA/CD,载波监听多点接入/碰撞检测,是广播型信道中采用一种随机访问技术的竞争型访
       问方法,具有多目标地址的特点。它通过边发送数据边监听线路的方法来尽可能减少数据碰撞
       与冲突。采用分布式控制方法,所有结点之间不存在控制与被控制的关系

      *注意:在该情形下碰撞不可能完全避免,CSMA/CD只能减少碰撞。

    2.三大要点:

         (1.多点接入。即作用在总线型网络,许多计算机以多点接入的方法连接在一根总线上

         (2.载波监听。即监听信道,检测总线上有没有其他计算机在传输数据,发送前后每个主机都
                               必须不停地检测信道

         (3.碰撞检测。即边发送边监听,适配器边发送数据边检测信道上的信号电压变化情况,以此
                               判断是否有别人在发送数据。若没有检测到电压,即信道为“空闲”状态,可以
                               发送数据。若检测到极大或极小的电压,就说明有两个及以上主机的信号发生
                               了碰撞(电磁波相遇),此时适配器就会立即停止发送。

     3.问题:

    既然已经能够监听碰撞了,为什么不能完全避免数据在总线上的碰撞呢?

      ↓↓↓↓  引出下面的解释  ↓↓↓↓

三、CSMA/CD的碰撞检测详解

依旧会发生碰撞的原因:

一段电磁波在总线上是以有限的速率进行传播的,导致从A端传播到B端的电磁波有时延,B端总是不能立马感知到其附近有数据在传输。

1.时延对载波监听的影响

   基础参数极其含义:

* τ      ----念"taò",单程的"端到端"传播时延
             *记住:电磁波在1km电缆的传播时延约为5μs = 5*10^(-6)s
* δ      ----念"deltà",单纯表示时间间隔
   文字解释:

       (1.t = 0  A端开始发送数据a,由于存在时延τ,t = τ-δ时未到达B端
       (2.t = τ-δ  之前,B端监听到其连接的信道为"空闲",于是在t = τ-δ时发送数据b
       (3.t = τ-3/2δ  时,数据a和数据b发生碰撞,两者的电磁波均出现错误
       (4.t = τ  时,数据a到达B端,B端检测出碰撞
       (5.t = 2τ-δ  时,数据b到达A端,此时数据a还没发完,A端检测出碰撞

    当t = τ时,若B端准备发送数据,则会接收到数据a的信号电压,从而立即停止发送动作。而当
    0<t<τ时,若B端开始准备发送数据,则B端不会检测到数据a,从而发送数据b造成碰撞。所以产
    生碰撞的参数δ的范围为:δ∈( 0 , τ ]。

2.解决方法

    (1.争用期/碰撞窗口

* 定义:由《时延对载波监听的影响》一图,可得,A端检测到碰撞的时间 t = 2τ-δ∈[ τ , 2τ ),也就是说A端在发送数据后经历 2τ
这个时间后还没有检测到碰撞,才能肯定这次发送不会发生碰撞。因此定义这个 2τ 为争用期
* 具体的争用期时间是固定值,为51.2μs。对于10Mbit/s的以太网来说,在争用期内可发送51.2μs*10Mbit/s = 512bit
,即64字节的数据。
    (2.退避时间

* 定义:以太网使用 截断二进制指数退避算法 来确定碰撞后的重传时机,即检测到碰撞立即停
止后,推迟(退避)一个随机的时间段,再重新准备发送数据。
* *退避的算法:
        I.基本退避时间为 2τ
        II.根据重传的次数,定义参数k,按下面的公式计算:

               k = Min[重传次数,10] 

           计算出k之后,再从离散的整数集合[0,1,...,(2^k-1)]之中随机取出一个数,记作r,那么此次
           重传应推迟/退避的时间为 r*2τ。可见当重传次数小于10次时,参数k等于重传次数本身;但
           当重传次数超过10次时,参数k变一直等于10,而整数集合也变为了[0,1,...,1023]

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

    (3.强化碰撞

* 当发送数据的主机一旦发现了发生碰撞,除了立即停止发送数据之外,还要继续发送32bit或48bit的人为干扰信号,以便让所有用户都知道现在已经发生了碰撞。
* 对于10Mbit/s的以太网,发送32bit(48bit)的时间需要3.2μs(4.8μs)

四、CSMA/CD过程总结

1.准备发送:

   适配器从网络层获得一个分组,封装成帧,放入适配器的缓存芯中等待发送。
   发送之前,先检测信道。

2.检测信道:

   若检测到信道忙,则不停地检测,一直等到信道转为空闲,并在96bit时间内一直保持空闲(保证
   了帧间最小间隔),就发送数据

3.边发送边监听,在发送过程中不停地检测信道:

  (1.成功发送:

       即在争用期间一直未检测到碰撞时,这个帧必定能够成功发送。发送完毕后什么也不做,继续
       返回准备发送步骤

  (2.发送失败:

       即在争用期间检测到碰撞时,立即中止帧的发送,并按照规定发送人为干扰信号。
       之后适配器按规定计算退避时间,等待r*2τ的时间后,再次检测信道并尝试发送(返回步骤2)。
       若重传次数达到16次仍不能成功发送,则停止重传并上报错误。

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信