背景技术
在路由器等数据通信设备中一般包括控制平面和数据平面。其中控制平面负责路由信息收集、路由计算、设备管理、网管代理等功能。数据平面,也叫业务平面或转发平面,负责实际网络流量的接收、路径选择、发送和特殊业务处理等工作。
在实际的IP业务转发过程中,控制层面通过协议包从其它设备中收集各种路由信息,对收集到的各种路由信息进行一定的筛选,建立一个最优的路径信息库,然后形成一个快速转发表FIB,并将该FIB被下发到数据平面。该FIB相当于一个快速查找的地图,是数据平面转发信息基础。所有的网上的IP业务,都是通过数据平面查找FIB来确定去往目的地的下一站。FIB表Key结构通常为:目的IP 32位(destination IP 32bit),即用包的目的IP地址作为Key值,来查找一个表,或者一棵树,得到最长匹配的表项(最精确匹配、最优的表项)。例如目的地址为1.1.1.1,路由表中有两项,一项是1.1.1.*/24,一项是1.1.*.*/16,斜杠后面标识掩码,那么该目的地地址将匹配上1.1.1.*/24这条路由,因为它比1.1.*.*/16更精确。匹配到表项以后,可以得到一条路径,该路径通过下一跳IP地址+出接口来表示,也有用一个索引来表示的(例如使用邻接表的转发模型),本文中,不论上述两种情况,对一个下一跳路径统一用NH来标识。
目前现有方案一查找FIB表的过程可参考图1,转发软件需要连续两次操作才能完成FIB的查找过程:步骤101、查表请求点进行三态内容寻址存储器TCAM类索引查找器件查表操作,索引查找器件返回一个索引Index;步骤102、该index经转化可以成为FIB空间的索引,转发软件使用index获得FIB表项。
在实际网络中,由于节点之间的拓扑关系比较复杂,经常会出现到一个目的地有多条路的情况。多条路可能都可以到达,并且相互之间是对等的,即都会形成路由。这样到一个目的地就会有多条等价路由出现。
对于网上的流量,有时会为了实现链路备份(即一条链路断掉,另外一条链路还可以工作)或者扩大流量,也会采用分担的方式,即去往同一个地方会出现多条路径,多条路上都有流量存在,相互之间是流量分担的,即负载分担。目前负载分担的算法,比较有名并被广泛使用的是由D.Thaler提出的哈希门限算法,按照流进行负载分担。
哈希门限算法,是通过将报文头中的域进行Hash,得到的Hash值作为流的标识,对于IP报文一般使用源IP地址和目的IP地址进行Hash。在负载分担时,Hash算法可采用CRC16的算法进行。限于FIB表容量有限,具体实现中,往往需要将FIB与负载分担表ECMP(或者被称为LBT)分开放置。
在负载分担存在的情况下,现有方案二的框架结构如图2所示,
参考图2,我们可以看出,报文在处理过程中,需要分别查多次表项。首先查FIB表项,然后使用源IP地址SIP,目的IP地址DIP做HASH运算,再使用HASH结果和FIB结果来查找ECMP表,从而得到真正的下一跳。
我们可以结合目前常见的TCAM类索引查找器件来说明目前现有方案图2的查找过程如下,参考图3,
步骤1、查表请求点通过DIP向索引查找器件进行查找;
步骤2、索引查找器件返回一个Index.;
步骤3、查表请求点以Index访问内存,获取FIB信息;
步骤4、查表请求点获得FIB。如果FIB的下一跳只有一条路由,则查表结束,转第7步骤
步骤5、如果FIB信息说明是负载分担,则从FIB中获取负载分担Index并加以Hash偏移后访问ECMP表;
步骤6、查表请求点获得ECMP的NHx信息
步骤7、查表结束
在上述的FIB及负载分担查找过程中,转发软件需要连续查找FIB,ECMP表项,多次访问外部接口,一者因为外部接口带宽有限,多次查表访问,将限制转发速率,二者这个过程中,需要多次访问外部接口,代码处理流程也比较长。且在转发过程中,除了要查找FIB表,有时还必须需要查找ACL表。ACL是依据报文三层和四层信息来对报文进行分类的。一般使用SIP,DIP,SPORT,DPORT,TOS,协议类型作为key来进行查找。而且在ACL表的key中,有DIP部分是与FIB的key是一致的。在现有技术中,FIB处理过程和ACL处理过程是分别进行的。FIB和ACL两次分别的查找,在一些情况下,相对的限制了报文的转发速率。
发明内容
有鉴于此,本发明的主要目的是提供一种路由转发的方法和系统,用以提高路由转发效率。
本发明的目的是通过以下技术方案实现的:
本发明提供一种路由转发的系统,包括:
查表请求点,用于向路由查表模块提出查表请求获得路由转发所需表项;
路由查表模块,用于根据查表请求访问内存获得路由转发所需的表项,并反馈所需表项给查表请求点;
内存,用于存储路由转发所需的表项。
还包括索引查找器件,用于建立内存中表项所需的索引,并根据路由查表模块的请求返回相应的内存索引。
所述的路由查表模块为硬件驱动器件。
本发明还提供一种路由转发的方法,包括如下步骤:
A、查表请求点向路由查表模块提出查找请求;
B、路由查表模块根据查找请求获得内存中的路由转发表项,所述的路由转发表项包括FIB、负载分担表和/或ACL表;
C、路由查表模块将所述表项返回给查表请求点。
所述的步骤A具体包括,
查表请求点通过DIP向路由查表模块提出查表请求。
所述的步骤A还具体包括,查表请求点通过HASH和DIP向路由查表模块提出查表请求。
所述的步骤B具体包括,
B1、路由查表模块通过索引查找器件来获得内存的索引;
B2、索引查找器件返回查找到的索引给路由查表模块;
B3、路由查表模块根据索引获得内存中的所需路由转发表项。
所述的步骤B还具体包括,
B1、路由查表模块根据DIP通过索引查找器件来获得内存的索引;
B2、路由查表模块根据所述索引获得内存中的路由转发表;
B3、路由查表模块根据路由转发表中的负载分担索引加以相应的HASH偏移获取负载分担表项。
所述的步骤A具体包括,查表请求点通过SIP和DIP向路由查表模块提出查表请求。
所述的步骤B1具体包括,路由查表模块根据DIP来通过索引查找器件获得索引,同时根据SIP和DIP进行HASH计算;
所述的步骤B3具体包括路由查表模块根据所述索引获得内存中的FIB表,若存在负载分担,则根据路由转发表中的负载分担索引加以相应的HASH偏移获取负载分担表项。
所述的步骤A具体包括,查表请求点给出混合Key及查找控制命令,混合key中包括ACL Key和路由查找Key,所述的查找控制命令为控制路由查表模块需查找的路由转发表项。
所述的步骤B具体包括,路由查表模块根据控制命令从混合key中提取出路由转发所需的key,从而从内存中查找路由转发表。
所述的步骤C具体包括,硬件驱动程序根据控制命令返回所需的表项给查表请求点。
所述的步骤C中返回的控制命令中添加查找结果字段,用于说明查找结果的有效性。
所述的步骤B中的负载分担表项中的每个路由表项空间放置负载分担表项和其备份路由表项。
所述的步骤B中路由查表模块使用HASH值与Index相加作为索引,并根据新的索引获得内存中的路由转发负载分担表项和备份路由表项,所述的步骤C为路由查表模块将所述两条路由表项返回给查表请求点。
在步骤C后还包括步骤D,查表请求点在获取两条路由表项后,判断负载分担表项能否使用,如果不能被使用,则以其备份路由作为下一跳。
所述的步骤B还包括路由查表模块根据所获得的负载分担表项中的目的端口查找保存在路由查表模块中的端口状态表,并判断是否端口可以使用,所述的步骤C为若所述端口可以使用,则路由查表模块根据端口状态将负载分担路由表项返回给查表请求点,否则返回备份路由表项给查表请求点。
由上述本发明提供的技术方案可以看出,本发明的主要目的是提供一种路由优化的方法和系统,通过表项整合及增加路由查表模块,减少软件查表次数,减少软件代码数量,提高路由转发效率。
具体实施方式
本发明提供了一种路由转发的方法和系统,本发明的核心在于,通过表项整合及增加路由查找模块,减少软件查表次数,减少软件代码数量,提高路由转发效率。
为使本发明的目的、技术方案和优点表达得更加清楚明白,下面结合附图及具体实施例对本发明再作进一步详细的说明。
实施例一:实施例一的核心思想是可以在查表请求点和索引查找器件中,安排一个路由查找模块。该路由查找模块可以集成这两次连续的查表动作,那么对于查表请求点的转发软件而言,就大大减轻了工作负担负责完成高速的查找过程。我们可以参考图4,具体的查找步骤为:
步骤401转发软件在查表请求点使用DIP查找FIB表;
步骤402路由查找模块接收查找命令,通过索引查找器件进行DIP查找;
步骤403索引查找器件返回查找到的索引Index给路由查找模块;
步骤404路由查找模块负责启动对内存空间的FIB表项读取动作;
步骤405路由查找模块获得内存中的FIB表项;
步骤406路由查找模块将FIB表项正确的返回给查表请求点。
在本发明的具体实现中,路由查找模块可以为硬件驱动器件,为了简化并形象地描述本发明,以下的实施例均以硬件驱动器件为例来说明。
由于在实际网络中,往往存在负载分担的情况,所以本发明提出了一种在负载分担情况下路由快速转发的方法,其中心思想是,对于查表请求点而言,通过将FIB的key从DIP,增加为HASH+DIP,减少转发软件查表次数,缩短转发软件执行代码长度。具体实现方式例如可以有如下两种:
实施例二:实施例二的核心思想是通过在索引查找器件的Key上直接增加HASH字段,在转发层面上将FIB与ECMP视为一个表。其Key值为HASH+DIP,以占用索引查找器件中更多的表项空间来实现;参考图5:首先做HASH运算,接着使用HASH+DIP查找FIB表,直接获得下一跳。
这样可以减少一次外部接口访问,减少代码行及软件处理时间。这些都代表了整体效率的提高。
在FIB表中,有流ID及其Mask值,从表A的方案可以看出,在存储空间中,存在多种等价路由条数的表项,有只有一跳的,也有两条等价路由,四条等价路由,八条等价路由的表项。通过对HASH字段的MASK的取值不同来加以区分。其中Key中的*位表示被MASK为0的bit位,可参考表A:
表A不同等价路由数目下,Key及MASK的表达
从表A中,我们可以看出,在路由变化的情况下,如路由条数由四条增加为5条的时候,流路由会发生变化,从而出现乱序现象。如果完全使用固定的等价路由数目,就可以解决这个问题。参考表B,在表B的方案中,一律使用固定的等价路由数目,从而也使用了固定的Mask位。考虑到芯片的容量和实际应用情况,一般可以采用2-4bit的固定HASH。如3bit的固定HASH位可以支持8个等价路由数目。
表B固定等价路由数目下,Key及MASK的表达
在此情况下,负载分担为最大支持8个下一跳。当条数少有8条时,有些路由会出现多于一次。查找过程如图6所示:
步骤601查表请求点(软件发起的查表请求)以HASH及DIP作为key发起查表请求
步骤602硬件驱动器件负责对索引查找器件进行查表,key为HASH+DIP
步骤603索引查找器件返回Index给硬件驱动器件
步骤604硬件驱动器件以转化后的Index’获取RAM中的NH信息
步骤605硬件驱动器件获得NH信息
步骤606硬件驱动器件返回NH信息给查表请求点。
为了不降低索引查找器件的表项容量,我们可以通过硬件设计,在查表请求点和索引查找器件中,安排一个硬件驱动器件,来负责完成高速的查找过程。
实施例三、实施例三的核心思想是查表请求点可以在最初查表时,给出HASH+DIP。但索引查找器件本身只使用DIP获得索引,然后硬件驱动器件进行“索引+HASH”的运算,得到新的索引,以此索引指向的内存地址,获得负载分担路由。此方案是将原解决方案中由软件处理的流程改而使用硬件驱动器件来完成,这个方案不会降低索引查找器件的容量。具体的操作流程可以参考图7,在图7中,硬件驱动器件使用HASH来偏移索引查找器件返回的Index,例如可以有如下选择:
所有路由表项都是固定等价路由数目的负载分担表项,这种情况下,硬件驱动器件一律进行HASH+Index,来访问内存;
或者
有些路由表项是只有一跳的路由表,有些是2*N条等价路由的负载分担表。这个情况下,硬件驱动器件需要读取返回的FIB表,判断是否存在负载分担。如果存在负载分担,则使用FIB表项中的负载分担Index并加以相应的Hash bit偏移来访问ECMP表。
具体的查表过程如下:
步骤701查表请求点给出HASH,DIP,作为查表的KEY值。
步骤702硬件驱动器件缓存HASH,并启动DIP查找索引查找器件的过程,
步骤703索引查找器件返回一个Index;
步骤704硬件驱动器件将以转换后的Index访问内存,
步骤705硬件驱动器件获得FIB,如果FIB为一跳路由,则跳到第8步
步骤706否则从FIB表项中获取负载分担Index并加以Hash偏移后访问ECMP表
步骤707获取ECMP中的一个下一跳表项;
步骤708硬件驱动器件将下一跳表项返回给查表请求点。
在实施例二和三的描述里,对于转发软件来说,都是使用HASH+DIP来进行查找。控制层的软件仍然可以认为存在FIB表和ECMP表,并将其分别放置在不同器件上。
索引查找器件运作时,HASH是被缓存的。而索引查找器件运作的时间本可以用来计算HASH的。所以本发明在此基础上,又提出如下方案,即在转发层面上,HASH运算也交由硬件驱动器件在索引查找器件查找的同时一并完成即可以只使用SIP,DIP来获得最后的结果下一跳信息。
具体可参考实施例四,实施例四的核心思想是将HASH计算的任务赋予硬件驱动器件来完成,并在查表索引器件进行查找的同时进行HASH计算可参考图8,具体由硬件驱动器件完成的3个步骤为:
1DIP查FIB表
2硬件同时进行SIP+DIP的HASH运算
3使用FIB返回值及HASH结果,启动查ECMP表。
具体的查表过程可参考图9,
步骤901查表请求点给出SIP,DIP,作为查表的KEY值。
步骤902硬件驱动器件一方面启动查找FIB,另一方面硬件驱动器件开始计算HASH。HASH计算是标准算法,不在本文论述内。另外HASH计算可以在硬件驱动器件内部完成,也可以在外部完成;
步骤903索引查找器件返回一个Index.,硬件驱动器件也完成了HASH的计算;
步骤904硬件驱动器件将以Index访问内存;
步骤905硬件驱动器件获得FIB,如果FIB为一跳路由,则跳到第8步;
步骤906否则从FIB中获取负载分担Index并加以Hash偏移后访问ECMP表
步骤907硬件驱动器件获取ECMP中的一个下一跳表项。
步骤908硬件驱动器件将下一跳表项返回给查表请求点。
这样,根据实施例四,转发层面只需要给出IP报文头的连续的两个IP地址,就可以得到所期望得到的下一跳信息,避免了多次查表和信息返回,及不必要的冗余代码,这可以大幅度提高系统性能。
在实际网络中,路由器在IP报文处理过程中,除了要查找FIB表,有时还必须需要查找ACL表。ACL是依据报文三层和四层信息来对报文进行分类的。一般使用SIP,DIP,SPORT,DPORT,TOS,协议类型作为key来进行查找。ACL表的key中,至少有DIP部分是与FIB的key是一致的。本方案给出实施方式五,将ACL和FIB表查找同时进行查找,并同时返回查表点两个表的返回结果。这样可以减少接口访问次数,转发软件将大大提高效率。
具体的查找过程可参考图10,
步骤1001查表请求点给出混合Key及查找控制命令,混合key中包括ACLKey和路由查找Key;
步骤1002根据控制命令,硬件驱动器件分解出两个key进行ACL和FIB的查找过程。具体的查找过程如前所述,在本实施例中不再赘述。
步骤1003硬件驱动器件获得ACL和FIB查表结果;
步骤1004硬件驱动器件将两个结果返回给查表请求点。返回结果可以组合为一个返回结果,也可以不进行结果组合。
为支持两个表项一起查找,控制命令可以占用Key字段或控制命令中传递。说明本次查表是
1只查FIB
2只查ACL
3FIB&ACL一起查
同样,也可以在返回的控制字段中,添加一个表项查找结果字段,说明查找结果是:
1FIB查找返回有效
2ACL查找返回有效
这样,通过实施例四,系统查找路由表和ACL表,只访问外设一次就可以完成。转发过程的代码大大得到简化。在控制层面上,ACL表,FIB表,ECMP表都还是存在的,只是在转发层面上,表达大为简化。
同时,在实际网络的转发过程中,还有一个要求快速路由切换的应用。其过程为:当查到一个拥有备份路由的FIB下一跳表项后,判断该路由是否可以使用,如果该路由已经不通,则使用其备份路由。
对路由是否可以使用的判断是基于其端口状态。转发软件通过查找端口状态表来快速判断是否采用查到的路由,是否切换到其备份路由上。
由于备份路由往往与负载分担同时存在,所以本文也给出了如何在本解决方案上支持快速路由切换的方法。具体的解决方法可以为将每个路由表项的空间内放置ECMP负载分担表项和其备份路由表项。可参考表C
负载分担路由1 |
负载分担路由1的备份路由 |
负载分担路由2 |
负载分担路由2的备份路由 |
负载分担路由3 |
负载分担路由3的备份路由 |
负载分担路由4 |
负载分担路由4的备份路由 |
负载分担路由5 |
负载分担路由5的备份路由 |
负载分担路由6 |
负载分担路由6的备份路由 |
负载分担路由7 |
负载分担路由7的备份路由 |
负载分担路由8 |
负载分担路由8的备份路由 |
表C备份路由信息嵌入在负载分担表中的方案
表C所示为在一个16个等价路由表项空间内放置8条负载分担表项及其备份路由。这种情况下,选择路由表项的HASH需要同时获取“路由表项和其备份路由表项”。
硬件驱动器件负责将这两条路由表项读出并都返回给查表请求点,例如可以一次性的读出。查表请求点在获取两条路由表项后,判断第一跳能否使用,如果不能被使用,则以其备份路由作为下一跳。具体可参考图11,
在图11中,n表示硬件驱动器件使用HASH值与Index相加作为索引,
n+1表示获取连续两个下一跳NHx,NHy;其中NHx表示第x个下一跳信息;NHy表示第x个下一跳的备份路由信息。
n+2表示返回NHx及NHy给查表请求点
在读取负载分担项及返回给查表请求点的问题上,硬件驱动使用HASH值作为Index的偏移,读取连续的两条路由表项并将两条路由表项返回给查表请求点。
这样两条连续的路由项返回给查表请求点,查表请求点负责辨别哪条路由应该被使用。
在该方案的基础上,我们可以进一步将端口状态表的查找过程也放在硬件驱动器件上完成。当硬件驱动器件获得查找到的ECMP表项后,使用其中的目的端口号查找端口状态表,判断是将此路由返回给查表请求点,或者是使用其备份路由返回给查表请求点。由于端口状态表是一个小表,完全可以存放在硬件驱动器件内部,具体可参考图12,
其中n表示硬件驱动器件使用HASH值与Index相加作为索引,获取连续两个下一跳NHx,NHy。其中NHx表示第x个下一跳信息;NHy表示第x个下一跳的备份路由信息。
n+1表示使用NHx的目的端口查保存在硬件驱动器件中的端口状态表,判断是否端口可以使用
n+2表示返回NHx或NHy其中之一给查表请求点
这样,我们在硬件驱动器件中固化了查找端口状态表的过程,进一步简化了转发软件的接口访问,代码运行负担,可以提高转发效率。从实现上来说,端口状态表是一个描述端口状态的线形表项,占用空间很小,完全可以放置在硬件驱动器件内部。是完全可以实现的。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉该技术的人在本发明所揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。