博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CSMA/CD协议
阅读量:5330 次
发布时间:2019-06-14

本文共 5742 字,大约阅读时间需要 19 分钟。

 

在以太网中,所有的节点共享传输介质。如何保证传输介质有序、高效地为许多节点提供传输服务,就是以太网的介质访问控制协议要解决的问题。

CSMA/CD(Carrier Sense Multiple Access/Collision Detect)即载波监听多路访问/冲突检测机制。在传统的共享以太网中,所有的节点共享传输介质。如何保证传输介质有序、高效地为许多节点提供传输服务,就是以太网的介质访问控制协议要解决的问题。

1.1  基本概念

CSMA/CD是英文carrier sense multiple access/collision detected 的缩写,可把它翻成“载波监听多路访问/冲突检测”,或“带有冲突检测的载波侦听多路访问”。

所谓载波监听(carrier sense),意思就是以太网络上的各个工作站在发送数据前,都要监听总线上有没有数据正在传输。若有数据传输 (称总线为忙),则不发送数据,需要等待;若无数据传输(称总线为空),可以立即发送准备好的数据。

所谓多路访问(multiple access),意思就是以太网络上的各个工作站在发送数据时,共同使用一条总线,且发送数据是广播式的。

所谓冲突(collision),意思就是,若以太网上有两个或两个以上工作站同时发送数据,在总线上就会产生信号的冲突;多个工作站都同时发送数据,在总线上就会产生信号的冲突,哪个工作站接收到的数据都辨别不出真正的信息。这种情况称冲突或者碰撞。

为了减少冲突发生的影响,工作站在发送数据过程中还要不停地检测自己发送的数据,检测自己传输过程中有没有其他工作站在发送数据,在传输过程中与其它工作站的数据发生冲突,这就是冲突检测(collision detected)。

1.2  基本算法

CSMA/CD是带有冲突检测的CSMA,其基本思想是:当一个节点要发送数据时,首先监听信道;如果信道空闲就发送数据,并继续监听;如果在数据发送过程中监听到了冲突,则立刻停止数据发送,等待一段随机的时间后,重新开始尝试发送数据。

CSMA/CD媒体访问控制方法的工作原理,可以概括如下:

先听后说,边听边说;

一旦冲突,立即停说;

等待时机,然后再说;

听,即监听、检测之意;说,即发送数据之意。

上面几句话在发送数据前,先监听总线是否空闲。若总线忙,则不发送。若总线空闲,则把准备好的数据发送到总线上。在发送数据的过程中,工作站边发送边检测总线,查看是否自己发送的数据有冲突。若无冲突则继续发送直到发完全部数据;若有冲突,则立即停止发送数据,但是要发送一个加强冲突的JAM信号,以便使网络上所有工作站都知道网上发生了冲突,然后,等待一个预定的随机时间,且在总线为空闲时,再重新发送未发完的数据。

CSMA/CD是标准以太网、快速以太网和千兆以太网中统一采用的介质争用处理协议(但在万兆以太网中,由于采用的是全双工通信,所以不再采用这一协议)。之所以称之为"载波侦听"("载波"就是承载信号的电磁波),而不是称之为"介质侦听",那是因为如果介质上正在有载波存在,则证明介质处于忙的状态(因为信号或者数据不是直接传输的,而是通过电磁载波进行的);如果没有载波存在,则介质是空闲状态。也就是通过载波的检测,可以得知介质的状态,而不能直接来侦听介质本身得出其空闲状态。

【说明】其实这里侦听的应该是"信道",而不是"介质"本身,因为在一条传输介质中,可能包含有多条信道,用于不同的传输链路。

2.1  原理介绍

在CSMA中,由于信道传播时延的存在,即使通信双方的站点都没有侦听到载波信号,在发送数据时仍可能会发生冲突,因为他们可能会在检测到介质空闲时同时发送数据,致使冲突发生。尽管CSMA可以发现冲突,但它并没有先知的冲突检测和阻止功能,致使冲突发生频繁。

