再谈数据包排队(二进制和半导体)

昨天写了一篇软文:
数据包怎么排队?从存储转发网络看芯片: https://blog.csdn.net/dog250/article/details/90542988

时间仓促,今天继续。

共享介质以太网是分布式仲裁的网络,执行的CSMA/CD说白了就是为了达成某种共识而运行的一种分布式算法,这个和CPU Cache一致性协议,以太网生成树协议STP以及路由协议RIP非常类似。PCI总线也是执行类似的仲裁算法。

以CSMA/CD为例,这种仲裁算法是运行在时间域上的,最终要解决的问题就是 确保公平的前提下,我要等多久才能发送数据。

数据包在发送节点的本地排队!

一旦数据包发出去,要么成功抵达目的地,要么crash,没有第三种可能。它们不会静下来等待资源而排队(当然了,Hub有一定的队列能力,但纯属Trick,没意思)。

为什么节点以如此鲁莽的方式发送数据,数据还能大概率安全抵达呢?

这种因为数据发送行为本身符合一定的统计规律,而CSMA/CD算法利用了这种统计规律,制定了一个完美的基于该统计规律的策略。

换句话说,共享总线的以太网总线介质在时间域上是 统计复用 的。

这是分组交换网的核心!

然而,这种共享介质时域统计复用在跨越广域地理范围却不能适用,因为 光速有极限

如果中国和美国之间运行CSMA/CD,那么一个Slot至少要400ms,将近半分钟的延迟,以此为等待的基本单位来实施统计复用,那基本就是不可用。

此外,Slot越长,随着节点的增加,冲突的概率也会随之增加,带来的结果就是资源利用率的急剧跌落。


存储转发 提供了另一种可能。

数据包在中间节点排队。

对时间的统计复用转换为对队列缓存空间的统计复用。时空转换而已,统计规律还是原来的统计规律,即 转发节点数据包的到达(以前是发送时间)符合泊松分布。

问题是,电脉冲如何排队? 如何把一个时间域的量转换为一个空间域的量?

行驶中的汽车是时间域上对道路资源的复用,然而遇到堵车马上就变成了空间域对道路资源的复用,低下头是人间。

然而脉冲怎么办?

脉冲那可是永不停歇的电磁波啊,就像飞机停不下来必须绕圈圈一样,如何让一簇簇的电子绕圈圈?

如果我们把每一个电子都看做是一架飞机,那么以上的思路完全正确。一个数据包被若干电子的移动所表达,由于前面的导线可能在传输另外的数据包,为了不让这簇电子继续前行,让这些电子一起原地绕圈圈,等待时机再继续沿着导线走,就是一个正常的解法和思路。

但是实现起来极其困难!

为什么我在上篇文章中说感谢二进制?

是故,易有太极,是生两仪,两仪生四象,四象生八卦,八卦定吉凶,吉凶生大业。

虽然说很难用电子簇表达“温州皮鞋湿”这句话并保存起来,但是保存“有还是无”却是简单的,感谢二进制的原因是 任何事情都是可以转换成有限个一般疑问句的。 就以“浙江温州皮鞋湿”为例,它可以表达为:

  1. 这是个物品吗?是。
  2. 这个物品是食品吗?不是。
  3. 这个物品是鞋吗?是。
  4. 这个鞋子是皮鞋吗?是。
  5. 这个皮鞋是红蜻蜓牌的吗?是。
  6. 红蜻蜓是温州的牌子吗?是。
  7. 温州属于浙江吗?是。
  8. 皮鞋湿了吗?是。

我们可以把任何信息保存成若干个“是”或者“不是”的集合,这就是二进制的精髓, 它在表达上全面,而在实现上简单。

我们可以用有或者没有来表达二进制的0和1,当然,如果我们要用电子来实现,那么电容的放电和充电就是表达0和1的最简单的方案了。

首先,我们得承认一个数据包可以表达成一系列的0和1,如果一根导线在传输一个数据包,那么它实际上传输的是一个时间域上的脉冲序列,如果脉冲的采样间隔(可以理解为比特率)为 t Δ t_{\Delta} tΔ,如果要表达二进制10010,那么也就是:

  • 时间点 T 0 T_0 T0:导线与地的电压为5V。
  • 时间点 T 0 + t Δ T_0+t_{\Delta} T0+tΔ:导线与地的电压为0V
  • 时间点 T 0 + 2 × t Δ T_0+2\times t_{\Delta} T0+2×tΔ:导线与地的电压为0V
  • 时间点 T 0 + 3 × t Δ T_0+3\times t_{\Delta} T0+3×tΔ:导线与地的电压为5V
  • 时间点 T 0 + 4 × t Δ T_0+4\times t_{\Delta} T0+4×tΔ:导线与地的电压为0V

以下的电路可以简单解释时域上的脉冲信号如何存储在空域上的内存里:

再谈数据包排队(二进制和半导体)_第1张图片

按照上图,为了存储二进制10010,我们只需要控制时钟电路,使得:

  • 时间点 T 0 T_0 T0:闭合继电器1
  • 时间点 T 0 + t Δ T_0+t_{\Delta} T0+tΔ:闭合继电器2
  • 时间点 T 0 + 2 × t Δ T_0+2\times t_{\Delta} T0+2×tΔ:闭合继电器3
  • 时间点 T 0 + 3 × t Δ T_0+3\times t_{\Delta} T0+3×tΔ:闭合继电器4
  • 时间点 T 0 + 4 × t Δ T_0+4\times t_{\Delta} T0+4×tΔ:闭合继电器5

OK,我们已经实现了数据包脉冲排队!如何将排队的数据包出队,这个比较简单,不再赘述。

现在的问题是,真的要连接这么多的继电器电路吗?我们知道,一个字节8个比特,一个数据包1514个字节,也就是1514*8个比特…上万个元件组合才能存储一个数据包,考虑到抗电磁干扰,简单10K的队列量就需要几间屋子了吧…

理论OK,但这根本就不实用。继电器场面太宏大了。

所以这是为什么感谢半导体的原因。

半导体的发现促使了IT的形成和发展,背后的助力正是芯片产业。

有了半导体,不需要复杂的继电器了,如果你想实现 一通电就闭合 或者 一通电就断开 的功能,不用折腾继电器了,玩PN结就好了。而PN结是可以刻录在超级超级微小的半导体上的。

芯片,现代版《核舟记》。为什么芯片产业显得高端,因为它传承的是手艺人的理念,良品率低,所以必须精雕细琢,精益求精。

二进制,让描述信息成了可能,而半导体,让二进制描述信息得以轻松实现。二者配合的太巧妙。


曾经也是挺看不惯IT行业的,后来自省,那是因为看不惯的是行业氛围,行业本身的牛逼的东西还是有的。

  • 芯片
  • 编译器
  • 操作系统
  • 数据库

这些才是硬核。


特定业务领域编程,大规模运维发布,满足客户的需求,这些轮子之上的锅反而都是些流程化的事情,仅仅关注这些,如果不在硬核领域持续充电,持续搞这些人人能做的流程化的事情,反而可能会耗尽一个人的心血,最终面临被辞退被替代。如果整个行业以这些为根本,那么这必然会导致劳动密集,从而导致每个从业者都逐渐成为疲者倦客,也是挺悲哀的。


浙江温州皮鞋湿,下雨进水不会胖。

你可能感兴趣的:(再谈数据包排队(二进制和半导体))