总线型网络的先天冲突性得到有效的避免,否则网络将无法工作。解决这一问题的位置被放在了数据链路层,而不是摒弃这种问题多多的拓扑结构。IEEE最先提出了载波监听多路访问/冲突检测算法,即CSMA/CD。这种算法的原理基于监听的大原则。每台主机在需要发送数据之前首先监听总线,如果发现总线上当前有数据,则启动退避算法(一种随机产生某个等待时间的算法);如果发现总线空闲,则立刻发送数据并继续监听总线,则停止发送数据,启动退避算法,等待一段时间后再次尝试发送数据。具体流程如图4-3所示。
CSMA/CD算法的原理归结起来就是一句话:在没有冲突的时候发送数据,只有产生冲突就等待。
这种思想看上去很美,我们会认为只要严格遵守这一原则,冲突就不会发生,数据也将顺利被发送。但实践证明,这种算法无法规避冲突,当网络中的主机越来越多时,算法彻底失败。