什么是CSMA/CD

2023-11-05

英文全称:Carrier Sense Multiple Access/Collision Detection

载波侦听多路访问/冲突检测协议(CSMA/CD)

这种协议已广泛应用于局域网中,是广播型信道中采用一种随机访问技术的竞争型访问方法。它处于一种总线型局域网结构,其物理拓扑结构正逐步向星型发展。

一、背景

最早的以太网是将许多计算机都连接到一根总线上。

总线结构


总线的特点

当一台计算机发送数据的时候,总线上的所有计算机都能检测到这个数据。这就是广播通信方式。当我们需要在总线上进行一对一通信的时候,就需要使每一台计算机的网卡拥有一个与其他网卡都不同的地址。这个时候,我们在发送数据帧时,就需要表明数据帧接收站的地址。只有网卡地址与其相同时,才接受数据帧,否则丢弃帧。

为了通信方便,以太网采取了以下两种措施

  1. 采用较为灵活的无连接的工作方式,即不必建立连接就可以直接发送数据。网卡对发送的数据帧不进行编号,也不要求对方发回确认。这样做可以使以太网工作起来非常简单。以太网所提供的服务是尽最大努力的交付,即不可靠的服务。
  2. 以太网发送的数据都是使用曼彻斯特编码的信号,使用曼彻斯特编码的优点是可以很方便的解决接收端接收连续的0或者1时无法提取同步信号的问题;缺点就是因为曼彻斯特编码的规则导致每秒需要传输的码元数量增加了一倍,所以它占的频带宽度也比原始的基带信号增加了一倍。

二、概念

载波侦听(Carrier Sense)

网络上各个工作站在发送数据前,都要确认总线上有没有数据传输。

    若有数据传输(称总线为忙),则不发送数据;

    若无数据传输(称总线为空),立即发送准备好的数据。

 

多路访问(Multiple Access):

网络上所有工作站收发数据,共同使用同一条总线,且发送数据是广播式。

 

冲突检测(Collision Detection):

指发送结点在发出信息帧的同时,还必须监听媒体,判断是否发生冲突(同一时刻,有无其他结点也在发送信息帧)。

 

在CSMA中,由于信道传播时延的存在,即使总线上两个站点没有监听到载波信号而发送帧时,仍可能会发生冲突。由于CSMA算法没有冲突检测功能,即使冲突已发生,仍然将已破坏的帧发送完,使数据的有效传输率降低。

CSMA/CD是一种CSMA的改进方案。使发送站点传输过程中仍继续监听媒体,以检测是否存在冲突。如果发生冲突,信道上可以检测到超过发送站点本身发送的载波信号的幅度,由此判断出冲突的存在。一旦检测到冲突,就立即停止发送,并向总线上发一串阻塞信号,用以通知总线上其他各有关站点。

作用:通道容量就不致因白白传送已受损的帧而浪费,可以提高总线的利用率。

三、工作原理

(1)载波监听。当一个站点想要发送数据的时候,它检测网络查看是否有其他站点正在传输,即监听信道是否空闲。

(2)如果信道忙,则等待,直到信道空闲;如果信道闲,站点就传输数据。

(3)在发送数据的同时,站点继续监听网络确信没有其他站点在同时传输数据。因为有可能两个或多个站点都同时检测到网络空闲然后几乎在同一时刻开始传输数据。如果两个或多个站点同时发送数据,就会产生冲突。

(4)当一个传输节点识别出一个冲突,则立即停止该次传输,并向信道发出一个“拥挤”信号,这个信号使得冲突的时间足够长,让其他的节点都能发现该冲突。

(5)其他节点收到拥塞信号后,都停止传输,等待一个随机产生的时间间隙(回退时间,Backoff Time)后重发数据。

四、进一步解释

  • 关于【冲突检测】的进一步解释:

具体地,就是网卡边发送数据边检测信道上的信号电压的变化情况,以便判断自己在发送数据的时候其他站是否也在发送数据。当几个站同时在总线上发送数据时,总线上的信号电压变化幅度将会增大(互相叠加),当网卡检测到的信号电压超过一定的门限值时,说明总线上至少有两个站同时在发送数据,表明产生了冲突。这时,由于接收的信号已经识别不出来,所以任何一个正在发送的站就会立即停止发送数据,然后等待一段随机事件以后再次发送。

 

  • 传播时延对冲突检测的影响:

因为网卡只有在接收到电压幅度不正常的信号以后才能判断是否产生了冲突,所以它在接收到信号之前会认为信道是空闲的。但是信号传播会有延迟,比如下图:

载波监听

如图为两台计算机A、B,假设二者指甲距离为一公里,如果A、B同时发送数据,则会在线路中间发生碰撞,那么A、B检测到碰撞的时间为图中单程端到端的传播时延t;若A先发,B后发,那么A最长时间检测到碰撞的时间为2t
注:电磁波在1km电缆的传播时延约为5us(需要记住!)

