数据链路层-第六节媒体接入控制2:载波监听多址接入-碰撞检测(CSMA-CD)协议
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据链路层-第六节媒体接入控制2:载波监听多址接入-碰撞检测(CSMA-CD)协议相关的知识,希望对你有一定的参考价值。
文章目录
本节对应视频
一:载波监听多址接入/碰撞检测(CSMA/CD)协议概述
(1)概述
载波监听多址接入/碰撞检测(CSMA/CD)协议:共享式以太网需要解决的一个非常重要的问题就是如何协调总线上各主机的工作,避免冲突
- 上图:总线本身空闲,主机B和主机C同时发送数据,则传输信号发生碰撞
- 下图:主机B正在占用总线传输数据,主机C也要发送数据,则传输信号发生碰撞
早期共享式以太网采用载波监听多址接入/碰撞检测(CSMA/CD)协议解决该问题
- 多址接入MA: 多个站连接在一条总线上,竞争使用总线
- 载波监听CS: 每一个站在发送帧之前先要检测一下总线上是否有其他站点在发送帧,也即先听后说
- 若检测到总线空闲96比特时间,则发送这个帧
- 若检测到总线忙,则继续检测并等待总线转为空闲96比特时间,然后再发送这个帧
- 注意:96比特时间是指发送96比特所耗费的时间,也称为帧间最小间隔,其作用是使接收方可以检测出一个帧的结束,同时也使得其他站点能够有机会平等竞争信道并发送帧
- 碰撞检测CD: 每一个发送帧的站边发送边检测碰撞,也即边听边说
- 一旦发现总线上出现碰撞,就立即停止发送,退避一段随机时间后再次发送,也即一旦冲突,立即停说,等待时机,重新再说
(2)举例说明
如下图,多个主机连接到一根总线上,各主机随机发送帧
假设主机C要发送帧,它首先进行载波监听,检测到总线空闲96比特时间后,就可以发送帧了
假设主机C在使用总线发送帧的过程中,主机B也要发送帧,主机B进行载波监听,发现总线忙,于是持续检测总线,一旦发现总线空闲96比特时间则立即发送帧,边发送帧还要边检测碰撞,只要没检测到碰撞则可以继续发送帧的剩余部分
假设在主机B发送帧的过程中,主机C进行载波监听,发现总线空闲96比特时间后立即发送帧,这会导致产生碰撞
在产生碰撞的时刻,主机B和主机C都在边发送帧边检测碰撞,但是都检测不到碰撞
碰撞信号沿总线传播,主机C会比主机B更早检测到碰撞并停止发送,退避一段随机时间后再重新发送之前的帧
当主机B检测到碰撞后,立即停止发送,退避一段随机时间,再重新发送之前的帧
(3)强化碰撞
强化碰撞:以太网还采取一种叫做强化碰撞的措施。这就是当发送帧的站点一旦检测到碰撞,除了立即停止发送帧外,还要再继续发送32比特或48比特的人为干扰信号(Jamming Signal) ,以便有足够多的碰撞信号使所有站点都能检测出碰撞
二:其他概念
(1)争用期(碰撞窗口)
争用期(碰撞窗口):由于碰撞信号的传送也是需要一定时间的,所以每一个主机在自己发送帧之后的一小段时间内,存在着遭遇碰撞的可能性,这一小段时间是不确定的,它取决于另一个发送帧的主机到本主机的距离,但不会超过总线的端到端往返时延,即一个争用期时间。主机最多经过 2 τ 2\\tau 2τ的时长就可以检测到本次发送是否遭受到了碰撞,因此以太网的端到端往返传播时延 2 τ 2\\tau 2τ就称为争用期或碰撞窗口。经过争用期这段时间还没有检测到碰撞才能肯定这次发送不会发生碰撞
如下图所示,主机A和主机B处于总线型以太网的两端,以太网单程端到端传播时延记为 τ \\tau τ,纵坐标为时间:
- 假设时刻0主机A要发送帧,当检测总线96比特时间后,立即发送
- 在时刻 τ − δ \\tau-\\delta τ−δ,主机D也要发送帧,当检测总线96比特时间后,立即发送
- 这里,主机D检测到总线空闲,但实际上总线并不空闲,只是检测不出来,就会导致碰撞
- 发生碰撞的时刻为 τ − δ 2 \\tau-\\frac\\delta2 τ−2δ
- 碰撞信号陆续到达主机D和主机A
- 主机D检测到碰撞的时刻为 τ \\tau τ
- 主机A检测到碰撞的时刻为 2 τ − δ 2\\tau -\\delta 2τ−δ
显然,在以太网中发送帧的主机越多,端到端往返传播时延越大,发生碰撞的概率就越大。因此,共享式以太网不能连接太多的主机,使用的总线也不能太长。以太网把争用期定为512比特发送时间,即51.2 u s us us, 因此其总线长度不能超过5120m,但考虑到其他一些因素,如信号衰减等,以太网规定总线长度不能超过2500m
(2)最小帧长
最小帧长:以太网的帧长不能太短,以太网规定最小帧长为64字节,也即512比特(512比特时间为争用期),如果要发送的数据确实很少,那么必须加入一些填充字节,使帧长不小于64字节。以太网的最小帧长确保了主机可在帧发送之前就检测到该帧的发送过程中是否遭遇了碰撞
- 如果在争用期(共发送64字节)没有检测到碰撞,那么后续发送的数据就一定不会发生碰撞
- 如果在争用期内检测到碰撞,就立即中止发送,这时已经发送出去的数据一定小于64字节, 因此凡长度小于64字节的帧都是由于无碰撞无异常而中止的无效帧
例如下图
-
主机A正在给主机D发送一个很短的帧,边发送边检测碰撞
-
很快主机A便将该帧发送完毕,之后就不再对该帧进行碰撞检测
-
在该帧的传输过程中,主机C也要发送帧,主机C检测到总线空闲96比特时间后就立即发送帧,尽管总线此刻并不空闲,这会导致碰撞
-
主机D最终会收到主机A发送的、并遭遇碰撞的帧,主机D会将该帧丢弃
-
但对于主机A而言,它不知道已发送完毕的该帧遭遇了碰撞,不会重发该帧
(3)最大帧长
最大帧长:以太网的帧长不能太长,如下图
下图是以太网V2的MAC帧格式,其数据载荷的最大长度为1500字节,加上首部和尾部共计,帧的最大长度为1518字节
(4)退避时间
退避时间:退避时间采用截断二进制指数退避算法进行,它规定退避时间=基本退避时间×随机数 r r r
- 基本退避时间:取值为争用期 2 τ 2\\tau 2τ
- 随机数 r r r:从离散的整数集合 0 , 1 , . . . , ( 2 k − 1 ) \\0,1,.. .,(2^k-1)\\ 0,1,...,(2k−1)中随机选出一个数,其中 k = M i n [ 重传次数 , 10 ] k=Min[重传次数, 10] k=Min[重传次数,10]
以重传1次、2次和12次为例,计算可能的退避时间如下表,从该表中可以看出
- 若连续多次发生碰撞,就表明可能有较多的主机参与竞争信道。但使用.述退避算法可使重传需要推迟的平均时间随重传次数而增大(这也称为动态退避),因而减小发生碰撞的概率,有利于整个系统的稳定
- 当重传达16次仍不能成功时,表明同时打算发送帧的主机太多,以至于连续发生碰撞,则丢弃该帧,并向高层报告
(5)信道利用率
信道利用率:如下图所示,横坐标为时间,总线上的主机可能发生多次碰撞,进行多次退避后,成功发送了一个帧,将帧的发送时延记为 T 0 T_0 T0。在最极端的情况下,源主机在总线的一端,而目的主机在总线的另一端,因此还要经过一个单程端到端传播时延 τ \\tau τ后,总线才能完全进入空闲状态
考虑以下这种理想情况:
- 各主机发送帧都不会产生碰撞
- 总线一旦空闲就有某个主机立即发送帧:这意味着争用期不存在了
此时发送一帧占用总线的时间为 T 0 + τ T_0+\\tau T0+τ,故极限信道利用率为
S m a x = T 0 T 0 + τ = 1 1 + τ T 0 = 1 1 + a S_max=\\fracT_0T_0+\\tau=\\frac11+\\frac\\tauT_0=\\frac11+a Smax=T0+τT0=1+T0τ1=1+a1
可以看到,参数 a a a的取值应该尽量小,以提高信道利用率,这意味着
- 以太网端到端距离应该受到限制
- 以太网帧的长度应该尽量长一些
三:流程图展示
(1)帧发送流程
(2)帧接收流程
以上是关于数据链路层-第六节媒体接入控制2:载波监听多址接入-碰撞检测(CSMA-CD)协议的主要内容,如果未能解决你的问题,请参考以下文章