链路层:CSMA/CD 协议

禁止码迷,布布扣,豌豆代理,码农教程,爱码网等第三方爬虫网站爬取!

总线实现的广播通信

总线连接

最初的以太网是将许多计算机都连接到一根总线上,因为总线上没有有源器件,所以认为这样的连接方法既简单又可靠。当一台计算机发送数据时,总线上的所有计算机都能检测到这个数据。但是并不是在任何时候都需要广播通信,一对一通信需要用 MAC 地址来确定目的地。例如总线上的每一个工作的计算机都能检测到 B 发送的数据信号。,由于只有计算机 D 的地址与数据帧首部写入的地址一致,因此只有 D 才接收这个数据帧。其他所有的计算机(A, C 和 E)都检测到不是发送给它们的数据帧,因此就丢弃这个数据帧而不能够收下来。

以太网通信

为了通信的简便,以太网采取了两种重要的措施:

  1. 采用较为灵活的无连接的工作方,不必先建立连接就可以直接发送数据。
  2. 对发送的数据帧不进行编号,也不要求对方发回确认。

这样做的理由是局域网信道的质量很好,因信道质量产生差错的概率是很小的。由此可见以太网提供的服务是不可靠的交付,即尽最大努力的交付。当目的站收到有差错的数据帧时就丢弃此帧,其他什么也不做,差错的纠正由高层来决定。如果高层发现丢失了一些数据而进行重传,但以太网并不知道这是一个重传的帧,而是当作一个新的数据帧来发送。
以太网发送的数据都使用曼彻斯特 (Manchester) 编码,它的缺点是所占的频带宽度比原始的基带信号增加了一倍。

CSMA/CD协议

基于总线的以太网中只要有一台计算机发送数据,总线的传输资源就会被占用,因此同一时间只能允许一台计算机发送数据。以太网采用的 CSMA/CD (载波监听多点接入/碰撞检测)协议来协调资源,该协议的要点是:

  1. 多点接入:表示许多计算机以多点接入的方式连接在一根总线上。
  2. 载波监听:用电子技术检测总线上有没有其他计算机发送的数据信号。每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有则暂时不要发送数据,以免发生碰撞。
  3. 碰撞检测:计算机边发送数据边检测信道上的信号电压大小。

使用 CSMA/CD 协议的以太网不能进行全双工通信,只能进行双向交替通信(半双工通信)。这是因为每个站在发送数据之后的一小段时间内,存在着遭遇碰撞的可能性,这种发送的不确定性使整个以太网的平均通信量远小于以太网的最高数据率。

碰撞检测

当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞。所谓“碰撞”就是发生了冲突。因此“碰撞检测”也称为“冲突检测”。在发生碰撞时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来。每一个正在发送数据的站发现总线上出现了碰撞,就要立即停止发送,免得继续浪费网络资源,然后等待一段随机时间后再次发送。
为什么要进行碰撞检测?由于电磁波在总线上的传播速率是有限的,当某个站监听到总线是空闲时,也可能总线并非真正是空闲的。A 向 B 发出的信息,要经过一定的时间后才能传送到 B。B 若在 A 发送的信息到达 B 之前发送自己的帧 (因为这时 B 的载波监听检测不到 A 所发送的信息),则必然要在某个时间和 A 发送的帧发生碰撞。碰撞的结果是两个帧都变得无用,所以需要在发送期间进行碰撞检测以避免冲突。

争用期

设单程端到端时延为 t,最先发送数据帧的站,在发送数据帧后至多经过时间 2t(两倍的端到端往返时延)就可知道发送的数据帧是否遭受了碰撞。以太网的端到端往返时延 2t 称为争用期或碰撞窗口。经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。
发送碰撞后,应该什么时候重传呢?以太网使用二进制指数类型退避算法来确定。发生碰撞的站在停止发送数据后,要推迟一个随机时间才能再发送数据。设基本退避时间取为争用期 2t,从整数集合 [0, 1, … , (2^k-1)] 中随机地取出一个数记为 r,重传所需的时延就是 r 倍的基本退避时间。参数 k 按公式“k = Min[重传次数, 10]”计算,当 k < 10 时,参数 k 等于重传次数。当重传达 16 次仍不能成功时即丢弃该帧,并向高层报告。

