当前位置:网站首页>网络设备硬核技术内幕 路由器篇 7 汤普金森漫游网络世界(下)
网络设备硬核技术内幕 路由器篇 7 汤普金森漫游网络世界(下)
2022-07-27 14:06:00 【用户8289326】
(本篇仿照了美国科学家乔治·盖莫夫在《物理世界奇遇记》中的写作手法,在此致敬)
上回说到,由于路由器转发平面找不到汤普金森先生对应的FIB表项,把汤普金森先生送去了主控板。
主控板的CPU历经千辛万苦,终于找到了汤普金森先生对应的路由表项。
那么,CPU是如何为汤普金森先生找到路由表项的呢?
原来,CPU存储和检索路由表项的方法,与NP线卡存储FIB表的方法,有着根本的区别。
前面提到,NP线卡上的FIB表项,是存储在TCAM处理器中的。
由于TCAM可以将Key的某些位设为not care,因此可以用于实现FIB表的最长匹配查找。
但是,主控板上的RIB(Route Information Base,路由信息库),是只能保存在DRAM里的。这是为什么呢?
原来,RIB的大小远远大于FIB。
实际操作过企业级和电信级路由器的同学一定有印象,在这些路由器中,EBGP,iBGP,OSPF,IS-IS等路由协议是可以互相导入的。也就是说,同样的路由会在多个路由表中出现。这样一来,路由表的数量会大大多于FIB表。因此,只有近期匹配过数据包的路由条目,才会被下发到转发平面高成本的TCAM存储的FIB表中,其余的路由条目存储在主控板的RAM中。对于高端路由器,主控板能够存储的路由条目数可多达20M以上,而线卡上的FIB条目受限于TCAM容量,一般在256K-4M之间。
那么,主控板的CPU应该如何在海量的路由表中,以最快的速度找到最长匹配路由呢?
方法1:通过一种叫做Radix Tree的数据结构组织路由表项的索引。它可以在近似O(1)的时间里实现最长匹配。
方法2:在主控板的CPU上,外挂较小的TCAM,仅用来存储路由表项的索引。查找到路由表的索引后,再去RAM中读取对应的路由表。如下图所示:
CPU通过路由前缀,快速从TCAM内读取到DRAM中存储该路由信息的偏移量,再去DRAM中读取该条路由信息,这样可以利用较少的TCAM资源,节约大量在RAM中查询Radix Tree的时间。
正是这样的过程,让主控板的CPU能够为汤普金森先生找到出路。
汤普金森先生被扔回到NP芯片的传送带里。机器人扫了扫汤普金森先生的二维码,念道:“源地址 123.112.90.43,目的地址 75.126.33.156”
机器人身后的TCAM箱上的指示灯闪烁了一下,机器人继续念:下一跳:90.182.73.116,出接口:GigabitEthernet 3/0/1”,并在汤普金森先生身上贴了个新的二维码。
绿洲精灵看了看汤普金森先生身上的二维码,不禁倒吸一口凉气。
二维码上还写着:入接口:HundredGigabit 0/0/1。
而这里,正是槽位0,来自100G以太网接口的汤普金森先生将被送去槽位3,并从千兆接口挤出去。
汤普金森先生被机器人夹起来,送去一个排着长龙的队尾,人多得仿佛像早上8点的西二旗地铁站。
“这里就是NP的队列。”绿洲精灵告诉汤普金森先生,“NP支持VoQ队列,对每个出方向的接口都有一个虚拟的队列。”
“我们在槽位0,去槽位3的GE 3/0/1需要经过交换网板。但,这个接口现在拥塞状态,你看数据包都挤得跟豆包似的……”
汤普金森先生问:“为什么会拥塞呀?”
“能不嘛,你看你这来自100G接口的,非要从1G接口出去。”绿洲精灵翻了翻白眼。“和你一样要去那个接口的还很多,超过了1G的速率,所以……”
“所以,本线卡去往GE 3/0/1的VoQ队列信用不足,现在开始按WRED方式丢包!”绿洲精灵话音未落,机器人插话了。
绿洲精灵喊道:“等一等……”
但机器人是无情的。机器人从长长的队伍中随机提起了一些人,他们都瞬间消失了。机器人又把汤普金森先生提起来,一阵白光闪过,汤普金森先生什么都不知道了。
当汤普金森先生醒来的时候,演讲已经散场了。收拾会场的保洁阿姨叫醒了他。汤普金森先生摸了摸湿润的嘴边,揉了揉眼睛,走出了会场。
本期问题:
如果路由器按TD方式丢包,汤普金森先生能否走出这台路由器?
上期遗留问题解答:
为什么路由器的NP不需要提前读取数据包的源地址、目的地址等关键信息,而进入CPU时有专用硬件进行预先读取呢?
NP每级流水线中都有可编程的专用硬件,按照微码并行提取这些关键信息。而多核CPU没有这种专门从数据包头读取信息的多级单元,只有一个Parser一次性提取数据包头字段,预先读取并写入数据缓存(data cache)中。
边栏推荐
- Kubernetes 节点磁盘故障排查
- JS epidemic at home, learning can't stop, 7000 word long text to help you thoroughly understand the prototype and prototype chain
- idea打jar包与引入jar包
- Is there a regular and safe account opening platform for gold speculation
- Graphic SQL of giant image
- [work] about technical architecture
- [Yunxiang book club issue 13] packaging format of video files
- 炒黄金开户平台有没有正规,安全的
- An example of building 3D effects on the web based on three.js
- Jmeter录制接口自动化
猜你喜欢

Understand the evolution of redis architecture in one article

终于有人把面试必考的动态规划、链表、二叉树、字符串全部撸完了

Construction and empirical research of post talent demand analysis framework based on recruitment advertisement

How to do well in enterprise system vulnerability assessment

What you want most is the most comprehensive summary of C language knowledge. Don't hurry to learn

Research on Chinese idiom metaphorical knowledge recognition and relevance based on transfer learning and text enhancement

Thread knowledge summary

C语言基础知识梳理总结

于不确定中见“安全感” 沃尔沃2022年中问道

视觉系统设计实例(halcon-winform)-9.文字显示
随机推荐
Lesson 3: SPFA seeking the shortest path
[popular science] the difference and connection between accuracy and resolution
面试官问:如何判断一个元素是否在可视区域?
Is there a regular and safe account opening platform for gold speculation
【ManageEngine】什么是SIEM
【WORK】关于技术架构
Stock trading 4
Stm32f103c8t6 drives ssd1306 0.96 "IIC OLED display under Arduino frame
Interprocess communication
Understand the evolution of redis architecture in one article
[work] about technical architecture
数据仓库项目从来不是技术项目
If we were the developer responsible for repairing the collapse of station B that night
网络设备硬核技术内幕 路由器篇 19 DPDK(四)
MySQL save data prompt: out of range value for column error
DXGI acquisition process
OBS 进阶之 DXGI 采集屏幕流程,并如何修改为自己的光标
Navicate reports an error access violation at address 00000000
STM32F103C8T6在Arduino框架下驱动ssd1306 0.96“ IIC OLED显示
Database storage series (1) column storage