一种CSMA的改进方案是使发送站点在传输过程中仍继续侦听介质,以检测是否存在冲突。如果两个站点都在某一时间检测到信道是空闲的,并且同时开始传送数据,则它们几乎立刻就会检测到有冲突发生。如果发生冲突,信道上可以检测到超过发送站点本身发送的载波信号幅度的电磁波,由此判断出冲突的存在。一旦检测到冲突,发送站点就立即停止发送,并向总线上发一串阻塞信号,用以通知总线上通信的对方站点,快速地终止被破坏的帧,可以节省时间和带宽。这种方案就是CSMA/CD,已广泛应用于局域网中。

CSMA/CD是一种争用型的介质访问控制协议。它起源于美国夏威夷大学开发的ALOHA网所采用的争用型协议,并进行了改进,使之具有比ALOHA协议更高的介质利用率。主要应用于现场总线Ethernet中。另一个改进是,对于每一个站而言,一旦它检测到有冲突,它就放弃它当前的传送任务。换句话说,如果两个站都检测到信道是空闲的,并且同时开始传送数据,则它们几乎立刻就会检测到有冲突发生。它们不应该再继续传送它们的帧,因为产生冲突的数据是无法分辨出原始信息的,这时继续发送只会产生数据垃圾而已;相反一旦检测到冲突之后,它们应该立即停止传送数据。快速地终止发送被损坏的帧可以节省时间和带宽,避免造成资源浪费。

CSMA/CD控制方式的优点是:

原理比较简单,技术上易实现,网络中各工作站处于平等地位 ,不需集中控制,不提供优先级控制。但在网络负载增大时,发送时间增长,发送效率急剧下降。

CSMA/CD应用在 OSI 的第二层数据链路层。

它的工作原理是:发送数据前,先侦听信道是否空闲;若空闲,则立即发送数据。若信道忙碌,则等待一段时间至信道中的信息传输结束后再发送数据;若在上一段信息发送结束后,同时有两个或两个以上的节点都提出发送请求,则判定为冲突。若侦听到冲突,则立即停止发送数据,等待一段随机时间,再重新尝试。

其原理简单总结为:先听后发,边发边听,冲突停发,随机延迟后重发

CSMA/CD采用IEEE 802.3标准。

它的主要目的是:提供寻址和媒体存取的控制方式,使得不同设备或网络上的节点可以在多点的网络上通信而不相互冲突。

有人将CSMA/CD的工作过程形象的比喻成很多人在一间黑屋子中举行讨论会,参加会议的人都是只能听到其他人的声音。每个人在说话前必须先倾听,只有等会场安静下来后,他才能够发言。人们将发言前监听以确定是否已有人在发言的动作成为"载波侦听";将在会场安静的情况下每人都有平等机会讲话成为“多路访问”;如果有两人或两人以上同时说话,大家就无法听清其中任何一人的发言,这种情况称为发生“冲突”。发言人在发言过程中要及时发现是否发生冲突,这个动作称为“冲突检测”。如果发言人发现冲突已经发生,这时他需要先大喊一声再停止讲话,然后随机后退延迟,再次重复上述过程,直至讲话成功。如果失败次数太多,他也许就放弃这次发言的想法。通常尝试16次后放弃。

CSMA/CD控制方式的优点是:原理比较简单,技术上易实现,网络中各工作站处于平等地位,不需集中控制,不提供优先级控制。但在网络负载增大时,发送时间增长,发送效率急剧下降。

【经验之谈】这里其实还有一个细节问题,那就是站点要多长时间才能检测到有冲突发生。理论上多数人认为是一倍于数据信号传播时延,认为在一个完整的数据帧载波信号传播过程中没有遇到冲突,就认为没有冲突发生。但事实上这是不正确的,而是要两倍于传播时延,因为可能就在一个传播时延结束时对方站点也开始了数据传输,这时同样会遇到冲突,而且冲突信号要传送到原来发送数据的站点时也需要一个传播时延,所以结果就是需要两倍于传播时延。

2.2  协议过程

控制规程

控制规程的核心问题:解决在公共通道上以广播方式传送数据中可能出现的问题(主要是数据碰撞问题)