在使用CSMA/CD协议时,一个站不可能同时进行发送和接收,进行的是半双工通信

从图中可以看出,每个站在自己发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。(这个时间是2t,t由两站之间的距离决定)这是以太网发送的不确定性。正是这种不确定性使得以太网的平均通信量远小于以太网的最高数据率。
以太网端到端的往返时间2t称为争用期碰撞窗口

 

  • 可能会出现这样一种情况:

某个站发送了一个很短的帧,但发生了碰撞,不过在这个帧发送完毕后才检测到发生了碰撞。已经没有办法中止帧的发送,因为已经发送完了。这个时候即使发生了碰撞,那么刚才的帧也无法进行重传,就会产生错误。
注:数据帧能够重传的一个条件:以太网要实现重传,必须保证这个站在收到冲突信号的时候这个帧没有传完。

所以基于这种情况,以太网规定了一个最短帧的长度为64个字节,即512bit。因为64字节正好是争用期长度(碰撞窗口长度),如果在争用期内没有发生碰撞,那么就不会发生碰撞了。因此,凡长度小于64字节的帧都是由于冲突而异常停止的无效帧。接收端收到这种帧会直接丢弃。(对于10Mb/s传统以太网而言!!!)

我们知道了信号在以太网上传播1km需要5us,以太网上最大的端到端的时延必须小于争用期的一半(25.6us),相当于以太网的最大端到端长度约为5km。实际上的以太网覆盖范围远没有这么大。因此实际的以太网都能在争用期51.2us内检测到可能发生的碰撞。以太网确定以51.2us作为争用期,不仅考虑了端到端时延,而且还考虑了好多其他因素。

  • 强化碰撞

当发送数据的站一旦发现发生了碰撞时,除了立即停止发送数据外,还要再继续发送32比特或48比特的人为干扰信号(就是之前提到的“拥挤”信号),以便让所有用户都知道发生了碰撞。

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

  • 以太网建立重传机制的原因:

首先,以太网不想采用连接机制,因为会降低效率,但他又想有一定的重传机制,因为以太网的重传是微秒级,而传输层的重传,如TCP的重传达到毫秒级,应用层的重传更达到秒级,我们可以看到越底层的重传,速度越快,所以对于以太网错误,以太网必须有重传机制。

  • CSMA/CD协议的工作过程:

(1)准备发送:适配器从网络层获得一个分组,加上以太网的首部和尾部,组成以太网帧,,放入网卡的缓存中,但在发送之前,必须先检测信道。
(2)检测信道:不停地检测信道,一直等待信道空闲,并在96比特时间内信道保持空闲(保证了帧间最小时间间隔),就发送这个帧。
(3)在发送过程中仍不停地检测信道,即网络适配器要边发送边监听。这里只有两种可能性

            发送成功:在争用期内一直未检测到碰撞,这个帧发送成功,回到(1)

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

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

————————————————

参考:

[1]https://blog.csdn.net/loveCC_orange/article/details/79177129

(CSDN博主「loveCC_orange」的原创文章,遵循 CC 4.0 BY-SA 版权协议)
[2]https://blog.csdn.net/CYKsky/article/details/43058607

[3]https://baike.baidu.com/item/CSMA/CD/986847

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是CSMA/CD 的相关文章

  • nodejs处理图片文件上传

    如果使用express框架的话 其内置模块就可以直接处理文件上传了 而不需要饱含额外的模块 express版本 3 4 4 1 使用bodyParser过滤器 并且指定上传的目录为public upload 注意这里的目录为相对于expre

