千兆路由器技术简介
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
千兆路由器技术简介
摘要:Internet对高带宽和服务质量的需求加上网络处理器技术和传输技术的发展引出了千兆位线速路由器的概念,并产生出实际的产品。
本文对千兆位路由器的几个技术要点作了一个简短的介绍。
关键词:千兆位路由器网络处理器(network processor)表查询(table lookup)纵横交叉开关(crossbar switch)
一路由器结构演进
社会的需求和技术的进步使Internet进入飞速发展阶段,并正在成为新一代的全球公众信息网。
整个Internet网络性能的提高牵涉到传输技术、主机速度、操作系统、交换机复用器等诸多方面,但路由器性能乃是其中最关键和重要的因素。
所谓的千兆比特路由器是指系统吞吐量在每秒数千兆比特(multi gigabits)或更高速率的高性能路由器,从外部看它的功能实际上和传统路由器是一至的,最主要的特征是速度快,所以在本文中,我们统一称之为高速路由器。
然而高速路由器和传统的低速路由器并没有一个精确的界线,但一般说来它应具备以下的一些基本特征〖1〗:
1)系统需要有足够高的内部数据带宽来支持各端口之间数千兆的数据流量;
2)系统应具有足够高的数据包处理能力以达到每秒数百万包(Mpps)的转发能力,按Internet上数据包的平均长度为1000bits计算,每一千兆的带宽需要1Mpps的包处
理和转发能力;
3)应具有有效的QoS手段来满足客户在不同场合对不同服务质量的要求;
4)具有能支持多种现行协议标准和支持未来协议发展的能力如Ipv6,MPLS等。
随着Internet用户的增加和带宽的扩大,路由器的结构也在不断的发展,我们可以把它的发展历程划分为四个阶段,分别用下图的A、B、C、D来表示。
由于Internet和数据通讯
的发展实在太快,这几代路由器结构的产品现在都同时活跃在市场上。
图1 第一和第二代路由器结构示意图
图2 第三和第四代路由器结构
第一代的路由器是基于单一的通用CPU和实时操作系统的集中处理系统。
这种选择的依据是基于以下的事实:协议的改进频繁发生;需要支持的协议种类繁多(如IP,IPX等);另外,建立和保持一个连接的重要性超过高性能数据转发的要求。
这种路由器的结构是由通用CPU和多个物理层线路卡通过一个共享总线进行连接。
从一个端口接收到的数据包通过总线送到中央CPU,由中央CPU决策这个数据包的下一跳地址,并送出到相应的线路卡。
这样一个数据包从进入路由器到离开路由器要两次通过系统的共享总线,一次是由线路卡进入CPU,一次是离开CPU到线路卡。
路由和其他的控制功能也同时要由这个CPU来负责,显然这种路由器的性能在很大程度上取决于共享总线和中央CPU的性能。
由于一个CPU必须执行多个实时任务,于是这个实时操作系统的设计就至关重要。
这种路由器的结构到目前已经不能满足迅速增长的带宽需求。
第一代路由器的典型实例是Cisco 2500系列路由器。
从第一代路由器结构发展出来的第二代路由器是把数据包的转发处理工作进行分布式的安排。
在这种情况下,每个数据包只需要经过一次共享总线就可以了(从源接口卡到目的接口卡)。
线路卡具有了更加智能化和快速的包转发能力,在大多数情况下,线路卡都可以在本地就决定数据包的去向。
每个数据流的第一个数据包首先送到中央处理器,同时在线路卡的cache里增加了一条转发记录,使得后续的数据包可以通过查找这条记录而快速直接的转发到目的接口卡,无需中央处理器的干涉了。
线路卡cache中转发记录可以是基于一个连接的,也可以是基于一个路由的。
随着Internet规模的扩大,无论是基于连接的还是基于路由的cache都无法满足实际的需求,从而使得这种结构路由器的转发性能具有不确定性。
虽然通过给线路卡配置大容量
的Memory以把整个完整的转发表copy到每个线路卡解决了性能不确定的问题,但系统的共享总线依然是这种结构的路由器性能的瓶颈问题。
第二代路由器的实例是Cisco 7500系列路由器。
第三代的路由器结构解决了第二代路由器的瓶颈问题,这种路由器结构是目前已经上市的高档路由器中最先进的结构,具有最好的性能。
首先,系统的共享总线被交换结构所替代,高性能的交换避免了接口卡之间的总线竞争问题,把系统的内部数据带宽提高了几个数量级。
一旦路由器的内部带宽不再是系统的瓶颈,系统的包处理和转发能力的问题马上凸现出来。
为了增强系统转发能力,各线路卡上传统CPU被能力更强的硬件引擎――专用的ASIC 所取代。
通过线路卡上的完整的转发表,各接口卡完成数据转发的全部工作,而系统的路由更新和系统管理等非时间敏感但处理复杂的工作可以用通用的中央CPU来完成。
第三代路由器的实例是Cisco的GSR12000和juniper的M40。
虽然第三代路由器的结构使得路由器性能大幅度提高,但是它的问题是:一方面专用的ASIC芯片由于用量少而使系统的成本增加,并且在路由器的生产厂家还需要一支开发高性能ASIC的队伍;另一方面当今的Internet仍处于不断发展和变化的阶段,协议的标准和用户的需求可能随时发生变化,而ASIC不能很好而及时跟上和适应这种变化。
从而使产品的寿命周期减小(time-in-macket时间减小)。
针对这种情况,新一代的半导体生产商提出网络处理器(network processor)的概念,采用多微处理器(micro-multiprocessors)并行工作和专业分工的方法把数据包转发的性能提高几个数量级。
这样使网络处理器具有与ASIC相当的包转发性能的同时又具有很好的软件编程能力,适应未来发展的不确定因数。
另外网络处理器厂家和交换结构生产厂家提出了通用交换接口〖2〗(Common Switch interface,CSIX)的接口标准,进一部使网络处理器成为一种标准的部件。
二高速路由器的模型描述
为了更清楚的描述高速路由器的运作原理和流程,我们把路由器的功能区分为以下两类:数据通路功能和控制功能〖3〗。
1)数据通路功能:指路由器对每个经过路由器的数据包都进行的一系列处理和操作动作,使数据包得以正确转发的功能。
这一系列处理和操作包括:转发决策、背板交
换、队列管理等。
2)控制功能:指路由器进行的对一些非频繁发生的事件的处理和对系统的配置和维护管理的功能,一般有软件实现。
包括与邻接路由器的交换路由信息,系统管理等。
图3 路由器模型图
图3 所示为一个路由器的简单模型。
为了提高路由器的性能以适应未来网络的高带宽需求,我们很自然的把注意力更多的集中在数据通路功能上,因为经过路由器的每一个数据包都要经过这条通路的处理。
在这个模型中,数据通路功能可进一步描述为以下三个步骤:1)转发决策(Forwarding decision):当一个IP数据包到达路由器时,路由器首先把这个数据包的头中的目的地址提取出来,在本地的转发表(forwarding table)中查找这个地址所对应的出口,如果地址找到,数据包的存活时间(time-to-live,TTL)减一,包头的校验和重新计算。
2)背板交换(Backplane switch):数据包然后被送到交换结构,由交换结构再送到相应的输出端口。
在数据包等待交换结构服务的时候,有可能需要等待,为了避免线头阻塞(head of line blocking,HOL blocking)和满足不同数据包的QoS要求,需要等待的数据包有可能要进入不同队列。
3)输出调度(Output-link Scheduler)
当数据包经过交换结构到达它所需要到达的输出端口后,等待进入输出线路。
以往的路由器基本上是按照先进先出的原则,对于高档的路由器,也可能需要组织不同优先级的队列,满足不同QoS的需求。
三路由表查询
Internet上主机数量正处于急剧增长的阶段(如图4所示),同时用户对带宽的需求又在不断的增加,这两个趋势对路由器的地址查找产生了巨大的压力。
一方面,骨干网上路由器的路由表和转发表越来越大;另一方面,为了高速度,路由器需要在越来越短的时间里完成一次转发表的查询。
以Internet上数据包的平均长度为1000bits计算,每1Gb/s的带宽需要1Mpps的包处理和转发能力,也就是每一秒钟需要进行106次的转发表查询,也就是查一
次表的时间不超过1000ns ,按高速存储器30ns 读写速度计算,一次查表不能超过33次的读存储器的操作,而整个转发表可能包含了成千上万个不同的记录。
图4 近十五年来Internet 主机数量的增长图〖4〗
Intenet 路由器的地址表的查询是一个最长前缀匹配(longest prefix matching )的问题,为何是最长前缀匹配而不是定长的完全匹配可以用下面的示例来说明。
位于伦敦的路由器R 有一条通往波士顿的链路L1,同时波士顿又作为伦敦通往美国其他地区的HUB ,路由器R 有一条通往加州的链路L3和一条直接通往加洲三番市的链路L2。
图5 Internet 地址示意图
如果我们不采用地址前缀而把美国所有主机的目的地址全部放入转发表中,那么这一张转发表就会变的硕大无比,我们要存放丹佛、肯萨斯等等甚至各台主机的地址,而这些地方的所有主机实际上都是通过L1到达的。
相反,如果使用地址前缀,在我们路由器的地址表中仅仅存放了如表1所示的四条地址前缀。
现在我们把所有丹佛、肯萨斯等目的地都用一个简单的前缀USA 来表示。
把加洲用USA.CA 表示,把加洲的三番市用USA.CA.SF 表示,把波士顿用USA.MA.Boston 表示,整个转发表只有四条记录。
表1 图5
在进行转发决策的时候,我们就用了最长地址前缀匹配的方法,比如一个数据包要从伦敦通过路由器R 去美国加洲的三番市的某台主机,那么这个数据包的目的地址一定会和表1中1,2,3这三条地址前缀匹配,但是和第一条地址前缀,即USA.CA.SF 匹配的长度最大,我们称之为最长地址前缀匹配,找到了USA.CA.SF
,这个数据包就从L2链路发出到达了三
番市,而这条链路因为是伦敦到三番市的直达链路,所以应当是质量最好的链路(这里要稍微提一下的是虽然直达链路在一般情况下是质量最好的链路,但也有可能直达链路反而有拥塞而其他的迂回链路是空闲着的情况发生,对这个问题的解决是现在提出的流量工程(traffic engineering)的办法和基于约束的路由(constraint based routing)办法,在这里我们先不讨论这个问题)。
对于实际的IP数据包,其目的地址是一个32位(Ipv4是32位,以后的Ipv6是128位)的二进制序列,而IP地址的前缀是一些长度不超过32位的二进制序列,如10,111,1101等等。
在高速路由器中,地址快速查询算法和解决方案总是放在一个重要的位置加以讨论,从目前来讲主要有以下几种解决方案:经典的快速算法;CAM解决方案;cache的方案和基于协议的解决方案。
1)经典的快速查找算法:这些经典快速算法包括二分法查找(binary search)算法,哈序(hashing)算法(即通过一个精心设计的hash函数把搜索空间映射到索引空间,在进行搜索的时候,首先通过这个hash函数计算出一个索引,然后用这个索引直接到索引空间取出相应的记录),二进制搜索树(trie)等算法。
这里简单介绍一下二进制搜索树,一个二进制搜索树是一棵每个节点都只有一个0分支和(或)一个1分支的树。
图6所示为一个二进制搜索树的示例。
采用二进制搜索树进行IP地址最长前缀匹配的最有名的例子是BSD内核,它的算法称为Radix trie。
首先把整个转发表组织为如图6所示的树,其中黑点代表了转发中的一个记录。
在搜索时,沿着匹配路径逐渐从树根出发走向树叶,同时记住最新经过的黑点,只到路径走不下去时,最新的黑点就是最长的地址前缀。
以上提到的各种算法有不同的计算复杂度,如果把转发表中的记录总数用n表示,把IP地址的长度用w表示,那么顺序匹配算法(即挨个比较)的计算复杂程度为O(n),二分法查找算法的复杂程度为O(log2 n), 二进制搜索树算法的复杂程度为O(w),理论上如果hash函数理想完美而避免冲突时的复杂程度为O(1)〖5〗。
当然对于每一个快速算法,我们还要考虑到实施这种算法所需要的存储空间问题以及转发表的刷新问题。
图6 一个二进制搜索树的示意图
2)CAM解决方法:CAM是Content addressable memory的缩写,即内容可寻址存储器,它是一种特殊的存储器器件。
为了形象的说明它是个什么东西,我们可以举一个例子:
你的私人电话号码本是一个有很多电话号码及对应主人资料的数据库,如果把这个数据库放入一个CAM,下次有一个电话号码你想查一下这个号码的主人是谁的时候,你不需要把这个电话号码与数据库中的所有号码对照匹配,只要把这个电话号码加到CAM的地址线,出来的就是你要的主人资料了,这是因为你用的是CAM,这正是CAM的特点。
由于路由器的地址查询是一个最长前缀匹配问题,所以可以把转发表中不同长度的地址前缀放在不同的CAM里面,对于Ipv4需要32片CAM,Ipv6需要128片,这种方案虽然性能好,但成本太高。
目前也可以通过Don’t care bits把整个转发表放在一片CAM里,如laratech公司的SUPERCAM〖6〗产品。
即便如此,CAM的价位与RAM相比,仍然是十分昂贵的,1Mbyte的DRAM价格大约是2$,1Mbyte的SRAM的价格大约为40$,而1Mbyte 的CAM的价格却要到1000$。
另外CAM产品和技术的发展速度没有RAM快,所以我们在选择CAM的时候,也会担心会不会这种设计在1~2年后就会被快速处理器和存储器用软件实现方案所取代。
3)cache解决方法:cache的方法对于企业级的路由器来说是得到很广泛的使用的,但是由于骨干路由器需要的转发表非常大,Wilder的报告〖7〗中显示了一台骨干路由器可能同时有240000个不同目的地址的数据流在传输。
因此对于骨干路由器,cache只是一种辅助的方法,我们最好需要有足够大的cache能把整个转发表放进去,而且即使这样,我们仍然需要快速算法。
4)基于协议的解决方法:Internet主机的数量每天都在增加,带宽的需求每天都在加大,Ipv6的地址长度增加到了128位,这只能增加地址查找的压力。
以上介绍的快速方法即便能对付现在,也不一定能应付未来。
所以人们也已经开始从协议本身的角度去寻求解决方案〖8〗。
Ipsilon公司提出的IP Switch是一种用于在ATM网上传送IP分组的技术,IP Switch 的基本概念是流的概念,它把输入的数据流分为两种类型:持续期长、业务量大的用户数据流(如FTP、多媒体等)和持续期短、业务量小、呈突发分布的用户数据流(SMTP、SNMP 等)。
对于持续期长、业务量大的用户数据流在ATM交换机中交换,对于持续期短、业务量小、呈突发分布的用户数据流通过IP交换控制器中的IP路由软件进行传输。
Tag Switch 是由Cisco公司提出,它是一种多层交换技术,它把ATM第二层交换和第三层路由技术结合起来。
标记交换使得处于交换边缘的路由器能够将每个输入帧的第三层地址映射为简单的标记(Tag),然后把这些打了标记的帧转化为A TM信元。
打了标记的信元被映射到虚电路上,在网络核心由A TM交换机进行交换。
IP Switch和Tag Switch在地址查找的处理上思路是一至的,他们都把最长地址前缀匹配问题转变成了定长的ATM VCI的完全匹配问题而得以简化。
IETF在Tag Switch的基础上正在制订一个多协议标记交换,即MPLS的规范〖9〗。
MPLS把可能的分组分为几类转发等价类FEC(forwarding equivalence class),然后把每个FEC映射到下一跳(站点)。
映射到同一FEC的不同分组是不可区分的,这些分组都沿着同一路径传递。
MPLS代表多协议标签交换(Multiprotocol Label Switching),可以使用各种网络层协议。
支持MPLS的路由器称为标签交换路由器LSR(label switching router)(支持L3层分组的转发)。
在MPLS中,把一个分组分配到一个FEC中的过程只在分组进入网络时在进行一次,FEC被编码为一短固定长的标签,即:分组在被转发到下一站点前,被打上标签L1,后续的站点不对分组的网络层的头进行分析,而是用标签L1作为下一站点的索引,再用新标签L2取代原标签L1,然后才转发分组到下一站点。
MPLS一方面加快了数据包的查找和转发速度,另一方面也提供了一个更有效的隧道机制。
四包过滤和分类
传统的包过滤处理一般是出于安全性和防火墙等方面的考虑,在路由器入口处设置一些过滤规则,把不安全和未通过认证的数据包丢弃。
对于合法的数据包,路由器只是根据数据包的目的地址,采用尽力而为的简单策略进行转发。
到现在,为了满足用户的不同服务质量要求,数据包的转发不但要根据目的地址,还要根据不同的源地址,甚至不同的应用而实施不同的转发策略。
比如你在你的机器上一边浏览WEB主页,一边打IP电话,这两个应用在路由器一侧就需要得到不同的服务。
这种数据包分类的依据已经不仅仅是第三层的目的地址和源地址,而且需要用到第四、第五和以上的信息。
由于这种分类常常用到第四层TCP 和UDP的端口号,所以我们经常把这种具有第四层或以上分类能力的路由器和交换机称为具有第四层交换(Layer 4 Switching)能力的路由器和交换机。
从理论上讲,包过滤和分类的问题实际上是一个多维空间的点匹配问题,给定一个由n 个d-维空间的对象所组成的集合(其中每一个对象代表了一个分类规则,rule),以及这个d-维空间中的一个点,我们要做的事情是在这n个对象中查找出包含这个点的对象。
这是一个经典的数学问题〖10〗,对于d > 3即我们通常在包分类时碰到的问题,最好的算法要么具有O(log d-1 n)的计算复杂性和O(n)的存储空间要求,或者具有O(log n)的计算复杂性和O(n d)的空间要求。
这样的复杂度级别实际上对于高速路由器的包分类来说是不合适的。
但也不是说高速路由器就没有办法做高速的包分类处理了,〖11〗就提出了一个高速的实际解决方案。
另外,和地址表的查询一样,MPLS把复杂的包分类工作安排给速率较低的边沿路由器来做,而在核心层则仅仅通过固定长度的一维标签来转发数据包,这也极大了缓解了核心路由器的压力,使之可以运行在更高的速率上。
五交换结构
虽然计算机工业在近几年引入了越来越高速的共享式总线:从ISA到EISA,现在的PCI。
但是这仍然跟不上网络发展的步子。
首先,共享总线不可避免内部冲突;第二,共享总线的负载效应使的高速总线的设计难度太大。
交换结构的引入逐步克服了共享总线的以上缺点。
从技术上,目前使用较多的交换结构有共享内存和crossbar两种。
而crossbar的结构得到了更多的青睐和更广泛的采用,其主要原因是它的简单性〖12〗。
图7 crossbar内部结构示意图
Crossbar结构可以支持高带宽的原因主要有两个:第一,线路卡到交换结构的物理连接现在简化为点到点连接,这使得该连接可以运行在非常高的速率。
半导体厂商目前已经可以用传统CMOS技术制造出1Gb/s速度的点对点串行收发芯片,并且可以在今后几年里把速度进一步提高到4~10Gb/s〖13〗的水平。
Crossbar可以提供高性能的第二个原因是它的结构可以支持多个连接同时以最大速度传输数据,这一点极大的提高了整个系统的吞吐量。
一个Crossbar的示意图如图7所示,只要同时闭合多个交叉节点(crosspoint),多个不同的端口就可以同时传输数据。
从这个意义上,我们称所有的crossbar在内部是无阻塞的,因为它可以支持所有端口同时以最大速率传输(或称为交换)数据。
由于crossbar的结构简单,使得它很容易在芯片中实现。
另外,通过叠加crossbar的层数是它的性能进一步线性增加。
图8所示为一个四层的crossbar,在每个时隙,每一层的crossbar设置为相同的配置结构就成为一个四位的crossbar交换结构。
图8 四层crossbar组成四为的交换结构
数据包通过crossbar的时候,可以是以定长单元的形式(通过数据包的定长分割),也可以不进行分割直接进行变长交换。
由于我们接下来要谈到的变长交换存在一些问题的原因,一般高性能的crossbar交换结构都采用了定长交换的方式,在数据包进入crossbar以前把它分割为固定长度的cells,等这些cells通过交换结构以后再按照原样把它组织成原来的变长的包(packet)。
对于定长交换,我们把整个时间坐标想象成有一个接着一个的时隙组成,数据交换因此也可以想象成按照一个接着一个的节拍进行。
在每个时隙结束的时候,所有的输入和输出端口都是空闲的,这时中央调度器(central scheduler)检查每个输入端口的等待队列,并迅速决定下个时隙的crossbar如何配置,这个调度器的算法也是一个课题,它一方面不能让某个输入和输出端口饿死(即永远得不到服务),另一方面要使系统的总体效率最高,而且它本
身也需要在极短的时间内完成。
但无论如何,定长交换还是极大的简化了调度器的难度。
另外从硬件设计的角度,也同样得出了定长交换可以比变长交换更快的结论。
对于变长交换,情况就变的非常复杂。
首先,各个变长的数据包交换结束的事件有可能在任何时刻发生,这就要求中央调度器时刻监视各个输出端口的忙闲情况,一旦某个输出端口空闲,马上在输入队列中找到一个发给它的数据包,并建立连接。
这对于调度器的设计是一个极大的难点。
另一个更致命的原因可以用以下的模拟环境说明:假如路由器的输入端口Input1已经有大量数据传输到输出端口Output1,同时输入端口Input2也有大量数据传输到输出端口Output2,假如这时又有几个数据包要从Input1传输到Output2,那么什么时候可以抡到这几个数据包传输呢?应该是Output2刚传完一个Input2的数据包而空闲的时候,Input1也正好传完一个到Output1的数据包而空闲时才有可能。
但由于是变长交换,这两个事件同时发生的可能性非常小,所以从Input1到Output2的小量数据流基本上是被饿死的命运。
除非大幅度降低系统的效率,而这显然又是我们不愿意看到的。
最近几年,针对crossbar的调度算法进行了充分的研究〖14〗〖15〗,商用的产品也逐渐开始出现,因此在技术上可以认为是比较成熟的。
一个好的crossbar调度算法应具有以下特性:
1)高的系统效率,最大限度的疏通输入输出的通信流量;
2)消除饿死(starvation)现象;
3)快速,使调度器不成为系统的瓶颈;
4)简单,易于硬件实现。
5)支持数据包的组播和组播。
六队列
虽然一个crossbar内部是无阻塞的,但是从系统的角度去看,仍然会出现三种类型的阻塞现象,一个好的设计应该尽量避免和减小所有这三种阻塞对系统性能造成的影响。
第一种是线头阻塞(head of line blocking,即HOL blocking),第二和第三种分别是输入阻塞(input blocking)和输出阻塞(output blocking)。
其中线头阻塞是最严重影响系统性能的一种现象,它甚至可以浪费系统近一半的交换带宽。
输入阻塞指的是当crossbar的多个输入端同时需要和同一个输出端连接的时候只有一个输入端可以得到服务的情况,而输出阻塞是指在线路卡上有多个数据包都需要发送到线路上的情况。
输入阻塞和输出阻塞实际上并不会降低系统吞吐量,他们只会增加数据包经过路由器产生的延时,而且有可能使这种延时不确定。
解决这种问题的方法是引入优先级的机制,通过数据包分类把不同优先级的数据包放在不同的队列,通过加权公平队列(Weighted Fair Queueing,WFQ)或其他的队列调度算法一保证所需的服务等级。
在以前的路由器结构中,在每一个crossbar的输入端只有一个先近先出(FIFO)队列,。