参考文献:《Computer Networks》第五版
CSMA/CD(Carrier Sense Multiple Access Protocols with Collision Detection) 是以太网的的基础。中文解释为带有冲突检测的载波侦听多路访问协议。
首先需要明确的是CSMA/CD在网络分层模型中属于MAC子层,MAC(Medium Access Control)顾名思义就是如何控制设备对介质的访问,所谓介质就是信息传递的载体,对于以太网来说就是通信线缆。所以现在面临的问题就是:多个设备连在同一个线缆上,相互之间通信,而线缆只能满足某一时刻只有一个设备在发送信息,如果多个设备同时发送信息,必然会造成线路上信号之间相互干扰,产生了冲突,所以就需要一种方案来控制设备在恰当的时间发送信息,以避免冲突。
几个概念:
帧(Frame)设备一次连续发送的几十个或几百个字节,数据是被切割成若干帧发送的。
传播时延:帧的第一个字节从线路的一段到达另一端的时间,在1km的线路上电磁波的传播时延是10us。
传输时延:帧的第一个字节被发送到线路上到最后一个字节被发送到线路上的时间间隔。
CSMA/CD的解决方案是设备不断侦听线路是否空闲,一旦空闲,就立即发送一帧,同时继续侦听,如果自己发送的这一帧与别的设备发送的帧产生冲突,那么冲突的信号就会反射回来,这时设备就立即停止发送。等待一段时间后再重新发送。那么下一个问题就是它如何知道发生了冲突?
这其实就是一个简单的相遇问题,考虑如下场景,0时刻帧FA从A出发,需要时间t(传播时延)到达B,在t-e时刻它快要到达B时,另一个帧FB从B出发,并和FA相遇,两个帧相遇后立马各自返回自己的出发端以告诉设备发生了冲突,立即停止发送。那么A最晚在何时能够知道发生了冲突?我们可以通过小学奥数得出来是2*(t-e),如果e很小的话,这个时间最晚就是2t。这也就说明了在2t之前A不能发送完这一帧,只有这样它才能在发送完这一帧之前明白产生了冲突并停止发送,即一帧的传输时延必须大于等于2t。
在10M的以太网上,考虑到中继器等的作用,传输时延t大约为25.6us,2t就是51.2us,发送一帧的时间要大于等于51.2us,那么帧的最小长度就是10M*51.2us = 512bit = 64Byte.