(本篇仿照了美国科学家乔治·盖莫夫在《物理世界奇遇记》中的写作手法,在此致敬)
上回说到,绿洲精灵告诉汤普金森先生,他遇到了麻烦……
“你的麻烦在于,”绿洲精灵轻叹了一口气。“有TCAM红字的箱子里边,是路由器的数据库。”
“这里是路由器的NP处理器。每个机器人都是NP处理器流水线的一个单元。”
“机器人会根据TCAM数据库的内容,确定每个数据包的去向。”
“刚才检查你衣服二维码的,是IP三层转发的机器人。它需要按照最长前缀查找你的目的IP地址的数据,并决定你的去向。”
汤普金森先生有点糊涂:“什么叫最长前缀查找?”
绿洲精灵开始不紧不慢地给汤普金森先生讲解:
原来,在Internet中,总共有42.9亿个地址(2的32次方)。如果为每一个地址都存储一条数据,标志着它应该从哪个接口发出,下一站是哪里,是不现实的。
科学家们发现,由于Internet的地址大部分是连续分配的(按照网段分配),因此,我们只需要查找某个地址所在的网段对应的下一跳记录就可以了。但是,问题在于,每个地址,所在网段的长度并不是固定的。
汤普金森先生身上的地址是75.126.33.156,它有可能在以下这些网段中:
75.0.0.0/8
75.126.0.0/16
75.126.33.0/24
……
但是,只有后缀数字最大的子网,才是它最精确的去向。
因此,科学家们发明了一类特殊的存储器,叫做TCAM。它能够以第一时间找到后缀长度最长(不确定的位数最多)的数据库条目。
(想知道TCAM的具体工作原理,可以看这里——交换机篇 8 还是选择原谅她)
在路由器中,利用TCAM,就可以快速在数据库中,查找数据包应该去的下一跳以及出方向接口了。这个数据库被叫做FIB表(Forwarding Information Base)。
“那么,为什么说,我有麻烦了呢?”汤普金森先生疑惑地问。
“因为你的目的地址,在FIB表中没有查找到结果。”绿洲精灵轻轻叹了口气。“你马上会被送到控制平面去分析。”
说时迟那时快,汤普金森先生发现自己被机器人像提小鸡一样提起来,塞进了另一条管道。
他高喊:“绿洲精灵——”
“别担心,汤普金森先生。”绿洲精灵还是不紧不慢地说。“我会一直陪伴着你,直到你离开这台路由器。”
又一阵天旋地转以后,汤普金森先生又看到了熟悉的灰黑色夹杂着紫红线条的硅片。只不过,这一次他没有被扔到行李转盘一样的传送带上,而是坐在像跆拳道教室一样的地板上:
地板上还有很多其他人,每个人无论身高高矮,都分到了连续4片垫子。
“你现在在路由器主控单元(MPU,Main Process Unit)的内存里。”绿洲精灵告诉汤普金森先生。
“可是,这个内存和刚才机器人告诉我的控制平面是什么关系呀?”汤普金森先生不解地问。
“唉,”绿洲精灵笑了笑。“刚才说的主控单元,就是路由器的控制平面。”
“所有转发平面觉得不应该丢弃,但又不知道转发到哪里去的包,都会上送到控制平面。比如你。”
汤普金森先生自嘲:“这就是说我‘幸运’的原因?”
“哈哈哈……”
绿洲精灵笑声未落,一个机器人走向汤普金森先生,在汤普金森先生脚下捡起一张纸条,看了看读道:“源地址 123.112.90.43,目的地址 75.126.33.156。”然后走了。
绿洲精灵问汤普金森先生:“你知道为什么这里的机器人不扫描你的二维码也知道地址吗?”
汤普金森先生摇了摇头。
“你刚才从管道进入控制平面的时候,被自动扫描二维码了,提取出来的地址,就放在你的脚下。”绿洲精灵笑道。“因为控制平面的CPU是带有加速单元的,就不需要浪费CPU宝贵的时间用来干读你身上的二维码的事儿啦。”
果然,没多久,机器人回来了,对汤普金森先生说:“跟我走吧。”
汤普金森先生问:“去哪?”
机器人还没来得及回答,绿洲精灵先回答了:
请转发到朋友圈,再看下回分解!
本期的问题:为什么路由器的NP不需要提前读取数据包的源地址、目的地址等关键信息,而进入CPU时有专用硬件进行预先读取呢?
上期问题答案:如果汤普金森先生的外衣(以太网头)上,类型不是0x0800,而是0x8906,它将如何走出路由器呢?
0x8906是FCoE的类型,而不是IP数据包。路由器无法处理这一类型数据包,汤普金森先生化身的数据包将被丢弃,他永远无法走出路由器。