在总线型网络中,每个节点都能独立地决定帧的发送(即节点之间平等),显然,如果多个节点同时向总线上发送帧,就会产生访问冲突,导致帧中信息出错。
因此,需要一种有效避让冲突发生的技术,确保节点向总线上发送数据时,其他节点均静默——也就是说,需要一种技术来检测总线是否处于空闲状态。而CSMA就是这样的一种技术。
载波侦听多路访问(CSMA, Carrier Sense Multiple Access),基于它的原理,它也叫做先听后说(LBT, Listen Before Talk)技术。也就是先侦听要访问的介质,仅当发现其为空闲时才进行数据发送。
这里涉及到一个问题,即当发现介质被占用的情况下,要等待多长时间才再次侦听——这就是CSMA的退避算法。
CSMA可以采用的退避算法有多种,也可算对应类型的CSMA,分别有:
非坚持中的非,指的是各节点不会连续侦听介质是否空闲,而是发现介质忙则停止侦听,过一段时间再侦听。
下图是一个非坚持CSMA的示例:
非坚持CSMA等候多长时间再次监听是根据其算法随机产生的,并非固定。但如果采用时分复用的传输方式,则延迟是一个时隙长度。
但这种方式也是有一定缺点的,毕竟节点之间发送数据的速率并非一致,有可能出现一个因为节点发送速率不一致而导致后者发送的数据追上前者导致冲突。另外一个缺点则是因为侦听后如非空闲都会等待一定时间,这就有可能出现在等待期间信道就已经转为空闲——即非坚持CSMA无法找出最先的空闲点,这就影响了信道的利用率。
综上所述,这种算法一般用于小型的总线结构或者树型拓扑结构网络中,不适用于大型树型结构的以太网中。
为了克服非坚持的缺点,于是实现了该算法。“1”有两层含义,一是指发现介质忙时总是不间断的侦听;二是侦听到介质闲时一定会发送数据。
下图是一个1-坚持CSMA的示例:
明显,这种算法相对非坚持CSMA的优点是明显提高了介质的利用率,每个节点都在抓住一切有利时机发送数据。
该算法同样也有致命缺点,因为这种发现空闲立即发送数据的算法也使的冲突经常发生,其原因是网络中可能有多个节点同时在进行1-坚持侦听,这样的话一旦空闲所有节点立即发送就很容易造成冲突,另一缺点则是这种算法一直侦听,占用了大量网络和硬件资源。
综上所述,该算法也仅适用于小型总线或树型拓扑网络,不适用于大型网络中。
前两者都存在明显的不足,于是就产生了P-坚持CSMA算法。该算法即是前两者的折中算法。
P和1是对应的,1-坚持是发现介质空闲立即发送数据,也就是发送数据的概率是100%,而P则是发送数据的概率为P%。其目的就是为了尽量减少节点间的冲突。
具体地讲,P-坚持CSMA和1-坚持CSMA在侦听上是类似的,也是介质处于忙时持续侦听,当发现介质空闲时,根据概率P来选择发送数据,而如果概率决定不发送数据,则即使介质空闲,也延迟t(端到端的传播时延)时间再重新侦听介质状态。
传播时延是有计算公式的:
综上所述,可以发现P-坚持是一种既能向非坚持一样减少冲突,又能像1-坚持增大信道利用率的这种方案,实现优缺点互补。
传统的CSMA访问控制中,由于信道传播时延的存在,即多节点可能都没有侦听到载波信号,但发送数据时仍然可能会发生冲突,因为多节点可能会同时发送数据,致使冲突发生。尽管该算法可以发现冲突,但没有冲突检测和阻止的能力,而载波侦听多路访问/冲突检测(CSMA/CD, Carrier Sense Multiple Access with Collision Detection)技术就是为此而生,它是CSMA的改进版本。
CSMA/CD是标准以太网、快速以太网统一采用的介质争用处理协议(但万兆以太网采用全双工通信,因此不采用该协议)。它最大的亮点在于当它侦听到有冲突发生时,可以立即中止数据帧的发送,快速的中止被破坏的帧可以节省时间和带宽,且发送一个阻塞信号,强化冲突以使其他节点更容易发现冲突的发生,不再同时发送数据,避免更多冲突的产生。
其控制原理可以用以下三点概括:
先听后说,边听边说
当要发送数据时,先检测是否空闲,是则发送数据。且发送数据的同时继续侦听介质,确信没有冲突才继续传输数据。如果一直无冲突则持续到数据发送完毕。
一旦冲突,立即停说
如果检测到冲突,则立即停止发送数据,同时发送一个阻塞信号加强该冲突,让其他节点更容易发现介质上出现了冲突。
等待时机,然后再说
等待一个预定的随机事件,且介质空闲,再重新发送数据。
下图是该原理的示例:
以太网定了一个最小帧(即帧的有效载荷不低于46个字节),其大小和网络分布的距离、传输介质的类型和目的节点等因素有关,综合这些因素定义了一个公认值——以太网时隙,为10Mbps速率下传输512位数据所用的时间,即51.2μs。
当有多个正在传输数据的节点检测到冲突时,它们都会发送一个阻塞帧(32位全为1的帧)来响应。
下面一个示例来说明冲突检测原理及工作方式:
CSMA/CD除了可以检测冲突发生,还可以在冲突发生时进行随机延迟,尽量避免再次冲突。这里涉及避让延迟问题,也就是到底要延迟多长时间再重传,这就是CDMA/CD的截断二进制指数退避算法(Truncated binary exponential backoff)。
该算法在发生冲突时,其避让的时间是以时隙数位单位的随机时间,但不同次冲突时所能延迟的最大时隙数是不一样的,且呈指数关系递增。因为当线路出现冲突时,如果所有节点都以同样的避让间隔时间,那么就很容易产生二次、三次的碰撞。
下图是该算法的流程图:
同样,该方法虽然是传统CSMA的改进,但仍然存在它的缺点;即当网络中都只有少量数据需要传输时,其节点之间对介质的使用几乎是公平的,但当出现一个节点需要大量的发送数据时,就可能出现一个节点长时间控制整个网络的情形。
上文中图片均来自《深入理解计算机网络》