在规划一群计算机如何使用网络介质传输数据包而不是一群人如何使用电话线实时通话的时候,不得不换一种思路。
为什么以太网最初没有采用TDM或者FDM或者随便别的什么xxDM,而是采用随机统计分时复用的CSMA/CD呢?
- 以太网流量是突发的
- 以太网流量不要求实时
- 以太网无连接
其实,甚至 冲突检测 都是次要的,它只是优化,而并非核心。有冲突就要有退避,所以,紧随着冲突,以太网采用的二进制指数退避,也并非核心!如果把所有的冲突检测以及退避机制都交给上层,那么保留一个核心的简洁以太网模型来分析是必要的。
只需要假定以太网流量符合泊松分布就足够了。在基于这个假设的结论进行分析之前,必须先来看一下 为什么冲突并非核心。 不然就不敢随意抛弃它。
如果一个站点已经检测到信道空闲,那为什么还会有冲突呢?因为数据帧的传输是有传播时延的,数据帧传输速度有上限,即光速 c c c,也就是说对于每一个站点的冲突检测机制来讲,它有一个所谓的 视界 视界外面的东西,站点是检测不到的。
- 站点只能检测到数据帧到达目的地之前 L c \dfrac{L}{c} cL( L L L为线缆长度)时间的冲突!
所以说,冲突是由光速极限引起的,这种物理世界的局限,或者你说缺陷也行,冲突并非由算法导致,所以冲突并非核心。
然而,日常物理世界诺大的光速到了纳秒,微秒,毫秒计时的计算机网络世界,却是一个非常日常的参数。所以,虽然它不是算法的核心,但是引发的冲突导致的重传将会极大影响以太网的效率。
按照假设,以太网的流量符合泊松分布,忽略复杂的二进制指数退避,再假设重传概率是常数,那么信号的效率 E E E可以表示为:
E = 1 1 + 2 B L e c l E=\dfrac{1}{1+\dfrac{2 B Le}{cl}} E=1+cl2BLe1
其中, B B B为带宽, L L L为线缆长度, l l l为帧长度, e , c e,c e,c为常数。
由此, L L L越长, B B B越大,CSMA/CD的效率就越低,反之,帧长 l l l越长,效率就越高!所谓的以太网最小帧长度64B,普通帧长度1500B,理论上都是可以从这公式里算出来的,之所以我们现在都接受1500B是以太网卡的普遍MTU,其实是因为这样在泊松分布的假设下效率最高。
所以说,随着对带宽需求的提高,对距离的需求提高,CSMA/CD逐渐变得不再适用,也因此,后来的千兆,万兆以太网,干脆不再支持CSMA/CD了。当然,CSMA/CD时代的1500B这个默认MTU值,作为以太网的标志依然被兼容性地保留了下来。
由于CSMA/CD的冲突是光速固有极限带来的,所以在时间域上我们没有办法消除。
要想消除冲突,必须将时间域上的统计分时复用转换到空间域上的统计缓存复用。
在时间域的CSMA/CD时代,统计分时复用机制是分布在每一个站点上被实现的,这就是 介质访问子层 的作用,如果转换到了空间域的缓存统计复用,那么介质访问子层便不再需要,有帧就直接发,所有的分布式介质访问子层的功能将统一集中于交换节点的队列管理系统。
这就是交换式以太网,在纯交换式以太网中,已经不再需要CSMA/CD,交换机取代了介质访问子层的作用。当然,在工程上,兼容是必须的,所以,支持CSMA/CD并不意味着一定就采用了它。
说回冲突。
在时间域上,同一个时间槽,只能有一个帧在传输,如果别的帧也传输了,就会造成冲突,两者皆退避。
在空间域上,发生着完全相同的事情。
同一个缓存位置,只能有一个帧占据,如果同时来了两个帧,针对该位置,那就是冲突了。然而队列机制可以将这次冲突暂时 积累 下来,使用 下一个位置 ,和时间域不同,时间只能纵向延展,而空间域则可以横向扩展。
最终,当空间域用尽了整个缓存后,需要将积累的冲突进行一次性惩罚,即积累式退避,这就是AIMD中MD的意义,其实就是空间域的积累式指数退避。积累式退避也是空间域的,即可发送字节数的MD,而不是等待时间MD。
介质访问子层功能在交换式以太网时代已经被架空了,事实上它也控制不了 什么时候发送 ,它只需要知道能发多少就是了。
这就是总线式以太网向交换式以太网进化过程中背后的故事。
值得一提的是,不要纠结于为什么以太网流量符合泊松分布,事实上,以太网流量根本就不符合泊松分布,之所以采用这个泊松分布假设,是因为在数学上比较容易处理,其背后的假设也是合理的:
- 数据帧的发送是独立的随机事件。
浙江温州皮鞋湿,下雨进水不会胖。