控制过程包含四个处理内容:侦听、发送、检测、冲突处理

(1) 侦听:

通过专门的检测机构,在站点准备发送前先侦听一下总线上是否有数据正在传送(线路是否忙)?

若“忙”则进入后述的“退避”处理程序,进而进一步反复进行侦听工作。

若“闲”,则根据一定算法原则(“X坚持”算法)决定如何发送。

(2) 发送:

当确定要发送后,通过发送机构,向总线发送数据。

(3) 检测:

数据发送后,也可能发生数据碰撞。因此,要对数据边发送,边检测,以判断是否冲突了。

(4)冲突处理:

当确认发生冲突后,进入冲突处理程序。有两种冲突情况:

① 侦听中发现线路忙

② 发送过程中发现数据碰撞

① 若在侦听中发现线路忙,则等待一个延时后再次侦听,若仍然忙,则继续延迟等待,一直到可以发送为止。每次延时的时间不一致,由退避算法确定延时值。

② 若发送过程中发现数据碰撞,先发送阻塞信息,强化冲突,再进行侦听工作,以待下次重新发送(方法同①)。

2.3  性能指标

CSMA/CD哥哥参数指标可以概括如下:

性能指标:信道利用率、吞吐量、介质利用率

CSMA/CD的主要影响因素:传播时延、工作站数。

①CSMA/CD对站点个数不是很敏感,对实际的输入负载比较敏感。

②CSMA/CD对传播时延α比较敏感。

③CSMA/CD冲突不可避免。

④CSMA/CD的介质利用率随α的上升下降较快。

⑤CSMA/CD适合通信量不大,交互频繁的场合

⑥对于CSMA/CD帧越长,吞吐量越大,要求帧具有最小长度,当有许多短消息时,带宽浪费严重。

⑦CSMA/CD在轻负载时提供最短延迟,但对重负载敏感。

主要参数:

时间片512比特时间

帧间间隔9.6微秒

尝试极限16

退避极限10

人为干扰长32比特

最大帧长1518字节

最小帧长64字节

地址字段长48比特

2.4  退避算法

2.2中两种冲突情况都会涉及一个共同算法——退避算法。

①退避算法:当出现线路冲突时,如果冲突的各站点都采用同样的退避间隔时间,则很容易产生二次、三次的碰撞。因此,要求各个站点的退避间隔时间具有差异性。这要求通过退避算法来实现。

截断的二进制指数退避算法(退避算法之一):

当一个站点发现线路忙时,要等待一个延时时间M,然后再进行侦听工作。延时时间M以以下算法决定:

M = 0 ~ (2^k - 1) 之间的一个随机数乘以512比特时间(例如对于10Mbps以太网,为51.2微秒),k为冲突(碰撞)的次数,M的最大值为1023,即当k=10及以后M始终是0~1023之间的一个随机值与51.2的乘积,当k增加到16时,就发出错误信息。

② 特殊阻塞信息:是一组特殊数据信息。在发送数据后发现冲突时,立即发送特殊阻塞信息(连续几个字节的全1,一般为32-48位),以强化冲突信号,使线路上站点可以尽早探测得到冲突的信号,从而减少造成新冲突的可能性。

③ 冲突检测时间>=2α: α表示网络中最远两个站点的传输线路延迟时间。该式表示检测时间必须保证最远站点发出数据产生冲突后被对方感知的最短时间。在2α时间里没有感知冲突,则保证发出的数据没有产生冲突。(只要保证检测2α时间,没有必要整个发送过程都进行检测)

④ X-坚持的CSMA算法:当在侦听中发现线路空闲时,不一定马上发送数据,而采用X-坚持的CSMA算法决定如何进行数据发送:

算法特点

- 非坚持的CSMA:线路忙,等待一段时间,再侦听;不忙时,立即发送;减少冲突,信道利用率降低:

- 1坚持的CSMA:线路忙,继续侦听;不忙时,立即发送;提高信道利用率,增大冲突:

- p坚持的CSMA:线路忙,继续侦听;不忙时,根据p概率进行发送,另外的1-p概率为继续侦听(p是一个指定概率值);有效平衡,但复杂:

