CSMA/CD协议详解

article/2025/8/25 18:16:59

一、协议背景

  最早的以太网是总线网络,当一台计算机发送数据时,总线上所有计算机都能检测到这个数据(广
  播通讯方式)。为了通讯的简便,传统总线型以太网采取了以下措施:

  1.提供的服务为不可靠的交付:

       (1.采用较为灵活的无连接工作方式,发送数据不必先建立连接
       (2.对发送的数据帧不进行编号
       (3.不要求接收方发回确认,对有差错的数据帧(用CRC查出有差错),把帧丢掉且什么都不做,
           差错帧是否重传由高层来决定。(若高层协议决定重传,则以太网也会当做新的帧传输)

  2.数据信号采取曼切斯特编码,利用中间的跳变来区分1和0

  3.在半双工通讯方式和随机接入的前提下,利用CSMA/CD减少冲突的发生。
     因为总线上只要有数据,传输资源就会被占用。因此传统总线型以太网采取半双工的通讯方式
     和最简单的随机接入,且用CSMA/CD协议来减少因随机接入而产生的数据碰撞。
   

二、CSMA/CD概述

    1.概述:

       CSMA/CD,载波监听多点接入/碰撞检测,是广播型信道中采用一种随机访问技术的竞争型访
       问方法,具有多目标地址的特点。它通过边发送数据边监听线路的方法来尽可能减少数据碰撞
       与冲突。采用分布式控制方法,所有结点之间不存在控制与被控制的关系

      *注意:在该情形下碰撞不可能完全避免,CSMA/CD只能减少碰撞。

    2.三大要点:

         (1.多点接入。即作用在总线型网络,许多计算机以多点接入的方法连接在一根总线上

         (2.载波监听。即监听信道,检测总线上有没有其他计算机在传输数据,发送前后每个主机都
                               必须不停地检测信道

         (3.碰撞检测。即边发送边监听,适配器边发送数据边检测信道上的信号电压变化情况,以此
                               判断是否有别人在发送数据。若没有检测到电压,即信道为“空闲”状态,可以
                               发送数据。若检测到极大或极小的电压,就说明有两个及以上主机的信号发生
                               了碰撞(电磁波相遇),此时适配器就会立即停止发送。

     3.问题:

    既然已经能够监听碰撞了,为什么不能完全避免数据在总线上的碰撞呢?

      ↓↓↓↓  引出下面的解释  ↓↓↓↓

三、CSMA/CD的碰撞检测详解

依旧会发生碰撞的原因:

一段电磁波在总线上是以有限的速率进行传播的,导致从A端传播到B端的电磁波有时延,B端总是不能立马感知到其附近有数据在传输。

1.时延对载波监听的影响

   基础参数极其含义:

  • τ      ----念"taò",单程的"端到端"传播时延
                 *记住:电磁波在1km电缆的传播时延约为5μs = 5*10^(-6)s
  • δ      ----念"deltà",单纯表示时间间隔

   文字解释:

       (1.t = 0  A端开始发送数据a,由于存在时延τ,t = τ-δ时未到达B端
       (2.t = τ-δ  之前,B端监听到其连接的信道为"空闲",于是在t = τ-δ时发送数据b
       (3.t = τ-3/2δ  时,数据a数据b发生碰撞,两者的电磁波均出现错误
       (4.t = τ  时,
数据a到达B端,B端检测出碰撞
       (5.t = 2τ-δ  时,
数据b到达A端,此时数据a还没发完,A端检测出碰撞

    当t = τ时,若B端准备发送数据,则会接收到数据a的信号电压,从而立即停止发送动作。而当
    0<t<τ时,若B端开始准备发送数据,则B端不会检测到数据a,从而发送数据b造成碰撞。所以产
    生碰撞的参数δ的范围为:δ∈( 0 , τ ]

2.解决方法

    (1.争用期/碰撞窗口

  • 定义:由《时延对载波监听的影响》一图,可得,A端检测到碰撞的时间 t = 2τ-δ∈[ τ , 2τ ),也就是说A端在发送数据后经历 2τ这个时间后还没有检测到碰撞,才能肯定这次发送不会发生碰撞。因此定义这个 2τ 为争用期
  • 具体的争用期时间是固定值,为51.2μs。对于10Mbit/s的以太网来说,在争用期内可发送51.2μs*10Mbit/s = 512bit ,即64字节的数据。

    (2.退避时间

  • 定义:以太网使用 截断二进制指数退避算法 来确定碰撞后的重传时机,即检测到碰撞立即停
    止后,推迟(退避)一个随机的时间段,再重新准备发送数据。
  • *退避的算法:

        I.基本退避时间为 2τ
        II.根据重传的次数,定义参数k,按下面的公式计算:

               k = Min[重传次数,10] 

           计算出k之后,再从离散的整数集合[0,1,...,(2^k-1)]之中随机取出一个数,记作r,那么此次
           重传应推迟/退避的时间为 r*2τ。可见当重传次数小于10次时,参数k等于重传次数本身;但
           当重传次数超过10次时,参数k变一直等于10,而整数集合也变为了[0,1,...,1023]

        III.当重传次数达到16次仍不能成功时(表明同时打算发送数据的站太多,以致连续发生冲
            突。),则丢弃该帧,并向高层汇报。

    (3.强化碰撞

  • 当发送数据的主机一旦发现了发生碰撞,除了立即停止发送数据之外,还要继续发送32bit或48bit的人为干扰信号,以便让所有用户都知道现在已经发生了碰撞。
  • 对于10Mbit/s的以太网,发送32bit(48bit)的时间需要3.2μs(4.8μs)

四、CSMA/CD过程总结

1.准备发送:

   适配器从网络层获得一个分组,封装成帧,放入适配器的缓存芯中等待发送。
   发送之前,先检测信道。

2.检测信道:

   若检测到信道忙,则不停地检测,一直等到信道转为空闲,并在96bit时间内一直保持空闲(保证
   了帧间最小间隔),就发送数据

3.边发送边监听,在发送过程中不停地检测信道:

  (1.成功发送:

       即在争用期间一直未检测到碰撞时,这个帧必定能够成功发送。发送完毕后什么也不做,继续
       返回准备发送步骤

  (2.发送失败:

       即在争用期间检测到碰撞时,立即中止帧的发送,并按照规定发送人为干扰信号。
       之后适配器按规定计算退避时间,等待r*2τ的时间后,再次检测信道并尝试发送(返回步骤2)。
       若重传次数达到16次仍不能成功发送,则停止重传并上报错误。


http://chatgpt.dhexx.cn/article/tKfFZbbb.shtml

相关文章

CSMA/CD

carrier sense multi-access/collision detect&#xff0c;载波监听多路访问/冲突检测 工作原理&#xff1a; 发送数据前进行载波监听判断信道是否空闲&#xff0c;若信道忙则等待一段随机时间&#xff1b;若信道空闲则立即发送数据&#xff0c;发送数据过程中同时检测是否产…

CSMA/CD和拥塞控制AIMD其实是一回事!

今天下班的班车上&#xff0c;撸论文&#xff0c;找到一篇关于CSMA/CD性能分析的&#xff0c;然而下载需要钱&#xff0c;作罢。我讨厌知识付费&#xff0c;因为我崇尚知识免费共享。 正好我上周末也写了一篇与此相关的&#xff1a; 谈谈CSMA/CD&#xff0c;TCP中的二进制指数…

CSMA/CD和CSMA/CA的区别(最全知识点总结)

在最后有总结&#xff0c;中间对CSMA/CD和CSMA/CA的描述也很详尽 一.CSMA/CD&#xff08;载波监听多点接入/碰撞检测&#xff09; 为什么要使用CSMA/CD&#xff1a; 因为总线上只要有数据&#xff0c;传输资源时就会被占用&#xff0c;又因为传统总线型以太网采用半双工的通讯…

CSMA/CA精辟总结

1. CSMA/CA https://blog.csdn.net/qq894040717/article/details/82426965 https://blog.csdn.net/LMM_5201/article/details/81673371 参考了以上链接的内容,然后进行了整理补充 CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance)协议只能用于有明确目标地…

CSMA/CD协议

CSMA/CD协议 CSMA/CD&#xff08;Carrier Sense Multiple Access with Collision Detection&#xff09; CSMA/CD用于以太网中&#xff0c; 以太网是最常见的有线局域网&#xff0c;那么有哪些类型以太网使用呢&#xff1f; 经典以太网&#xff08;3~10Mbps&#xff09;&…

CSMA/CD-CSMA/CA

1.CSMA&#xff08;载波侦听多路访问协议&#xff09; CSMA 当其他节点检测到信道被占用时不发送数据。但是当数据发送完后其他节点同时检测到信道为空闲&#xff0c;之后又在同一时刻发送数据&#xff0c;可能再次产生冲突。 2.CSMA/CD&#xff08;带冲突检测的载波侦听多路访…

计算机网络:随机访问介质访问控制之CSMA协议

文章目录 CSMA协议1-坚持CSMA非坚持CSMAp-坚持CSMA比较 CSMA协议 时隙ALOHA系统的效率虽然是纯ALOHA系统的两倍&#xff0c;但每个站点都是随心所欲地发送数据的&#xff0c;即使其他站点正在发送也照发不误&#xff0c;因此发送碰撞的概率很大。 若每个站点在发送前都先侦听…

CSMA介绍

转载自&#xff1a; http://www.cnblogs.com/cherishui/p/4046360.html 以下是转载内容&#xff1a; 本文主要介绍通讯领域中CSMA相关机制&#xff0c;本文全部资料来自于网络。 网络通讯&#xff0c;必须依靠介质来传递数据&#xff0c;将数据调制到模拟信号上&#xff0c;…

计算机网络(十)CSMA详解

随机访问截止访问控制&#xff08;所有用户可随机发送信息&#xff0c;发送信息时占全部带宽&#xff09; 分类&#xff1a; CSMA:先听再说 CSMA/CD:先听再说&#xff0c;边听边说 CSMA/CA: CSMA协议&#xff08;载波监听多路访问协议&#xff09; CS&#xff1a;载波监听…

CSMA协议简述

CSMA协议 载波监听多路访问协议CSMA&#xff08;carrier sense multiple access&#xff09; CS&#xff1a;载波侦听/监听&#xff0c;每一个站在发送数据之前要检测一下总线上是否有其他计算机在发送数据。 当几个站同时在总线上发送数据时&#xff0c;总线上的信号电压摆动…

计算机网络:CSMA协议

载波监听多路访问协议CSMA协议 CS:载波监听/帧听&#xff0c;每一个站再发数据之前都要检测链路上是否有其他站在发送数据。&#xff08;检测电压摆动值&#xff0c;当几个站同时发送数据时&#xff0c;总线上的电压摆动值就会增大。&#xff09;MA&#xff1a;多点接入&#…

以太网 CSMA-CD与CSMA-CA的区别与工作方式

2.0.0 以太网 CSMA-CD与CSMA-CA的区别与工作方式 一、冲突域、冲突检测、冲突避免 独木桥上人可以来回走动&#xff0c;但如果两边都有人&#xff0c;如果没有人做出避让&#xff0c;注定是两败俱伤 冲突域概念 冲突域指的是两台及以上终端通信时会发送冲突的区域。 冲突域的…

Windows网络编程 c语言 报错:[Error] ‘bzero‘ was not declared in this scope

阅读前请看一下&#xff1a;我是一个热衷于记录的人&#xff0c;每次写博客会反复研读&#xff0c;尽量不断提升博客质量。文章设置为仅粉丝可见&#xff0c;是因为写博客确实花了不少精力。希望互相进步谢谢&#xff01;&#xff01; 文章目录 阅读前请看一下&#xff1a;我是…

C:bzero与memset

目录 1、bzero 2、memset 3、实例 1、bzero bzero函数声明如下&#xff1a; /* Set N bytes of S to 0. */ extern void bzero (void *__s, size_t __n) __THROW __nonnull ((1)); 意思在注释里也写的很清晰&#xff0c;设置s的前n个字节为0。 2、memset memset函数声…

解决No module named numpy问题

目录 前沿 解决 解决方法1&#xff1a; 方法2&#xff1a;&#xff08;强行安装更新更高的版本&#xff09; 前沿 最近开始学习python了&#xff0c;由于要简单处理一下图片&#xff0c;奈何能C力太差&#xff0c;openCV上手有点难&#xff0c;想学习一下py简单的处理一下图…

Python中 No module named pygame

有时候运行Python程序&#xff0c;会出现如下错误 No module named pygame这个报错的意思是 没有安装pygame&#xff0c;有的时候你可能会出现No module named XXXX 这就是在说明你没有安装XXXX模块 解决&#xff1a; 1.进入cmd 2. 输入 pip install xxxx 表示安装这个模块 …

ModuleNotFoundError: No module named ‘transformers_modules.chatglm2-6b‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

ModuleNotFoundError: No module named ‘selenium

下面是我学习时的错误&#xff0c;在此文章记录一下&#xff0c;方便日后查找&#xff0c;以下解决方案都来源于网络。 问题&#xff1a;当jupyter出现ModuleNotFoundError: No module named selenium问题时的解决方案&#xff1a; 解决方案&#xff1a; 1、在cmd运行pip ins…

No module named ‘pyautogui‘

pip install pyautogui 出现如下错误。 ---------------------------------------- ERROR: Command errored out with exit status 1: C:\Users\zhangb\anaconda3\python.exe C:\Users\zhangb\anaconda3\lib\site-packages\pip install --ignore-installed --no-user --pref…

ModuleNotFoundError: No module named ‘torch._six‘的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…