CSMA/CD 协议

CSMA/CD 的意思是载波监听多点接入/碰撞检测 (Carrier Sense Multiple Access with Collision Detection):

  • 多点接入”就是说明这是总线型网络,许多计算机以多点接入的方式连接在一根总线上。

  • 载波监听”就是用电子技术检测总线上有没有其他计算机也在发送。不管在发送前,还是在发送中,每个站都必须不停地检测信道。

    • 在发送前检测信道,是为了获得发送权。如果检测出已经有其他站在发送,则自己就暂时不许发送数据,必须要等到信道变为空闲时才能发送。

    • 在发送中检测信道,是为了及时发现有没有其他站的发送和本站发送的碰撞。

  • 碰撞检测”也就是“边发送边监听 ”,即适配器边发送数据边检测信道上的信号电压的变化情况,以便判断自己在发送数据时其他站是否也在发送数据。

    • 当几个站同时在总线上发送数据时,总线上的信号电压变化幅度将会增大(互相叠加)。当适配器检测到的信号电压变化幅度超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了 碰撞。

    • 任何一个正在发送数据的站,一旦发现总线上出现了碰撞,其适配器就要立即停止发送,免得继续进行无效的发送,白白浪费网络资源,然后等待一段随机时间后再次发送。

在使用 CSMA/CD 协议时,一个站不可能同时进行发送和接收(但必须边发送边监听信道) 。因此使用 CSMA/CD 协议的以太网不可能进行全双工通信而只能进行双向交替通信(半双工通信) 。

核心概念

争用期

以太网的端到端往返时间称为争用期(contention period),争用期又称为碰撞窗口(collision window)。

一个站在发送完数据后,只有通过争用期的“考验”,即经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。这时,就可以放心把这一帧数据顺利发送完毕。

截断二进制指数退避

以太网使用截断二进制指数退避(truncated binary exponential backoff)算法来确定碰撞后重传的时机。这种算法让发生碰撞的站在停止发送数据后,不是等待信道变为空闲后就立即再发送数据,而是推迟 (这叫做退避 )一个随机的时间。

为了使各站进行重传时再次发生冲突的概率减小,具体的退避算法如下:

  1. 协议规定了基本退避时间为争用期,具体的争用期时间是 51.2µs。对于 10 Mbit/s 以 太网,在争用期内可发送 512 bit,即 64 字节。也可以说争用期是 512 比特时间

  2. 从离散的整数集合[0,1,…,2k12^k −1]中随机取出一个数,记为 r 。重传应推后的时间就是 r 倍的争用期。上面的参数 k = Min(重传次数,10) 。

  3. 当重传达 16 次仍不能成功时,则丢弃该帧,并向高层报告。

填充字节

某个站发送了一个很短的帧,但在发送完毕之前并没有检测出碰撞。假定这个帧在继续向前传播到达目的站之前和别的站发送的帧发生了碰撞,因而目的站将收到有差错的帧(当然会把它丢弃)。可是发送站却不知道这个帧发生了碰撞,因而不会重传这个帧。

为了避免发生这种情况,以太网规定了一个最短帧长 64 字节,即 512 bit如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于 64 字节。

如果发生碰撞,就一定是在发送的前 64 字节之内。由于一检测到冲突就立即中止发送,这时已经发送出去的数据一定小于 64 字 节,因此凡长度小于 64 字节的帧都是由于冲突而异常中止的无效帧。只要收到了这种无效帧,就应当立即将其丢弃。

强化碰撞

当发送数据的站一旦发现发生了碰撞时,除了立即停止发送数据外,还要再继续发送 32 比特或 48 比特的人为干扰信号 (jamming signal),以便让所有用户都知道现在已经发生了碰撞。

帧间最小间隔

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

要点

可以把 CSMA/CD 协议的要点归纳如下:

  1. 准备发送:适配器从网络层获得一个分组,加上以太网的首部和尾部,组成以太网帧,放入适配器的缓存中。但在发送之前,必须先检测信道。

  2. 检测信道:若检测到信道忙,则应不停地检测,一直等待信道转为空闲。若检测到信道空闲,并在 96 比特时间内信道保持空闲(保证了帧间最小间隔),就发送这个帧。

  3. 在发送过程中仍不停地检测信道,即网络适配器要边发送边监听。这里只有两种可能性:

    • 发送成功:在争用期内一直未检测到碰撞。这个帧肯定能够发送成功。

    • 发送失败:在争用期内检测到碰撞。这时立即停止发送数据,并按规定发送人为干扰信号。适配器接着执行指数退避算法,等待 r 倍 512 比特时间后,返回到步骤 2,继续检测信道。但若重传达 16 次仍不能成功,则停止重传而向上报错。

以太网每发送完一帧,一定要把已发送的帧暂时保留一下。如果在争用期内检测出发生了碰撞,那么还要在推迟一段时间后再把这个暂时保留的帧重传一次。

Last updated