⑤    控制流程图:

 

⑥    CSMA控制规程的特征

① 简单

② 具有广播功能

③ 平均带宽: f = F / n

④ 绝对平等,无优先级

⑤ 低负荷高效,高负荷低效

⑥ 延时时间不可预测

⑦ 传输速率与传输距离为一定值

2.4  算法应用

二进制指数退避算法是按"后进先出"(Last In First Out,LIFO)的次序控制的,即未发生冲突或很少发生冲突的数据帧具有优先发送的概率;而发生过多次冲突的数据帧,发送成功的概率更少。

二进制指数退避算法的规则如下:

对每个帧,当第一次发生冲突时,设置参数L=2。退避重发时间在0或者1个时隙中随机抽取一个再重发。

当帧再次冲突时,退避时间参数的最大值加倍,即是原来L值2的2次方。退避重发时间在0~3(=22-1)个时隙中随机抽取一个再重发。

当冲突n次,由此时的退避时间参数的最大值为最初L值的2^n倍。退避重发时间在0~(2n-1)个时隙中随机抽取一个再重发。可以设置一个最大重传次数,超过此值,不再重发,并报告出错。一般是第10次冲突之后,随机数的时间间隙数就固定在1023上,不再增加了。16次冲突后,就会放弃努力,并且给发送数据的站点返回一个错误报告。

从以上可以看出,退避时间参数值都是参数初始值的2的n次方倍,这也是取名为"二进制指数"退避算法的原因。此算法的效果是不冲突或少冲突的帧重发的机会多,冲突多的帧重发的机会少。

由上述分析可知,为了确保发送数据站点在传输时能及时检测到可能存在的冲突,数据传输时延至少要两倍于信号传播时延(两倍传播时延=一个帧从一个站点开始到达另一个站点所需的一个传播时延+冲突信号到达发送数据的站点所需的一个传播时延),其目的就是不要让数据在全部传输完才收到有冲突发生的信号,这样既浪费了时间,又浪费了带宽。

由此可以得CSMA/CD总线网络中最短帧长的计算关系式如下所示:

最短数据帧长(bit)= 2×数据传输速率(b/s)×两站点间的距离/200(m/μs)

CSMA/CD网络上进行传输时,必须按下列五个步骤来进行:

(1)传输前侦听

(2)如果忙则等待

(3)传输并检测冲突

(4)如果冲突发生,重传前等待

(5)重传或夭折

CSMA/CD 曾经用于各种总线结构以太网(bus topology Ethernet)和双绞线以太网(twisted-pair Ethernet)的早期版本中。

 

 

 

 

转载于:https://www.cnblogs.com/aixin0813/p/3286619.html

你可能感兴趣的文章
转】Maven学习总结(七)——eclipse中使用Maven创建Web项目
查看>>
【English】20190312
查看>>
Asp.net 后台添加CSS、JS、Meta标签
查看>>
windows下使用RoboCopy命令进行文件夹增量备份
查看>>
C#中return、break和continue语句
查看>>
SpringMVC操作指南-整合Spring、SpringMVC、MyBatis、Log4j/Log4j2及JUnit4搭建项目框架
查看>>
【高软作业3】:原型化系统
查看>>
为什么我不选择cmake,而是premake
查看>>
张乐最大熵包(maxent)编译使用linux
查看>>
信息增益(information gain)
查看>>
结对编程1 —— 基于GUI和Swing的四则运算题目生成器
查看>>
SQL Server2005杂谈(1):使用公用表表达式(CTE)简化嵌套SQL
查看>>
MongoDB入门学习(四):MongoDB的索引
查看>>
2016 百度校招研发算法题 9.12
查看>>
(转)The remote certificate is invalid according to the validation procedure
查看>>
iOSDate时间格式(转)
查看>>
Ardunio控制RGB的LED灯显示彩虹渐变色.
查看>>
ubuntu环境搭建
查看>>
Aspose Words、Excel导出等操作
查看>>
微信小程序购物商城系统开发系列-工具篇
查看>>