赞
踩
报文编码 | 基于目的IP地址的最长匹配做查询 |
软件结构 | 在软件算法上优化,使用Tree查找和Cache优化 |
硬件结构 | 大量基于MIPS指令集的CPU进行软件转发,后期逐渐出现了基于总线的分布式转发架构,例如Cisco的7500系列路由器 |
报文编码 | MPLS简化核心路由表条目数 |
软件结构 | 软件结构相对稳定没有太大变化 |
硬件结构 | 专用处理器繁荣的十年,各种专用芯片来做Offload,加密芯片,TCAM查表,各种基于微码的网络处理器,Fabric逐渐采用CLOS架构构建多机集群. |
报文编码 | VXLAN和Overlay的兴起 |
软件结构 | 软件转发的回归,DPDK/VPP等开源软件的出现 |
硬件结构 | 多核通用处理器性能越来越强,SR-IOV的出现,核心交换芯片越来越强并支持虚拟化 |
报文编码 | SegmentRouting,数据包即指令 |
软件结构 | 容器技术的出现,CNI触发Host Overlay,尽量采用协处理器或者网络设备卸载负担, P4等通用网络编程语言的出现 |
硬件结构 | 可编程交换芯片的出现,各种SmartNIC方案盛行,低延迟通信的需求日益增加,特别是AI带来的快速I/O响应 |
报文编码 | QUIC+SR |
软件结构 | 给更多的终端以后浪般的选择的权力 |
硬件结构 | 智能都在设备上了,网络可以简单一点了 |
一开始的路由器其实是叫服务器的,1986年思科发布的AGS(Advanced Gateway Server). 而Cisco IOS本质上不就是一个软件的操作系统么.
最早的报文处理系统就是软件的,当然密级高的资料我是不会说的,接下来每个资料我都会引用公开的文档以免惹来麻烦,第一本公开文档就是一本老书
那个年代也是极力的从软件算法上优化,最早的时候就是进程交换,如下图所示,在操作系统上执行一个转发进程,每个包进来都走这个进程去查询路由表,然后转发:
但是这样是不是太蠢了点,每个报文都要查询一次路由表,随着网络规模的扩大,路由表多了就发现性能有问题了,所以后面出现了所谓的快速交换,也就是增加了一个Cache用于路由查询,也就是我们常说的Fast Switching。后来随着路由表规模进一步加大,然后只能在数据结构上改了, 也就是逐渐出现的基于各种树的查询, 例如Linux Kernel很长一段时间都在使用Radix Tree,而Cisco也是从RadixTree到后期的CEF。
其实从这个时代来看,网络通信数据量并不是太大,协议也相对复杂,更多的是通过IP协议和其它各种协议互通互联,通信需求来看也基本上是在100Mbps处理能力以内,用软件转发是相对较好的解决方案,这一时代的很多产品都是基于MIPS处理器实现的,所以本质上CPU内部还是执行的标准的MIPS指令集, 而路由器的升级更多的就是CPU的升级,从最早AGS使用的Motorola 68000,到后面开始采用 R4600, R4700,到后期的R5000, 总线结构从最早的私有的Cisco Cbus到后期标准的PCI总线的PA卡,以及CyBus这些东西,本质上结构并没有太多的变化:
报文编码 | 基于目的IP地址的最长匹配做查询 |
软件结构 | 在软件算法上优化,使用Tree查找和Cache优化 |
硬件结构 | 大量基于MIPS指令集的CPU进行软件转发,后期逐渐出现了基于总线的分布式转发架构,例如Cisco的7500系列路由器 |
对于VOQ的解决方案, 核心部分在"matching Scheduler"上, 如何调度将是一个难题. 其数学模型实质上是一个二分图匹配的问题. (敲黑板:华为任总说的数学很重要)通常调度算法被分为两类, 最大匹配(maximum size matching, MSM)是指边数达到最大,而最大权重匹配(maximum weight matching, MWM)是指边的权重之和达到最大.由于这两种算法具有复杂度高、硬件实现复杂等缺点, 在实际应用中, 我们一般用极大匹配(maximal matching)近似最大匹配. 所谓的极大匹配是指在当前已完成的匹配下, 无法再通过增加未完成匹配的边的方式来增加匹配的边数或权重.
这也就是日后那个引领SDN的Nick教授搞的事情:Cisco GSR 12000上实现了基于VOQ+iSLIP调度的算法. 如下左图所示: 在使用共享总线的架构中, 仅有最大吞吐量的25%, 使用不带VOQ的FIFO队列时, 吞吐量为最大值的58.6%. 而如果使用变长报文而不使用Cell模式转发, 则吞吐量大约为最大值的60%. 使用VOQ+iSLIP的方式后, 吞吐量为100%, 非常接近理论的最大值.2.2 硬件转发之Linecard
Fabric设计是相对简单的,困难的还是在线卡上,一方面是路由表的容量越来越大,另一方面是对功能的需求越来越多了。 线卡结构的发展历程参考Cisco可以清晰地看到, 从最早的路由器全部使用核心CPU转发. 到后来在总线上使用控制器调度. 再到后期Cisco 7500上使用VIP接口卡, 实现分布式的CPU处理; 然后在基于Crossbar的平台上使用ASIC进行处理. 例如7600上OSM线卡和Cisco 10000系列所使用的PXF. 到最后在线卡上使用网络处理器(NP), 例如Cisco的SPA/SIP架构. 后期例如在CRS-1使用的SPP处理器以及使用全新QuantumFlow网络处理器构建的ASR1000边缘路由器平台等. 其实那些年有很多的争论也有很多的实现,真是百花齐放的年代:传统的表项查找方法都是基于SRAM的软件查找方法,共同特点是查找速度慢。线型查找法需要遍历表中的所有表项;二叉树查找法需要遍历树中大多数节点,而且查找速度受树的深度影响较大;基于硬件的TCAM查找法正是在这种背景下提出的,用此方法进行查找时,整个表项空间的所有数据在同一时刻被查询,查找速度不受表项空间数据大小影响。TCAM为啥叫Ternary Content呢,其实就是每个bit位有三种状态, 0,1,Don't care,这样不就很容易去做一些匹配了么,特别是路由器那样的Longest Match
一般来说的做法如下,通过TCAM查询然后获取Index,然后再到内存里面把index对应的信息返回给路由器。
挑出两三页挺重要的贴个图就好,意会一下,详细的宝宝不说~~
1995~2010 由软向硬的过渡
报文编码 | MPLS简化核心路由表条目数 |
软件结构 | 软件结构相对稳定没有太大变化 |
硬件结构 | 专用处理器繁荣的十年,各种专用芯片来做Offload,加密芯片,TCAM查表,各种基于微码的网络处理器,Fabric逐渐采用CLOS架构构建多机集群. |
3. 软件定义的网络
分分合合,合合分分,谁都没想到随着虚拟化的兴起,虚拟机内互相通信的网络成为网络设备再一次软件化的开端,当然开始的时候只有交换机, 于此同时为了大量的虚拟交换机编程和转发方便,openflow和openvswtich诞生了,然后公有云和私有云的部署使得网络设备进一步虚拟化,虚拟云路由器也随之诞生, 后面伴随着VDC/VPC的发展,更多的设备虚拟化了:经过演化,最后形成了如下的标准架构:
数据包到达网卡设备。
网卡设备依据配置进行DMA操作。
网卡发送中断,唤醒处理器。
驱动软件填充读写缓冲区数据结构。
数据报文达到内核协议栈,进行高层处理。
如果最终应用在用户态,数据从内核搬移到用户态。
如果最终应用在内核态,在内核继续进行。
具体去看一本书撸一圈代码都会了:
3.3 VPP 本质上就是对报文编程一个向量,然后批量处理,同时它定义了灵活的转发链状结构,可以很容易的在转发链条上添加新的软件特性:报文编码 | VXLAN和Overlay的兴起 |
软件结构 | 软件转发的回归,DPDK/VPP等开源软件的出现 |
硬件结构 | 多核通用处理器性能越来越强,SR-IOV的出现,核心交换芯片越来越强并支持虚拟化 |
报文编码 | SegmentRouting,数据包即指令 |
软件结构 | 容器技术的出现,CNI触发Host Overlay,尽量采用协处理器或者网络设备卸载负担, P4等通用网络编程语言的出现 |
硬件结构 | 可编程交换芯片的出现,各种SmartNIC方案盛行,低延迟通信的需求日益增加,特别是AI带来的快速I/O响应 |
丢包的统计如下图:
做安全,微分段也可以给你加字段啊:
这就是一个前浪过去10多年的从业经验和见到的盛世繁华,以及给后浪的选择的权力。
2020~未来 :NewIP:后浪:给更多的终端可以智能选择的权力报文编码 | QUIC+SR |
软件结构 | 给更多的终端以后浪般的选择的权力 |
硬件结构 | 智能都在设备上了,网络可以简单一点了 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。