随机推荐

  • PyQt5学习笔记--GridLayout、FormLayout和StackedLayout布局

    目录 1 GridLayout布局 2 FormLayout布局 3 StackedLayout布局 1 GridLayout布局 import sys from PyQt5 QtWidgets import class MyWindow
  • select、poll、epoll

    因为实际需要所致 我们不得不考虑在现有的开源 商用的应用服务器之外开发一个 有性能要求 有并发要求的服务端应用 从技术要求的角度来分析一下 用Java实现这件事情我们可能关注的知识层面 在整体上 可能需要我们从下面几个层面出发来考虑 1 在
  • windows多个不同java共存

    windows多个不同java共存 如图我电脑存在java1 8和15 使用时 我会存在工具支持的java版本不一样 有的工具要8才能使用有的工具需要11或者15以上java才能正常使用 于是为了方便快捷便写了这个多java版本共存 jav
  • 微服务SpringCloud

    什么是SpringCloud SpringCloud是由Spring提供的一套能够快速搭建微服务架构程序的框架集 SpringCloud本身不是一个框架 而是一系列框架的统称 SpringClound就是为了搭建微服务架构才出现的 有人将S
  • Linux如何查看系统时间

    文章目录 一 使用date命令查看系统时间 二 通过 var log syslog文件查看系统时间 三 通过 proc uptime文件查看系统运行时间 四 通过hwclock命令查看硬件时间 五 通过timedatectl命令设置系统时区
  • Python实现普通二叉树

    Python实现普通二叉树 二叉树是每个节点最多有两个子树的树结构 本文使用Python来实现普通的二叉树 关于二叉树的介绍 可以参考 https blog csdn net weixin 43790276 article details
  • MES系统是什么?MES系统的主要功能是什么?看完本文就知道

    MES系统是什么 MES系统是一套面向制造企业车间执行层的生产信息化管理系统 MES可以为企业提供包括制造数据管理 计划排程管理 生产调度管理 库存管理 质量管理 人力资源管理 工作中心 设备管理 工具工装管理 采购管理 成本管理 项目看板
  • PytorchCNN项目搭建 6--- 训练、验证CNN

    PytorchCNN项目搭建 6 训练 验证CNN 1 配置args cfg log 等 2 将数据集dataset经DataLoader变成dataloader 3 加载网络net 4 选择损失函数和优化器 5 训练网络 得到损失值 主函
  • 【qt】蒙版mask使用

    蒙版 mask 蒙版基本概念 在绘图软件中 蒙版类似于蒙在原始图片上的一块玻璃 即蒙版 然后我们再在这块玻璃上使用其他工具对图片进行修改 这样就不会破坏原始图片 而又能看到图片修改后的效果 蒙版通常是黑白色的 通常通过改变蒙版 玻璃 的灰度
  • node 加密解密模块_Node之加密与解密处理

    crypto模块概述 在Node js中 使用OpenSSL类库作为其内部实现加密与解密处理的基础手段 这是因为目前OpenSSL已经成为了一个经过严格测试的可靠的加密与解密算法的实现工具 在Node js中 OpenSSL类库被封装在cr
  • 真正解决Pandas写入excel的多sheet问题

    真正解决Pandas写入excel的多sheet问题 遇到需要利用pandas的to excel 在同一个Excel文件中 循环在不同的sheet中写入数据 但查阅大量资料 基本都无法利用for循环 在 sheet1 sheet2 shee
  • java中native的用法

    Java开发中会碰到声明为 native的方法 如 public native int hashCode 这是一个native方法 为什么存在native方法呢 Java不是完美的 Java的不足除了体现在运行速度上要比传统的C 慢许多之外
  • 数学建模写作模板及排版经验(超全)

    开篇福利分享 链接 https pan baidu com s 10hJMmLw8pQ5r3csnnySH g pwd msy3 提取码 msy3 论文是建模中最后的一环也是最关键的一环 这环做好了那就圆满了 做砸了全功尽弃 了 关于怎么写
  • Raspberry Pi和Python OpenCV人工神经网络和卷积神经网络演示及其机器学习微型框架

    首先 主要讨论和演示机器学习中使用的基本数据模型及其演示 其次开始的深度学习讨论 然后 探讨 ANN 和 CNN 如何预测结果 例如 当呈现未知图像时 CNN 将尝试将其识别为属于它已被训练识别的类别之一 Raspberry Pi机器学习
  • 十三、Ubuntu18.04下配置C++版本的mediapipe

    十三 Ubuntu18 04下配置C 版本的mediapipe 1 官方教程 2 记录我的配置过程 2 1 安装Bazelisk 2 2 安装mediapipe库 2 3 安装OpenCv和FFmpeg 2 4 运行helloworld C
  • Airtest简单使用及采坑记录

    下载地址 http airtest netease com 打开方式 打开下载的文件夹 找到AirtestIDE exe双击即可打开 连接手机 USB连接方式 将电脑与手机用USB连接 打开手机开发者模式的USB调试 右上角出现设备信息后点
  • 【云原生之Docker实战】使用docker搭建Chemex资产管理系统

    云原生之Docker实战 使用docker搭建Chemex资产管理系统 一 Chemex介绍 1 Chemex简介 2 Chemex特点 二 检查dokcer版本 三 创建mysql容器 四 测试数据库连接 五 下载chemex镜像 六 创
  • 让AD 自动导出 3D效果照片到项目文件路径下,方便查看

    让AD自动在项目目录下生成PCB的3D照片 分辨率 设为最高 视图可以自定义或者从上到下俯视 颜色配置默认绿色 也可以选择当前视图 确定即可 这样查看起来非常方便 不用再打开文件查看了
  • 数据库设计(一对一,一对多,多对多)关联查询

    表与表之间的关系 1 一对一 需要两个表 当然做项目时为了省空间 通常只建一个表 如果要实现一对一的查询 可以建两个视图 示例如下 1 建物理表 初始化数据 CREATE TABLE person id INT NAME VARCHAR 1
  • 什么是CSMA/CD

    英文全称 Carrier Sense Multiple Access Collision Detection 载波侦听多路访问 冲突检测协议 CSMA CD 这种协议已广泛应用于局域网中 是广播型信道中采用一种随机访问技术的竞争型访问方法