实现快速转发并支持负载分担的方法

文档序号:7906597阅读:226来源:国知局
专利名称:实现快速转发并支持负载分担的方法
所属领域本发明涉及一种实现快速转发并支持负载分担的方法,属于IP网络通信技术领域。
在路由器未使能快速转发功能时,其接收到的报文将经过链路层直接送交IP层进行转发处理该报文在IP层查找路由表,根据相应的路由信息选择对应的接口发送。该报文经IP层输出到链路层后,将更换新的链路层帧头信息,然后从物理层发出。在路由器使能了快速转发功能之后,其接收到的报文在链路层将进行如下处理首先查找路由缓存表(又称快速转发表)。如果未发现与其匹配的表项,该报文将被送交IP层进行上述的转发处理。所不同的是,当该报文经IP层输出到链路层处理完毕,即将交给物理层时,将把其链路层帧头等信息添加到路由缓存表项目中,然后再从物理层发出该报文。这样,当链路层再次收到和该报文有相同特征的报文(如目的地址相同的报文),就会在查找路由缓存表时,发现与其匹配的表项。此时,新报文将不再走IP层处理,直接根据路由缓存表中保存的信息,更换其帧头信息,从相应输出接口中发出。
在路由器使能了负载分担功能之后,路由器的路由表将发生如下变化原来路由表中到达某一地址的路由项目只有一条;而使能了负载分担功能后,路由表中到达某一地址的路由项目将有多条(参见图2,为便于描述,以设置三条路由表项为例,分别命名为分担路由1、分担路由2、分担路由3;它们分别对应不同的输出接口)。当具有相同目的地址的一组IP报文(简称一条IP数据流)依次经过IP层查找路由处理时,将轮流选用这三个分担路由,从三个不同输出接口轮流发出,从而实现了分担流量的功能在图2中,虚线描述的是未使能快速转发和负载分担功能时,IP报文的一般处理流程;图2的中间和下方实线描述的是使能快速转发功能时,IP报文的处理流程,特点是通过简化报文处理流程,提高路由器转发报文的效率;图2上方的实线描述的是使能负载分担功能时,IP报文的处理流程,特点是通过配置多条分担路由,使业务流量被多条链路负载分担。
现在市场上销售的路由器产品,包括申请人研制的路由器和业界绝大多数公司的路由器,其快速转发都不支持负载分担特性。例如业界权威思科(cisco)公司的快速转发也不支持负载分担功能。虽然cisco公司特有的CEF转发(CiscoExpress Forwarding)特性既能支持高速数据转发,又能支持负载分担;但它是通过采用路由分级索引来加快路由查找速度的,同时,在相同平台的路由器中,CEF转发性能较快速转发要低得多,也就是说通过CEF来支持负载分担没有通过快速转发支持负载分担的效率高。
在现有技术中,当用户使能快速转发模块,同时配置了多条路由分担负载时,由于现有快速转发缓存表的数据结构仅保存一条输出接口信息(参见图3),所以路由器在处理需要转发的报文是按照如下方式进行的当链路层接收到一条IP流的第一个IP报文时,先会查找到其没有保存快速转发缓存信息,就把该报文送交IP过程转发处理。然后,检查到第一条负载分担路由时,将根据该路由信息进行转发,同时,生成并添加相应的快速转发路由缓存项目(包括该IP报文对应的输出接口、输出接口的帧头信息、帧头长度信息等)。当链路层接收到该IP流的第二个IP报文后,由于它们具有相同的索引,会直接查找到相应的转发路由缓存信息。所以从第二个报文开始,该IP流的所有报文都将被直接贴上对应输出接口的帧头信息,从同一输出接口发送出去。也就是说,由于有了快速转发,这些IP报文流都将按照第一条负载分担路由,从相同的输出接口被转发,导致路由负载分担失效,数据流量不能按照用户设置的负载分担要求得到分流。
图3展示了现有的快速转发路由缓存表的数据结构,其中每一组缓存项目与一条IP流相对应,每一组缓存项目由一个索引项和对应的输出接口信息单元所组成,其特点是在该输出接口信息单元里仅静态地保存了一个输出接口的信息。
本发明的目的是这样实现的一种实现快速转发并支持负载分担的方法,其特征在于(1)设置环行链表;(2)将输出接口信息存储在该环行链表中;(3)数据报文根据存储在该环行链表中的输出接口信息从相应的输出接口直接转发。
所述步骤(1)是在由多个缓存表项所组成的快速转发路由缓存表中的每个缓存信息单元的数据结构中,设置缓存有“输出接口信息”和“指向下一个输出接口的指针”;该“输出接口信息”的数据结构是由支持该IP数据流负载分担的若干个“输出接口信息节点”组成,其中每个“输出接口信息节点”均采用动态生成,并用“输出接口信息节点”中的尾指针相连成环而形成环行链表结构,每个链表的节点对应一个“输出接口信息节点”。
所述的多个缓存表项中的每一个缓存项目对应于一条IP数据流,该每一个缓存项目包括一个索引项和对应的缓存信息单元。
所述的每一个缓存项目中的缓存信息单元存储有“指向下一个输出接口的指针”和由若干个“输出接口信息节点”组成的“输出接口信息”。
所述的每个“输出接口信息节点”存储有该IP流的帧头信息、对应的输出接口和尾指针。
所述的数据报文根据存储在该环行链表中的输出接口信息从相应的输出接口直接转发的处理流程包括有下列步骤(A)在系统初试化时,首先将路由缓存表中的第一个“输出接口信息”及其“指向下一个输出接口的指针”均初试化为“空”;(B)当链路层接收到某条IP流的第一个报文时,先检查其输出接口信息,发现它为“空”,则将该报文转交IP层处理,选择该IP流第一条负载分担路由进行转发;并在该接口发送报文前,把该输出接口信息保存在路由缓存表第一个节点,同时把该节点的尾指针指向自身,而“指向下一个输出接口的指针”仍为“空”;(C)当链路层接收到某条IP流的第二个及其后续报文时,都是先检查其输出接口信息,若不为“空”,则立刻检查“指向下一个输出接口的指针”,发现它为“空”;则将该报文转交IP层处理,每次按顺序地选择该IP流的一条负载分担路由进行转发;并在其相应接口发送报文前,比较该输出接口信息与路由缓存表中已经保存的接口信息是否不同,若不存在相同的接口信息,则每次在输出接口信息的双向链表中创建一个新节点,再通过各节点的头尾指针将该输出接口信息中的各个节点顺序连接成环;其中“指向下一个输出接口的指针”在各个负载分担的不同路由没有全部缓存到该输出接口信息中时,每次均为“空”;(D)在所有负载分担的不同路由全部分流传输过一次该IP流的报文之后,该IP流的第二次循环的第一个报文在对应的链路层接口转发报文前,发现以前已经保存过该输出接口信息,就不再生成新节点;而是把该“输出接口信息”尾指针对应的值赋给“指向下一个输出接口的指针”;(E)当这条IP流的后续报文再次到来时,检查到“指向下一个输出接口的指针”不为“空”,即直接从它所指向的节点对应的输出接口信息,找到当前报文的输出接口,并依据该输出接口信息更换帧头,从相应的输出接口直接转发出去;同时,把“指向下一个输出接口的指针”内容修改为该节点尾指针中的值。
本发明的创新关键是对快速转发缓存中保存的缓存信息单元的数据结构进行修改,增加一个“指向下一个输出接口的指针”,同时将其中的“输出接口信息”的数据结构修改成由支持该IP数据流负载分担的若干个“输出接口信息节点”组成,其中每个“输出接口信息节点”均采用动态生成,并用该“输出接口信息节点”中的尾指针顺序连接成环而形成环型链表结构;不同于以往的静态存储,且只存储一个输出接口信息;再辅以相应的处理方法,就可以实现快速转发支持负载分担的特性。
本发明的优点是在保证高速转发效率的同时,可以充分利用网络带宽的资源来平衡业务流量。该方法对现有的快速转发流程修改很简单,容易实现;且由于快速转发是在中断中执行的,故本发明对现有快速转发流程的处理效率影响也很小,理论分析的结果是比cisco的CEF特性在支持负载分担情况下的转发处理效率要高。
图2是现有的IP报文的快速转发和负载分担的处理流程示意图。
图3是现有的快速转发路由缓存表的数据结构示意图。
图4是本发明的实现快速转发并支持负载分担的方法的流程图。
图5是本发明中快速转发路由缓存表中路由缓存项数据结构的示意图。
本发明是一种采用环行链表实现快速转发并支持负载分担的方法,其快速转发路由缓存表的数据结构是由多个缓存表项所组成,其中每一组缓存项目对应于一条IP数据流,每一组缓存项目包括一个索引项和对应的缓存信息单元;本发明的创新点是在该快速转发路由缓存表中的每个缓存信息单元的数据结构中,除了缓存的“输出接口信息”以外,还设置一个“指向下一个输出接口的指针”;且路由缓存表中的该“输出接口信息”的数据结构也修改为由支持该IP数据流负载分担的若干个“输出接口信息节点”组成,其中每个“输出接口信息节点”均采用动态生成,并用“输出接口信息节点”中的尾指针相连成环而形成环行链表结构,每个链表的节点对应一个“输出接口信息节点”;再辅以相应的报文处理流程而实现的。
本发明的数据报文根据存储在该环行链表中的输出接口信息从相应的输出接口直接转发的处理流程包括有下列步骤(A)在系统初试化时,首先将路由缓存表中的第一个“输出接口信息”及其“指向下一个输出接口的指针”均初试化为“空”;(B)当链路层接收到某条IP流的第一个报文时,先检查其输出接口信息,发现它为“空”,则将该报文转交IP层处理,选择该IP流第一条负载分担路由进行转发;并在该接口发送报文前,把该输出接口信息保存在路由缓存表第一个节点,同时把该节点的尾指针指向自身,而“指向下一个输出接口的指针”仍为“空”;(C)当链路层接收到某条IP流的第二个及其后续报文时,都是先检查其输出接口信息,若不为“空”,则立刻检查“指向下一个输出接口的指针”,发现它为“空”;则将该报文转交IP层处理,每次按顺序地选择该IP流的一条负载分担路由进行转发;并在其相应接口发送报文前,比较该输出接口信息与路由缓存表中已经保存的接口信息是否不同,若不存在相同的接口信息,则每次在输出接口信息的双向链表中创建一个新节点,再通过各节点的头尾指针将该输出接口信息中的各个节点顺序连接成环;其中“指向下一个输出接口的指针”在各个负载分担的不同路由没有全部缓存到该输出接口信息中时,每次均为“空”;(D)在所有负载分担的不同路由全部分流传输过一次该IP流的报文之后,该IP流的第二次循环的第一个报文在对应的链路层接口转发报文前,发现以前已经保存过该输出接口信息,就不再生成新节点;而是把该“输出接口信息”尾指针对应的值赋给“指向下一个输出接口的指针”,也就是说,此时“指向下一个输出接口的指针”不再为“空”,而是指向了负载分担的第二个“输出接口信息”;(E)当这条IP流的后续报文再次到来时,检查到“指向下一个输出接口的指针”不为“空”,即直接从它所指向的节点对应的输出接口信息,找到当前报文的输出接口,并依据该输出接口信息更换帧头,从相应的输出接口直接转发出去;同时,把“指向下一个输出接口的指针”内容修改为该节点尾指针中的值;这样,后续的报文就能够顺序轮流地从配置的各个负载分担接口中高速转发出去,实现了快速转发支持负载分担的功能。
下面结合图5介绍本发明的一个实施例(其配置了三条负载分担路由)首先启动路由器,系统初试化,路由缓存表中的第一项“输出接口信息”及其“指向下一个输出接口的指针”均初试化为“空”;此时“输出接口信息”里的“输出接口信息节点1”、及其后面的“输出接口信息节点2”和“输出接口信息节点3”都还未生成。
当链路层接收到某条IP流的第一个报文时,检查到“输出接口信息”为“空”,则将该报文转交IP过程转发,进行路由查找时会查到第一条负载分担路由,即“输出接口信息节点1”;在链路层即将发送该报文前,把其相应的输出接口的信息数据(包括该IP流的帧头信息、输出接口和尾指针)保存在路由缓存表对应索引项的“输出接口信息节点1”的节点中,同时把该节点的尾指针指向自身;此时,其“指向下一个输出接口的指针”仍为“空”;当该IP流的第二个报文到来时,先检查“输出接口信息”不为“空”,然后立刻检查“指向下一个输出接口的指针”,发现它还是为“空”;则将该报文转交IP层处理,此时使能了的负载分担软件功能模块就会将该报文从第二条负载分担路由的输出接口转发出去;在链路层发送该报文之前,比较该输出接口信息和路由缓存中已经保存的信息时,发现当前输出接口信息没有保存,则创建一个新节点“输出接口信息节点2”,同时,修改“输出接口信息节点1”的尾指针指向“输出接口信息节点2”,而“输出接口信息节点2”的尾指针指向“输出接口信息节点1”,两个节点连接成环;而“指向下一个输出接口的指针”仍为“空”。
当该IP流的第三个报文到来时,如同第二个报文进行处理。即上交IP层处理,查找到第三条负载分担路由。在对应链路层接口发出报文前,发现以前没有保存过该输出接口信息,于是在路由缓存中添加新节点“输出接口信息节点3”。同时,修改“输出接口信息节点2”的尾指针指向“输出接口信息节点3”,“输出接口信息节点3”的尾指针指向“输出接口信息节点1”,连接成环。“指向下一个输出接口的指针”仍为“空”。
当这条流的第四个报文到来时,也是如同第二个报文进行同样处理。即上交IP层处理,此时负载分担软件功能模块就会将该报文送交第一条分担路由转发。在对应链路层接口发出报文前,发现以前已经保存过该接口信息,于是不再生成新节点;而是把“输出接口信息节点1”尾指针对应的值赋给“指向下一个输出接口的指针”,也就是说此时“指向下一个输出接口的指针”不再为“空”,指向了“输出接口信息节点2”。
当这条流的后续报文到来时,检查到“指向下一个输出接口的指针”不为“空”,即根据它所指向节点对应的输出接口信息,更换帧头,从相应的输出接口直接转发出去。同时,把“指向下一个输出接口的指针”内容修改为该节点尾指针中的值。例如在本实施例中,第五个报文就不再被上交IP层处理,而是直接从“指向下一个输出接口的指针”找到输出接口2,依据“输出接口信息节点2”更换帧头后直接转发。同时修改“指向下一个输出接口的指针”指向“输出接口信息节点3”这样,后续的IP报文就能够轮流从配置的负载分担接口中高速转发出去了,从而实现了快速转发支持负载分担的功能。
权利要求
1.一种实现快速转发并支持负载分担的方法,其特征在于(1)设置环行链表;(2)将输出接口信息存储在该环行链表中;(3)数据报文根据存储在该环行链表中的输出接口信息从相应的输出接口直接转发。
2.根据权利要求1所述的一种实现快速转发并支持负载分担的方法,其特征在于所述步骤(1)是在由多个缓存表项所组成的快速转发路由缓存表中的每个缓存信息单元的数据结构中,设置缓存有“输出接口信息”和“指向下一个输出接口的指针”;该“输出接口信息”的数据结构是由支持该IP数据流负载分担的若干个“输出接口信息节点”组成,其中每个“输出接口信息节点”均采用动态生成,并用“输出接口信息节点”中的尾指针相连成环而形成环行链表结构,每个链表的节点对应一个“输出接口信息节点”。
3.根据权利要求2所述的一种实现快速转发并支持负载分担的方法,其特征在于所述的多个缓存表项中的每一个缓存项目对应于一条IP数据流,该每一个缓存项目包括一个索引项和对应的缓存信息单元。
4.根据权利要求3所述的一种实现快速转发并支持负载分担的方法,其特征在于所述的每一个缓存项目中的缓存信息单元存储有“指向下一个输出接口的指针”和由若干个“输出接口信息节点”组成的“输出接口信息”。
5.根据权利要求2或4所述的一种实现快速转发并支持负载分担的方法,其特征在于所述的每个“输出接口信息节点”存储有该IP流的帧头信息、对应的输出接口和尾指针。
6.根据权利要求1所述的一种实现快速转发并支持负载分担的方法,其特征在于所述的数据报文根据存储在该环行链表中的输出接口信息从相应的输出接口直接转发的处理流程包括有下列步骤(A)在系统初试化时,首先将路由缓存表中的第一个“输出接口信息”及其“指向下一个输出接口的指针”均初试化为“空”,(B)当链路层接收到某条IP流的第一个报文时,先检查其输出接口信息,发现它为“空”,则将该报文转交IP层处理,选择该IP流第一条负载分担路由进行转发;并在该接口发送报文前,把该输出接口信息保存在路由缓存表第一个节点,同时把该节点的尾指针指向自身,而“指向下一个输出接口的指针”仍为“空”;(C)当链路层接收到某条IP流的第二个及其后续报文时,都是先检查其输出接口信息,若不为“空”,则立刻检查“指向下一个输出接口的指针”,发现它为“空”;则将该报文转交IP层处理,每次按顺序地选择该IP流的一条负载分担路由进行转发;并在其相应接口发送报文前,比较该输出接口信息与路由缓存表中已经保存的接口信息是否不同,若不存在相同的接口信息,则每次在输出接口信息的双向链表中创建一个新节点,再通过各节点的头尾指针将该输出接口信息中的各个节点顺序连接成环;其中“指向下一个输出接口的指针”在各个负载分担的不同路由没有全部缓存到该输出接口信息中时,每次均为“空”;(D)在所有负载分担的不同路由全部分流传输过一次该IP流的报文之后,该IP流的第二次循环的第一个报文在对应的链路层接口转发报文前,发现以前已经保存过该输出接口信息,就不再生成新节点;而是把该“输出接口信息”尾指针对应的值赋给“指向下一个输出接口的指针”;(E)当这条IP流的后续报文再次到来时,检查到“指向下一个输出接口的指针”不为“空”,即直接从它所指向的节点对应的输出接口信息,找到当前报文的输出接口,并依据该输出接口信息更换帧头,从相应的输出接口直接转发出去;同时,把“指向下一个输出接口的指针”内容修改为该节点尾指针中的值。
全文摘要
一种实现快速转发并支持负载分担的方法,首先设置环行链表,即在快速转发路由缓存表中的每个缓存信息单元的数据结构中增设一个“指向下一个输出接口的指针”,且缓存的“输出接口信息”是由支持负载分担的若干个“输出接口信息节点”组成,每个“输出接口信息节点”均为动态生成,并用“输出接口信息节点”中的尾指针相连成环而形成环行链表结构;然后将输出接口信息存储在该环行链表中,数据报文根据存储在该环行链表中的输出接口信息从相应的输出接口直接转发,以支持负载分担。
文档编号H04L12/54GK1414736SQ0211787
公开日2003年4月30日 申请日期2002年5月24日 优先权日2002年5月24日
发明者马达 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1