序言

在前一份文档中,我们详细记录了有关802.11中DCF模式以及其核心CSMA/CA的一些内容与细节。对比无线网络,有线网络的集线器和中继器设计中,采用了CSMA/CD技术。该技术早期是用来解决有线网络中,共享介质下的多路网络接入问题,该技术仍然在当今的10M/100M半双工网络中使用。在更高的带宽情况下,比如千M网络,则采用全双工技术以代替CSMA/CD。

本文主旨是希望能理清CSMA/CD和CSMA/CA的关系与区别。接下来,我们首先会说明最基础的CSMA协议的工作机制,然后我们说明CSMA/CD的工作机制,最后,对比前一份文档,我们分析CSMA/CD和CSMA/CA的区别。

注:本文中有关有线网络的理论很多参考自《Ethernet:The Definitive Guide》。

CSMA

CSMA的全称是Carrier Sense Multiple Access,在笔者的理解中,其更趋向于一种理论研究的随机接入协议,或者说,基于其思想诞生了比如CSMA/CD与CSMA/CA这样的具体协议。CSMA可以分成以下三种:

  • 1-persistentes CSMA(1坚持-CSMA)
  • 0-persistentes CSMA(0坚持-CSMA)
  • p-persistentes CSMA(p坚持-CSMA)

从历史上而言,CSMA实际上是源于aloha协议,为了理清协议的设计思路的脉络关系,我们还是有必要对原始的aloha协议做一个说明。Aloha是为无线工作环境设计的一个协议,其最初的思想很简单:“一个aloha节点只要有数据的话,该节点就可以立即发送。当该节点数据发送完之后,其需要等待接收方反馈的ACK。若成功接收到ACK之后,那么这一次传输成功。如果没有收到ACK的话,那么这一次传输失败。该aloha节点会认为网络中还存在另外一个aloha节点也在发送数据,所以造成接收方发生了冲突。最后这些冲突的节点会随机选择一个时间进行回退(backoff),以避免下一次冲突。若冲突节点回退完成,其才可以重新进行发送"。

实际上从初始的aloha协议中,我们就可以看到现在CSMA/CA的影子,网络协议的设计都是符合KISS原则的(Keep It Simple and Stupid),所以实际中我们所应用到的网络协议,其思想都不会是特别复杂。基于aloha协议的思想,CSMA协议对其最大的改进即是引入了LBT机制(Listen Before Talk),在CSMA中的CS(Carrier Sense)即是指Listen监听机制。在LBT机制下CSMA的思想就是:“CSMA节点在每一次发送之前先监听信道是否是空闲的,如果信道不是空闲的话,那么就不发送数据,等待一会再进行尝试。只有确保是空闲的情况下,才可以发送数据,从而避免打断其他节点正在进行的传输过程"。

