CSMA/CD技术的原理及算法分析
简介
CSMA /CD(Carrier Sense Multiple Access with Collision Detectio)即带碰撞检测的载波监听多路访问技术,是一种争用型的介质访问控制协议,采用半双工通信,最早应用于总线型局域网。在传统的共享以太网中,所有的节点共享传输介质。如何保证传输介质有序、高效地为许多节点提供传输服务,就是以太网的介质访问控制协议要解决的问题。也被称为共享介质的灵魂。
CS:载波侦听: 在发送数据之前进行监听,以确保线路空闲,减少冲突的机会。
MA:多点接入: 每个站点发送的数据,可以同时被多个站点接收。
CD:碰撞检测: 边发送边检测,发现冲突就停止发送,然后延迟一个随机时间之后继续发送。冲突的检测由于两个站点同时发送信号,经过叠加后,会使线路上电压的摆动值超过正常值一倍。据此可判断冲突的产生。
原理
1、终端设备不停的检测共享线路的状态,只有在空闲的时候才发送数据,如果线路不空闲则一直等待。
2、发送过程中,若其他设备也同时发送数据,则其发送的数据必然产生碰撞,导致线路上的信号不稳定,终端设备检测到这种不稳定之后,马上停上发送自己的数据,然后再发送一连串干扰脉冲,然后等待一段时间之后再进行发送。
缺点:带宽窄,冲突检测机制,传输时间必须大于延迟时间导致物理长度限制51.2μs的冲突检测窗口,1位在2500m,加上四个中继器的往返时间。帧长最小字节数64,刚好512位。
简单总结为:先听后发,边发边听,冲突停发,随机延迟后重发。
发生冲突的原因
既然每一个站在发送数据之前已经监听到信道为“空闲”,那么为什么还会出现数据在总线上的碰撞呢?这是因为电磁波在总线上总是以有限的速率传播的。这和我们开讨论会时相似。一听见会场安静,我们就立即发言,但偶尔也会发生几个人同时抢着发言而产生冲突的情况。如图所示的例子可以说明这种情况。设图中的局域网两端的站A和B相距1km,用同轴电缆相连。电磁波在1km电缆的传播时延约为5μs。因此,A向B发出的数据,在约5us后才能传送到B。换言之,B若在A发送的数据到达B之前发送自己的帧(因为这时B的载波监听检测不到A所发送的信息),则必然要在某个时间和A发送的帧发生碰撞。碰撞的结果是两个帧都变得无用。在局域网的分析中,常把总线上的单程端到端传播时延记为τ。发送数据的站希望尽早知道是否发生了碰撞。那么,A发送数据后,最迟要经过多长时间才能知道自己发送的数据和其他站发送的数据有没有发生碰撞?从图中不难看出,这个时间最多是两倍的总线端到端的传播时延2τ,或总线的端到端往返传播时延。由于局域网上任意两个站之间的传播时延有长有短,因此局域网必须按最坏情况设计,即取总线两端的两个站之间的传播时延(这两个站之间的距离最大)为端到端传播时延。
退避算法:
(1)协议规定了基本退避时间为争用期2τ具体的争用期时间是51.2μs。对于10Mis以太网,在争用期内可发送512bit,即64字节。也可以说争用期是512比特时间。1比特时间就是发送1比特所需的时间。所以这种时间单位与数据率密切相关。为了方便,也可以直接使用比特作为争用期的单位。争用期是512bit,即争用期是发送512bi所需的时间。
(2)从离散的整数集合[0,1,…,(2^k-1)中随机取出一个数,记为r。重传应推后的时间就是r倍的争用期。上面的参数k按公式k=Min[重传次数,10]可见当重传次数不超过10时,参数k等于重传次数;但当重传次数超过10时,k就不再增大而一直等于10。
(3)当重传达16次仍不能成功时(这表明同时打算发送数据的站太多,以致连续发生冲突),则丢弃该帧,并向高层报告。
例如,在第1次重传时,k=1,随机数r从整数0,1}中选一个数。因此重传的站可选择的重传推迟时间是0或2τ,在这两个时间中随机选择一个数。
若再发生碰撞,则在第2次重传时,k=2,随机数r就从整数{0,1,2,3}中选一个数。因此重传推迟的时间是在0,2τ,4τ和6τ这4个时间中随机地选取一个。
其他
随机性:
我们还应注意到,适配器每发送一个新的帧,就要执行一次 CSMA /CD算法。适配器对过去发生过的碰撞并无记忆功能。因此,当好几个适配器正在执行指数退避算法时,很可能有某一个适配器发送的新帧能够碰巧立即成功地插入到信道中,得到了发送权,而已经退避好几次发送的站,有可能很不巧,还要继续执行退避算法,继续等待。
规定最小帧长:
现在考虑一种情况。某个站发送了一个很短的帧,但在发送完毕之前并没有检测出碰撞。假定这个帧在继续向前传播到达目的站之前和别的站发送的帧发生了碰撞,因而目的站将收到有差错的帧(当然会把它丢弃)。可是发送站却不知道这个帧发生了碰撞,因而不会重传这个帧。为了避免发生这种情况,以太网规定了一个最短帧长64字节,即512bit。如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于64字节。对于10Mbit/s以太网,发送512bit的时间需要51.2μs,也就是上面提到的争用期。由此可见,以太网在发送数据时,如果在争用期(共发送了64字节)没有发生碰撞,那么后续发送的数据就一定不会发生冲突。换句话说,如果发生碰撞,就一定是在发送的前64字节之内。由于一检测到冲突就立即中止发送,这时已经发送出去的数据一定小于64字节,因此凡长度小于64字节的帧都是由于冲突而异常中止的无效帧。只要收到了这种无效帧,就应当立即将其丢弃。信号在以太网上传播1km大约需要5μs。以太网上最大的端到端时延必须小于争用期的一半(即25.6μs),这相当于以太网的最大端到端长度约为5km。实际上的以太网覆盖范围远远没有这样大。因此,实用的以太网都能在争用期51.2μs内检测到可能发生的碰撞。以太网的争用期确定为51.2μs,不仅考虑到以太网的端到端时延,而且还包括其他的许多因素,如存在的转发器所增加的时延,以及下面要讲到的强化碰撞的干扰信号的持续时间等。
规定帧间最小间隔:
以太网规定最小帧间隔为9.6μs,相当于96比特时间,这样做是为了刚刚收到数据帧的站的接收缓存来得及处理,做好接收下一帧的准备。
强化碰撞:
这就是当发送数据的站一旦发现发生了碰撞时,除了立即停止发送数据外,还要再继续发送32比特或48比特的人为干扰信号,以便让所有用户都知道现在已经发生了碰撞。对于10Mbis以太网,发送32(或48)比特只需要32(或48)μs。
CSMA /CD协议的要点归纳
(1)准备发送:适配器从网络层获得一个分组,加上以太网的首部和尾部,组成以太网帧,放入适配器的缓存中。但在发送之前,必须先检测信道。
(2)检测信道:若检测到信道忙,则应不停地检测,一直等待信道转为空闲。若检测到信道空闲,并在96比特时间内信道保持空闲(保证了帧间最小间隔),就发送这个帧。
(3)载波监听:在发送过程中仍不停地检测信道,即网络适配器要边发送边监听。这里只有两种可能性:
①发送成功:在争用期内一直未检测到碰撞。这个帧肯定能够发送成功。发送完毕后,其他什么也不做。然后回到(1)。
②发送失败:在争用期内检测到碰撞。这时立即停止发送数据,并按规定发送人为干扰信号。适配器接着就执行指数退避算法,等待r倍512比特时间后,返回到步骤(2),继续检测信道。但若重传达16次仍不能成功,则停止重传而向上报错。以太网每发送完一帧,一定要把已发送的帧暂时保留一下。如果在争用期内检测出发生了碰撞,那么还要在推迟一段时间后再把这个暂时保留的帧重传一次。
使用集线器的星型拓扑
集线器的一些特点:
(1)从表面上看,使用集线器的局域网在物理上是一个星形网,但由于集线器使用电子器件来模拟实际电缆线的工作,因此整个系统仍像一个传统以太网那样运行。也就是说,使用集线器的以太网在逻辑上仍是一个总线网,各站共享逻辑上的总线,使用的还是 CSMA /CD协议(更具体些说,是各站中的适配器执行 CSMA /CD协议)。网络中的各站必须竞争对传输媒体的控制,并且在同一时刻至多只允许一个站发送数据。
(2)一个集线器有许多接口,例如8至16个,每个接口通过RJ45插头,用两对双绞线与一台计算机上的适配器相连(这种插座可连接4对双绞线,实际上只用2对,即发送和接收各使用一对双绞线)。因此,一个集线器很像一个多接口的转发器。
(3)集线器工作在物理层,它的每个接口仅仅简单地转发比特——收到1就转发1,收到0就转发0,不进行碰撞检测。若两个接口同时有信号输入(即发生碰撞),那么所有的接口都将收不到正确的帧。
(4)集线器采用了专门的芯片,进行自适应串音回波抵消。这样就可使接口转发出去的较强信号不致对该接口接收到的较弱信号产生干扰(这种干扰即近端串音)。每个比特在转发之前还要进行再生整形并重新定时。