计算机网络-CSMA/CD协议

08月06日 收藏 0 评论 10 java开发

计算机网络-CSMA/CD协议

转载声明:文章来源https://blog.csdn.net/syzdev/article/details/104637141

1 前言
最初的以太网是将许多计算机都连接到一根总线上。易于实现广播通信。当初认为这样的连接方法既简单又可靠,因为总线上没有有源器件,总线上每一个计算机都能检测到其他计算机发出的信号,这就是广播通信方式

但有时我们想一对一的通信,这种情况下就要在发送数据帧的首部中写明接收主机的地址,如图,若B向D发送数据时,可以指明接收主机D的地址,由于只有D的地址和数据中的接收地址相同,所以只有D接收到数据,其他主机检测到不是发给自己的数据则会丢弃数据,这样就在广播通信中实现了一对一的通信

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

1、采用较为灵活的无连接的工作方式
2、以太网发送的数据都使用曼彻斯特 (Manchester) 编码

2.1 无连接的工作方式
不必先建立连接就可以直接发送数据
对发送的数据帧不进行编号,也不要求对方发回确认
这样做的理由是局域网信道的质量很好,因信道质量产生差错的概率是很小的
以太网提供的服务是不可靠的交付,即尽最大努力的交付当目的站收到有差错的数据帧时就丢弃此帧,其他什么也不做。差错的纠正由高层来决定
如果高层发现丢失了一些数据而进行重传,但以太网并不知道这是一个重传的帧,而是当作一个新的数据帧来发送

2.2 使用曼彻斯特 (Manchester) 编码

关于曼彻斯特 (Manchester) 编码,可参考我的这篇文章 计算机网络-关于信号的调制

2.3 存在的问题
总线型以太网在同一时间内只允许一台计算机发送数据,那么该如何协调各个计算机之间的工作?下面介绍的 CSMA/CD协议 就是解决方案

3 CSMA/CD协议
CSMA/CD 含义:载波监听多点接入 / 碰撞检测 (Carrier Sense Multiple Access with Collision Detection)
多点接入”表示许多计算机以多点接入的方式连接在一根总线上
载波监听”是指每一个站在发送数据之前和发送过程中要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞

总线上并没有什么“载波”。因此, “载波监听”就是用电子技术检测总线上有没有其他计算机发送的数据信号,如上图所示
碰撞检测”就是计算机边发送数据边检测信道上的信号电压大小
当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)
当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞
在发生碰撞时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来
每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送,免得继续浪费网络资源,然后等待一段随机时间后再次发送
CSMA/CD的工作流程图:

3.1 存在的问题
既然每一个发送站在发送之前都已经检测到信道当前为“空闲”那为何还会出现“碰撞”呢?

这是因为数据电磁波在总线上传输时是以有限的速度传播的,如某个发送站监听到总线是空闲时,总线并非真的是空闲的,如下图中A,B两个站点距离为1km,之间用同轴电缆相连,电磁波在1km电缆上的传播时延大约为5ms,因此从A发向B的信息,大约要经过5ms才能到达B,若B在A发送给自己的消息之前也发送了一个数据出去,则必然在某个时间,B发出的数据会和A发出的数据在总线上发生碰撞

我们把总线上端到端的一趟时间记为 τ,图中当τ为0时A发送数据,B检测到总线为空闲,在时间 τ-δ 时,A发送的数据还没有到达B,B因为检测到总线空闲,就开始发送数据,设在τ-δ/2 时,发生了碰撞,这时由于数据还在总线上传输,A和B都不知道数据发生了碰撞,但当 t=τ 时,A的数据发送到B了,B就检测到碰撞了于是停止发送数据,在时间 t=2τ-δ 时,B发送给A的数据到达了A,A检测到了碰撞,也停止发送了数据

3.2 重要特性
使用 CSMA/CD 协议的以太网不能进行全双工通信而只能进行双向交替通信(半双工通信)
每个站在发送数据之后的一小段时间内,存在着遭遇碰撞的可能性
这种发送的不确定性使整个以太网的平均通信量远小于以太网的最高数据率
3.3 争用期
最先发送数据帧的站,在发送数据帧后至多经过时间 2τ (两倍的端到端往返时延)就可知道发送的数据帧是否遭受了碰撞
以太网的端到端往返时延 2τ 称为争用期,或碰撞窗口
经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞
争用期的长度:

以太网取 51.2 us 为争用期的长度
对于 10 Mb/s 以太网,在争用期内可发送512 bit,即 64 字节
以太网在发送数据时,若前 64 字节没有发生冲突,则后续的数据就不会发生冲突
最短有效帧长:

如果发生冲突,就一定是在发送的前 64 字节之内
由于一检测到冲突就立即中止发送,这时已经发送出去的数据一定小于 64 字节
以太网规定了最短有效帧长为 64 字节,凡长度小于 64 字节的帧都是由于冲突而异常中止的无效帧
3.4 二进制指数类型退避算法 (truncated binary exponential type)
发生碰撞的站在停止发送数据后,要推迟(退避)一个随机时间才能再发送数据,这个随机时间就要用到二进制指数类型退避算法:

确定基本退避时间,一般是取为争用期 2τ
定义重传次数 k ,k ≤ 10,即 k = Min[重传次数, 10]
从整数集合[0,1,…, (2 k 2^k2
k
-1)]中随机地取出一个数,记为 r。重传所需的时延就是 r 倍的基本退避时间
当重传达 16 次仍不能成功时即丢弃该帧,并向高层报告
3.5 强化碰撞
当发送数据的站一旦发现发生了碰撞时:

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

C 10条回复 评论
寒武紀三葉草

怎么没能早点看到你这篇文章呢

发表于 2023-07-10 21:00:00
0 0
卫澜

进我收藏夹吃灰去吧

发表于 2021-11-19 22:00:00
0 0
三缄

连刷十节了!学到好多!

发表于 2021-11-06 22:00:00
0 0
yoonA

中枪,我脑子里全是错误回答

发表于 2021-09-12 20:55:00
0 0
Yolk

现在大二,希望自己能有坚定的觉悟和脚踏实地的努力

发表于 2021-09-12 12:15:00
0 0
维他狂热爱好者

太强了,学完框架再回来看

发表于 2021-09-12 10:20:00
0 0
一只小鹿哈

不错

发表于 2021-09-11 12:45:00
0 0
RAINBOW

在大学没有那么优秀的经历怎么办

发表于 2021-09-10 16:45:00
0 0
Bunny

大三下,非重点二本,信息管理与信息系统专业,不打算考研考公啥的,上学期开始接触和学习前端,但总觉得混乱,每天都很焦虑,后悔大一大二为啥不好好规划,不好好学,现在一分钟巴不得掰成两分钟花,大一大二的学弟学妹们,真的要珍惜这两年,不要像我一样到了大三每天都焦虑,希望我有一天也能带着已完成的目标跟大家分享。

发表于 2021-09-09 23:15:00
0 0
RAINBOW

非常细致,好评!

发表于 2021-09-09 15:10:00
0 0