最早的以太网是将许多计算机都连接到一根总线上,在同一时间内只能允许一台计算机发送数据。所以为了协调单总线上多计算机的工作,以太网采用了CSMA/CD协议。
放假无聊写给自己看的,所以句子成分有点复杂而且不po图(属于是恶趣味了)。
1.定性分析
CSMA/CD 意为载波监听多点接入/碰撞检测
名字包含了它的三个要点:
1.1.多点接入
没什么好说的,表明这是总线型网络,多个计算机接在一根总线上
1.2./1.3. 载波监听/碰撞检测
载波监听,意为检测信道(是否空闲)
从总线型网络的定义不难看出,使用CSMA/CD协议的以太网只能进行半双工通信。因此为了确保本机发送的数据帧不会在总线与其他数据发生”碰撞“,在发送前检测信道直到确保信道空闲是很有必要的。
当前信道空闲,是站点发送数据的必要条件
由此我们可以说,在发送前检测,是为了取得发送权。
但数据帧的传输需要时间,其他站点或许因为传输时延而误以为此时信道是空闲的从而发送数据,导致双方数据帧在若干时间后发生碰撞。因此在发送过程中检测信道,以为了及时发现有无其他站的发送和本站的发送产生碰撞——其实这就是碰撞检测,也是有必要的。
2.定量分析
写起来发现 帧间最小间隔 太磨人了,以下计算暂时忽略这个东西,懂的都懂。
2.1. 在争用期内才能检测到可能发生的碰撞
假设A站点和B站点之间的传播时延为
(可能这个数值有点抽象,其实就是 两站点间的距离 除以 电磁波在信道中传播的速度)
令 时,A给B发送信息
显然在 时,B检测到信道是“空闲”的。
(这里 的取值不用纠结是用小括号还是大括号,毕竟现实中的一瞬间可忽略)
回顾上文——当前信道空闲,是站点发送数据的必要条件。
所以说,因为“当前信道空闲”,B也有可能在这段时间发送信息,从而导致碰撞。
令 时,B给A发送信息。
其中
显然,B站会在 时刻检测到碰撞并停止发送
而 A 会在时间为 时检测到B发送的信息。也就是说,B站在时刻发送的数据帧会在经过一个传播时延 后被A检测到
(实际上A检测到的是经过碰撞后被干扰的B站的信息)
每个发送站都希望尽早知道自己发送的数据有没有发生碰撞。那么,A站最迟在什么时候能够确保自己发送的数据没有与B站发生碰撞呢?或者说,A站最晚会在什么时候检测到碰撞?
不难发现,当 时 取最大值,即A站最晚会在 时检测到碰撞。
(此外,在 时 取最小值 )
端对端的往返时间 ,我们称之为争用期
换言之,只要A站从一开始(也可以说从时刻)直到 的时候都检测不到碰撞(监听不到信息),就可以断定 A 最开始发出去的数据未经碰撞而成功到达 B ,而早在 时刻B站点便检测到信道非空而不会在其后发送信息,所以A就可以放心地将剩余的数据发送完毕。
2.1. 数据重传
上文说到,在检测到碰撞后会停止发送,那么在什么时机站点会重传数据呢?
围绕争用期 ,以太网采用的是一个非常直接的算法。
退避算法:
①从整数集 中随机取一个数r,站点重传时间为 ,
其中k = Min[重传次数,10] , 为从站点检测到信道空闲从而发送数据开始到检测到碰撞从而决定在若干时间后重传再到再次检测到信道空闲那一刻为止的一段时间。(懂?)
此外,在 至 时信道一直空闲,站点才会重传。
②重传达16次仍不成功时,则丢弃该数据帧并向高层报告(这说明信道爆满了,赶紧跑路)
3.边角料概念
3.1.强化碰撞
为了确保总线上所有用户都知道碰撞的发生,发送站一旦发现发生了碰撞后便会发送人为干扰信号以“强化”信道中原有的碰撞。
3.2.最短帧
站点的数据链路层在一帧发送完毕后便待机或者投入到下一个帧的发送准备工作中去了,因此过短的帧在中途发生碰撞不会被检测到。
所以为了确保发送后载波监听的时间仍 ≥ 争用期,以太网规定最短帧长度为 * 发送速率
换言之,发送完最短帧之时,争用期也过去了,有无发生碰撞便是100%确定的事。
3.3.帧间最小间隔
显然,刚收到数据帧的站点需要清理缓存以做好接受下一帧的准备,帧间最小间隔就是预留给这个过程的时间。概念很自然,但是牵涉到的计算就令人难受了。理论上说,上述所有的 都需要往后推一个帧间最小间隔。
4.总结
CSMA/CD协议要点归纳如下:
①准备发送:准备好待发送的以太网帧
②检测信道:一直检测信道直到信道空闲并且维持一个帧间最小间隔,方可发送
③继续监听:在争用期内未检测到碰撞,断定该帧不再会发生碰撞。继续发送,发送完毕后待机,或者回到①;在争用期内检测到碰撞,断定该帧发送失败,执行退避算法。
此外,考虑到有可能发生的数据重传,以太网每发送完一帧必须暂时保留一下。
5.一些具体数字
争用期为 = 51.2μs
10 Mbit/s 的以太网在争用期可以发送512 bits
因此也可以说此时的争用期是512比特时间
同时,最短帧为512 bits
强化碰撞发送的人为干扰信号:32bits or 48 bits