具体CSMA的工作机制关联着我们之前所叙述的三种CSMA模式,以下我们分别进行叙述:

  • 1-persistentes CSMA:“节点需要持续监听信道,一旦节点发现信道空闲后,则立刻发送数据。”。
  • 0-persistentes CSMA:“节点不连续监听信道,若该时刻节点监听信道为busy,那么等待一段时间后,再次进行监听。若节点该时刻监听信道为空闲,则立刻发送数据。
  • p-persistentes CSMA:“节点需要持续监听信道,一旦发现信道空闲后,节点以p的概率立刻发送数据,以1-p的概率不发送数据。若节点该时刻不发送数据,那么等待一段时间后,再次进行监听,并以p概率再次发送”。(注:这里所述的p概率可以理解成抛骰子赌大小,如果抛大,那么就发送,反之不发送。其中抛大的概率就是p,而抛小的概率就是1-p

在以上三种CSMA机制中,若节点传输发送冲突,则类似aloha的基本算法,随机等待一个时间之后,再次进行重试。以上,我们分析了CSMA的基本工作模式,或者称之为CSMA的基本思想,接下来,我们具体讨论有线网络所应用到的CSMA/CD协议。

CSMA/CD

CSMA/CD的全称是Carrier Sense Multiple Access with Collision Detection,即基于冲突检测的载波监听多路访问技术。CSMA/CD也是最初802.3中的核心,应用在10M/100M的半双工有线网络中,目前CSMA/CD的应用场景少了很多,大部分都直接基于全双工工作。

CSMA/CD从思想上应该是源自于1-坚持CSMA,即1-persistentes CSMA。在其基础上,加入了CD(Collision Detection)的机制。冲突检测,即CD的机制主要是用来发现冲突,并解决冲突的。我们下面描述CSMA/CD的具体工作机制:

节点发送数据之前需要持续监听信道,一旦节点发现信道空闲,则立刻发送数据。在发送数据的同时,节点持续监听信道,"探测" 是否有别的节点也在该时刻发送数据。

若传输过程中没有检测到别的节点的传输,那么成功传输。在成功传输后,节点需要等待帧间间隔IFG(interframe gap)时间后,可以进行下一次传输。

若在传输过程中,探测到别的节点也在传输,那么则检测到冲突。发生冲突后,节点立刻停止当前的传输,并且发送特定的干扰序列(JAM序列),用以加强该次冲突(用以保证其余所有节点都检测到该次冲突),在JAM序列发送完之后,节点随机选择一个时间倒数进行backoff。当backoff完成之后,节点可以尝试再次重传”。

在上述的描述中,我们可以发现,CSMA/CD和1-坚持CSMA是非常相近的,与传统的aloha相比,CSMA/CD不仅仅添加了LBT的机制,还引入了冲突检测(Collision Detection)机制,用以在传输中立刻发现冲突,而不是依靠ACK的反馈来判断是否有冲突发生,从而提高网络效率。在CSMA中,我们还需要描述一些细节内容:

  • 载波检测(CS:carrier sense):在有线网络中,载波检测实际上即是接收信道上的信息,并加以解析。用这种方式判断共享信道上有没有节点正在传输信息,从而达到监听(listen)的作用。其中载波检测这个名字实际上是从AM/FM接收中来的,即载波就是携带调制信息的模拟信号,从而载波监听就是对是不是有AM/FM信号进行侦听。
  • 冲突检测(CD:collision detection):在一些理论中,介绍冲突检测为“发送的同时,接收同一个信道上的数据,并比较发送数据Tx与接收数据Rx”。若Tx=Rx,则没有冲突发生,若Tx≠Rx,则识别到一个冲突。在一些工程介绍中,介绍检测冲突的方法是“介质依赖法”。连接段介质(实际上是电缆)拥有传输和接受数据的独立路径(双绞线中有单独的发送和接受回路),冲突检测是在同一个接收段收发器中,借助同时发生在传输和接收数据路径上的活动来完成的。在同轴电缆介质上,收发器通过检测同轴电缆的DC(即直流信号)信号等级来检测冲突。当两个或者多个基站同时传输时,同轴上的平均DC电压可达到触发同轴收发器中的冲突检测电压等级。同轴收发器连续检测同轴电缆上的平均电压等级,若平均电压等级表明,有多个基站同时传输内容后,其会发送JAM信号到以太网接口处。发送JAM信号的这个过程比冲突检测时间较长,多出的时间包含了根据10Mbps以太网上总信号延迟算出的时间(即包含了JAM信号的传输时间)。
  • 时隙与捕获效应:在有线网络中,捕获效应被定义为1个时隙长度内没有冲突发生,同时时隙被定义为512bit在10Mbps或100Mbps网络的发送时间。在有线网络中选择为512bit作为一个时隙的参考值,是考量了为发送信号到对端的最大往返时间。该最大往返时间包含了电磁波通过物理层的往返时间以及传输JAM信号所花费的时间。(JAM信号是加强冲突的一个通知信号)。若节点已捕获信道,即已发送512bit,那么对方不一定会来打断你当前的传输,1.即确保对方能检测到你,2.并且反馈的JAM信号也能通知到你。同时,若从电磁波传输的角度而言,512bit在10M中传输的时间换算成电磁波能够传播的距离大约是2800米,512bit在100M中传输的时间换算成电磁波传播的距离大约是200米,对比有线网络的双绞线长度(大约100米)而言,这些参数还是可以接受的。在1000Mbps网络以及其上,都是默认物理层采用全双工模式的,若还是采用CSMA/CD的模式,那么这里的时隙长度会被定义为512byte的长度,不过目前这个可能是学术上的用法,而非协议的定稿。
  • 重传机制(Backoff与BEB机制):若节点检测到冲突发生在前512个字节,即一个时隙内,那么节点首先进行backoff,然后进行重传。这里backoff是采用BEB(二进制指数回退算法),即在一个随机窗口内,选择一个随机数并乘以时隙(time slot)进行回退。在第0~10次回退过程中,每回退一次,随机窗口放大一倍,在第11次到第16次过程中,依然进行回退,并尝试重新发送数据包,但是不放大窗口大小,第17次若失败,则丢包。按照一般情况下,冲突不会发生在512字节以后的部分,即已经发生了捕获效应,即节点已经捕获到了信道。不过比如时间不同步这样的一些情况出现,导致冲突发生在512字节之后,貌似是不进行重传,直接丢包的。

CSMA/CD与CSMA/CA

在综述完CSMA/CD后,对比我们前一次叙述的CSMA/CA,我们总结这两者之间的联系和区别。

  • 联系:CSMA/CD与CSMA/CA机制都从属于CSMA的思路,其核心就是LBT机制,换言之,两个在接入信道之前都需要进行监听。当发现信道空闲后,其才可以进行接入。
  • 区别
    • 在思想上:

      • CSMA/CD是源自于1-坚持CSMA,而CSMA/CA是源自于p-坚持CSMA。即CSMA/CD是持续监听信道,一旦发现信道空闲,则立刻传输。
      • CSMA/CA是边进行backoff回退过程边进行监听,若信道空闲则进行backoff counter倒数,否则挂起随机倒数计数器,不进行backoff counter倒数的工作。只有当backoff counter(即随机倒数计数器)回退至0时,其才可发送数据。
    • 在冲突检测上:
      • CSMA/CD中是采用冲突检测+JAM机制,即边发送边监听实时信道状态,可以在传输过程中,实时判断信道中是否有冲突发生,一旦发现了冲突,则发送JAM信号以加强冲突,其余节点也因识别到该JAM信号,从而停止当前传输。若整个过程中,节点都没有发现冲突以及JAM反馈,那么该次传输成功。
      • CSMA/CA是源自于aloha的ACK反馈机制,若接收到对方反馈的ACK后,那么这一次传输成功,否则失败。
    • 在监听机制上
      • 由于CSMA/CD是有线网络,故其监听是直接解调有线介质上的信息,若没有信息,则信道空闲,若存在信息,则信道繁忙。
      • 在CSMA/CA中,不仅引入了物理载波监听与虚拟载波监听这两种技术,同时在物理载波监听中,还分为能量检测(Energy Detection)和载波感知(Carrier sense)。同时该载波感知所指是利用无线帧物理层头部中的固定序列(即preamble),利用已知序列和其做相关运算(自相关或者互相关运算)进行识别。详细的一些内容可以参考上一篇有关DCF和CSMA/CA的文章。
    • 在回退(backoff)机制上
      • 在CSMA/CD中,回退只有在冲突之后才会发生,节点选择选择一个随机时间进行回退,该随机事件具体是时隙乘以回退窗口内的一个随机数。其中为了避免多次冲突的问题,在每一次冲突后,节点的回退窗口也会执行BEB算法,即将回退窗口进行翻倍。在CSMA/CD中,回退一共可以进行16次,其中,第1~9次存在会对回退窗口进行翻倍,在第10~16次中,窗口大小不变(窗口最大1024),再次重试。第16次若失败,则进行丢包处理。
      • 在CSMA/CA中,节点的每一次传输之前都需要进行backoff过程。在CSMA/CA的backoff过程中,节点会在每一个slot中对信道进行监听(这里包含物理载波监听和虚拟载波监听),若信道监听为空闲,那么进行backoff,即随机倒数计数器减1,若信道监听为信道忙,则挂起该计数器,只有当该计数值为0时,节点才可以发送数据。在CSMA/CA中,若发生冲突后,对竞争窗口(Contention Window)进行BEB操作,在1~6次中,窗口大小翻倍,第6次时,窗口大小不变(窗口最大也是1024),再次重试,若第7次传输失败,则进行丢包处理。
    • 在时隙的定义上:
      • 在CSMA/CD中,时隙被定义在一个固定数据片大小在固定速率的媒介上传输的时间,比如在10M/100M网络中,时隙为512位在10M/100M网络下对应传输的延迟。
      • 在CSMA/CA中,时隙中包含三个方面的内容,即传播延迟,信道检测(CCA)以及收发天线转换。时隙时间具体与其对应的802.11协议版本有关,比如802.11b中,时隙即是20us。
    • 在捕获效应的定义上:
      • 在CSMA/CD中,捕获效应被定义为节点成功传输1个时隙的数据,从而节点能够确保自己已经捕获了信道,其余节点也都已感知到了这点,从而确保不会有冲突发生。
      • 在CSMA/CA中,捕获效应是指由于信号功率的不同,比如有两个节点同时向接收方发送数据,其中一者信号强度大(即SNR大),一者信号强度小(即SNR小)。在这种情况下,若信号较好的SNR能够达到解调其数据所需最低的SNR阈值的话,那么其是可以解调,即这次传输可以是成功的。直观的理解,我们可以认为一个大嗓门和一个小嗓门同时说话,那么我们是可以听清楚大嗓门的。

以上是总结的一些笔者理解CSMA/CA和CSMA/CD的区别,其他还存在的一些区别,比如在802.11DCF模式中所采用的RTS/CTS机制,在有线网中就不存在或者对应存在区别,在此就不再一一赘述了。

注:在上述的讨论中,有线网络的部分知识主要是源于《Ethernet:The Definitive Guide》,而无线网络的部分主要来源于笔者的研究经历,在无线网络中,也有想要实现类似于有线网络的CSMA/CN的工作机制,笔者的一部分工作也是来源于此,有兴趣可以自行阅读。以上讨论中,如果存在错误,还请见谅。

本文为原创文章,如需转载须注明出处和原文链接。

欢迎大家关注我们的微信公众号:无线技术大讲堂,请搜索公众号(must_wireless)。

简单叙述tcp/ip的工作原理和主要的协议_802.11协议精读3:CSMA/CD与CSMA/CA相关推荐

  1. TCP/IP的工作原理

    一.总述 1.定义: 计算机网络是一些互相连接的.自治的计算机的集合.因特网是网络的网络. 2.分类: 根据作用范围分类: 广域网 WAN (Wide Area Network) 局域网 LAN (L ...

  2. 笨办法学C 练习45:一个简单的TCP/IP客户端

    练习45:一个简单的TCP/IP客户端 原文:Exercise 45: A Simple TCP/IP Client 译者:飞龙 我打算使用RingBuffer来创建一个非常简单的小型网络测试工具,叫 ...

  3. tomcat处理html流程,Tomcat 简单配置使用,基本工作原理(流程图)

    Tomcat 简单配置使用,基本工作原理 安装 Tomcat 之前,首先要安装 JDK. 常见 Tomcat 启动异常 1.JAVA_HOME 环境变量配置错误 2.默认8080端口被占用 启动 安装 ...

  4. 简单的描述电荷泵的工作原理

    简单的描述电荷泵的工作原理 电荷泵工作原理 电荷泵工作原理 电荷泵的工作原理:主要是利用电容两端电压不能突变的特性,将输出电压给抬高.如下是一个电容式电荷泵内部结构图: 从图中可以看出,C+引脚和C- ...

  5. 简单介绍LC振荡电路的工作原理及特点

    简单介绍LC振荡电路的工作原理及特点 LC振荡电路,顾名思义就是用电感L和电容C组成的一个选频网络的振荡电路,这个振荡电路用来产生一种高频正弦波信号.常见的LC振荡电路有好多种,比如变压器反馈式.电感 ...

  6. 计算机tcpip网络原理与应用,清华大学出版社-图书详情-《TCP/IP网络编程原理与技术》...

    前言 随着Internet的发展,网络技术已经渗透到人们的生活和工作中.TCP/IP已经成为最流行的网络协议,且还在演变以满足未来的需要.在速度越来越快的计算机硬件和不断更新的软件发展的背后,TCP/ ...

  7. 简单理解TCP/IP传输层协议TCP和UDP

    TCP/IP模型中的传输层主要负责端到端通信,和数据链路层类似,数据链路层负责点到点的通信.TCP/IP模型的传输层主要协议有TCP (Transmission Control Protocol,传输 ...

  8. TCP/IP TIME_WAIT状态原理

    TIME_WAIT状态原理 ---------------------------- 通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态. 客户端主动关闭连接时,会发送最后一个 ...

  9. HTTP 协议 - 简单谈谈 TCP / IP (一)

    原文连接 blog TCP / IP 基本概念 世界上几乎所有的 HTTP 协议都是由 TCP / IP 协议来承载的.它是互联网相关的各类协议族的总称(通常所说的规则,就是协议). 从输入的 URL ...

最新文章

  1. ICLR 6-6-6!自注意力可以替代CNN,能表达任何卷积滤波层
  2. Blog 081018
  3. androidstuido_schooltest_1
  4. Tomcat:基础安装和使用教程
  5. java web基础编程题_云课堂javaweb微专业Java基础测试题3
  6. 黑马程序员—java基础总结1
  7. mysql指令按顺序排列_mysql基本语法大全
  8. 优质学习内容(自用)
  9. dfa2.java 原理_DFA编程练习2
  10. ObjectArx创建指定块
  11. Python运算符与编码
  12. 【Java】灵活使用自定义注解和反射
  13. python3.5以及scrapy,selenium,等 安装
  14. POJ3982 序列【大数】
  15. python怎么注释掉一段代码_爬取出来的网页代码都被注释掉怎么解决?
  16. Oracle12c错误01017,ORACLE12.2中用户无法登陆报ORA-01017的解决办法
  17. STM32进行软件调试步骤:
  18. vnc报错 PID file /home/root/.vnc/localhost.pid not readable after start.
  19. 签名文字头像PSD模板源文件打包3D艺术字贴图创意网红头像-李廷学
  20. Tushare简单的数据使用以及mysql存储教程

热门文章

  1. Eclipse中Latex配置
  2. box怎么用 latency_box-sizing使用场景
  3. oracle中主键的建立,oracle 建立主键与索引
  4. python爬取抖音评论_爬取抖音299w用户数据后的分析
  5. java之mybatis之缓存
  6. laravel 运用
  7. linux配置https站点
  8. mysql 慢查询日志记录
  9. DEBUG -- CLOSE BY CLIENT STACK TRACE问题的两种解决方案,整理自网络
  10. 每日英语:Electronics Develop A Sixth Sense