最短有效帧长

10 Mbit/s 以太网取 51.2 us 为争用期的长度,对于 10 Mbit/s 以太网,在争用期内可发送 512 bit,即 64 字节。如果发生冲突,就一定是在发送的前 64 字节之内。由于一检测到冲突就立即中止发送,这时已经发送出去的数据一定小于 64 字节。以太网规定了最短有效帧长为 64 字节,凡长度小于 64 字节的帧都是由于冲突而异常中止的无效帧。

强化碰撞

当发送数据的站一旦发现发生了碰撞时,需要完成以下 2 步:

  1. 立即停止发送数据;
  2. 再继续发送若干比特的人为干扰信号(jamming signal),以便让所有用户都知道现在已经发生了碰撞。

CSMA/CD 工作流程

  1. 准备发送:发送之前必须先检测信道。
  2. 检测信道:若检测到信道忙,则应不停地检测,一直等待信道转为空闲。若检测到信道空闲,并在 96 比特时间内信道保持空闲(保证了帧间最小间隔),就发送这个帧。
  3. 检查碰撞:在发送过程中仍不停地检测信道,即网络适配器要边发送边监听。这里只有两种可能性:发送成功时,在争用期内一直未检测到碰撞,这个帧肯定能够发送成功。发送完毕后,其他什么也不做。然后回到 (1)。发送失败时,在争用期内检测到碰撞,这时立即停止发送数据,并按规定发送人为干扰信号。适配器接着就执行指数退避算法,等待 r 倍 512 比特时间后,返回到步骤 (2),继续检测信道。但若重传达 16 次仍不能成功,则停止重传而向上报错。

信道利用率

信道被占用的情况

多个站在以太网上同时工作就可能会发生碰撞。当发生碰撞时,信道资源实际上是被浪费了。因此,当扣除碰撞所造成的信道损失后,以太网总的信道利用率并不能达到 100%。
假设 t 是以太网单程端到端传播时延。则争用期长度为 2t,即端到端传播时延的两倍,检测到碰撞后不发送干扰信号。设帧长为 L (bit),数据发送速率为 C (bit/s),则帧的发送时间为 T0 = L/C (s)。一个站在发送帧时出现了碰撞。经过一个争用期 2t 后,可能又出现了碰撞,这样经过若干个争用期后,一个站发送成功了。注意到,成功发送一个帧需要占用信道的时间是 T0 + t,比这个帧的发送时间要多一个单程端到端时延 t。这是因为当一个站发送完最后一个比特时,这个比特还要在以太网上传播。在最极端的情况下,发送站在传输媒体的一端,而比特在媒体上传输到另一端所需的时间是 t。

参数 α 与利用率

要提高以太网的信道利用率,就必须减小 t 与 T0 之比,在以太网中用参数 α 定义:

α →0,表示一发生碰撞就立即可以检测出来,并立即停止发送,因而信道利用率很高。α 越大,表明争用期所占的比例增大,每发生一次碰撞就浪费许多信道资源,使得信道利用率明显降低。为提高利用率,以太网的参数a的值应当尽可能小些。对以太网参数 α 的要求是:当数据率一定时,以太网的连线的长度受到限制,否则 t 的数值会太大。以太网的帧长不能太短,否则 T0 的值会太小,使 α 值太大。

最大值的信道利用率

在理想化的情况下,以太网上的各站发送数据都不会产生碰撞,即总线一旦空闲就有某一个站立即发送数据。发送一帧占用线路的时间是 T0 + t,而帧本身的发送时间是 T0。于是我们可计算出理想情况下的极限信道利用率 Smax 为:

参考资料

《计算机网络(第七版)》 谢希仁 著,电子工业出版社

原文地址:https://www.cnblogs.com/linfangnan/p/13398323.html