包转发方法及现场可编程门阵列
技术领域
本发明涉及三层转发技术领域,具体涉及包转发方法及现场可编程门阵列(FPGA,Field-Programmable Gate Array)。
背景技术
路由器的高速FPGA线卡采用FPGA作为转发引擎,与中央处理单元(CPU,Central Processing Unit)协同工作。由CPU完成性能要求不高、复杂度高的路由转发业务,完成报文的首包处理,并将报文的流表下刷FPGA;由FPGA基于流表完成性能要求高、复杂度低的路由转发业务,将路由转发性能提升到线速转发。
当路由、业务发生变化时,现有技术有两种更新表项的方式:
方式一、例如接口业务变化或转发信息库(FIB,Forwarding Informationbase)/邻接表发生变化时,手工将FPGA流表全部清除。
该方式的缺点是:易用性较差,当有路由、业务发生变化时,需要记住将流表清除;且,在一些实际组网中,设备上配置更改较频繁,如访问控制列表(ACL,Access Control List)配置的变更,让用户更改完ACL后手工清除所有流表项,用户难以接受;且,在手动删除流表之前,数据报文会按照老流表进行错误的转发,实时性差。
方式二、该方式将CPU业务表项、FIB表项、邻接表项等与FPGA流表关联起来。这个机制需要CPU各表项下挂一个链表,将相关FPGA流表串起来。一旦CPU路由、业务发生变化,则遍历其下挂的所有FPGA流表,并进行刷新。
该方式的缺点是:由于FPGA流表较多,一般路由器需要支持百万甚至千万级别,遍历FPGA流表并重建消耗的时间较长,报文流被错误处理的时间会长一些,收敛时间较长。并且,由于表项多的缘故,遍历过程中需主动释放任务,需考虑并发、时序问题。
发明内容
本发明提供包转发方法及FPGA、CPU,以提高三层转发效率。
本发明的技术方案是这样实现的:
一种包转发方法,该方法包括:
对于三层转发设备的入接口,该设备的中央处理单元CPU下刷入接口信息表项到该设备的现场可编程门阵列FPGA中,该表项包括:入接口标识和入接口业务序列号;
对于三层转发设备的转发信息库FIB表项,该设备的CPU下刷FIB信息表项到该设备的FPGA中,该FIB信息表项包括:FIB索引、FIB序列号和FIB表项内容;
对于三层转发设备的出接口,该设备的CPU下刷出接口信息表项到该设备的FPGA中,该表项包括:出接口标识和出接口业务序列号;
当所述FPGA接收到业务流的首包时,将该包上送所述CPU进行业务处理和转发处理,所述CPU下刷上行流表项和下行流表项到所述FPGA,其中,上行流表项包括:包的五元组、入接口业务序列号、FIB索引、FIB序列号、入接口业务处理内容,下行流表项包括:包的五元组、出接口业务序列号和出接口业务处理内容;
当所述FPGA接收到业务流的后续包时,根据包的五元组查找对应的上行流表项,根据包的入接口标识查找对应的入接口信息表项,根据上行流表项中的FIB索引查找对应的FIB信息表项,若上行流表项和入接口信息表项中的入接口业务序列号相同、且上行流表项和FIB信息表项中的FIB序列号相同,则根据上行流表项中的入接口业务处理内容对包进行入接口业务处理,并根据包的五元组查找对应的下行流表项,根据FIB信息表项中的FIB表项内容的出接口标识查找到对应的出接口信息表项,若下行流表项和出接口信息表项中的出接口业务序列号相同,则根据下行流表项中的出接口业务处理内容对包进行出接口业务处理,根据FIB表项内容将包从出接口转发出去。
所述方法进一步包括:
当任一入接口的业务处理内容更新时,所述CPU根据该入接口标识在所述FPGA中查找对应的入接口信息表项,更新该表项中的入接口业务序列号;
当任一FIB表项的内容更新时,所述CPU根据该FIB表项的FIB索引在所述FPGA中查找对应的FIB信息表项,更新该表项中的FIB序列号和FIB表项内容;
当任一出接口的业务处理内容更新时,所述CPU根据该出接口标识在所述FPGA中查找对应的出接口信息表项,更新该表项中的出接口业务序列号。
当所述FPGA接收到业务流的后续包时,所述FPGA根据上行流表项中的FIB索引查找对应的FIB信息表项之后进一步包括:
若上行流表项和入接口信息表项中的入接口业务序列号不同,和/或上行流表项和FIB信息表项中的FIB序列号不同,则FPGA将该包上送CPU进行业务处理和转发处理,CPU下刷上行流表项和下行流表项到FPGA,其中,上行流表项包括:包的五元组、入接口业务序列号、FIB索引、FIB序列号、入接口业务处理内容,下行流表项包括:包的五元组、出接口业务序列号和出接口业务处理内容。
当所述FPGA接收到业务流的后续包时,所述FPGA根据FIB信息表项中的FIB表项内容中的出接口标识查找到对应的出接口信息表项之后进一步包括:
若下行流表项和出接口信息表项中的出接口业务序列号不同,则FPGA将该包上送CPU处理,同时根据FIB信息表项中的FIB表项内容中的出接口号,告知CPU该包的出接口号,CPU对该包进行出接口业务处理,并下刷下行流表项到FPGA,该下行流表项包括:包的五元组、出接口业务序列号和出接口业务处理内容。
一种包转发方法,该方法包括:
对于三层转发设备的入接口,该设备的CPU下刷入接口信息表项到该设备的FPGA中,该表项包括:入接口标识和入接口业务序列号;
对于三层转发设备的转发信息库FIB表项,该设备的CPU下刷FIB信息表项到该设备的FPGA中,该FIB信息表项包括:FIB索引、FIB序列号和FIB表项内容;
对于三层转发设备的出接口,该设备的CPU下刷出接口信息表项到该设备的FPGA中,该表项包括:出接口标识、出接口业务处理标志和出接口业务序列号,其中,出接口业务处理标志用于表示是否需要在出接口上对包进行业务处理;
当所述FPGA接收到业务流的首包时,将该包上送所述CPU进行业务处理和转发处理,且当在出接口上对包进行了业务处理时,所述CPU下刷上行流表项和下行流表项到所述FPGA;否则,所述CPU只下刷上行流表项到所述FPGA,其中,上行流表项包括:包的五元组、入接口业务序列号、FIB索引、FIB序列号、入接口业务处理内容,下行流表项包括:包的五元组、出接口业务序列号和出接口业务处理内容;
当所述FPGA接收到业务流的后续包时,根据包的五元组查找对应的上行流表项,根据包的入接口标识查找对应的入接口信息表项,根据上行流表项中的FIB索引查找对应的FIB信息表项,若上行流表项和入接口信息表项中的入接口业务序列号相同、且上行流表项和FIB信息表项中的FIB序列号相同,则根据上行流表项中的入接口业务处理内容对包进行入接口业务处理,并根据FIB信息表项中的FIB表项内容的出接口标识查找到对应的出接口信息表项,若出接口信息表项中的出接口业务处理标志指示需要进行业务处理,则根据包的五元组查找对应的下行流表项,若下行流表项和出接口信息表项中的出接口业务序列号相同,则根据下行流表项中的出接口业务处理内容对包进行出接口业务处理,根据FIB表项内容将包从出接口转发出去;若出接口信息表项中的出接口业务处理标志指示无需进行业务处理,则直接根据出接口信息表项中的出接口标识将包转发出去。
所述方法进一步包括:
当任一入接口的业务处理内容更新时,所述CPU根据该入接口标识在所述FPGA中查找对应的入接口信息表项,更新该表项中的入接口业务序列号;
当任一FIB表项的内容更新时,所述CPU根据该FIB表项的FIB索引在所述FPGA中查找对应的FIB信息表项,更新该表项中的FIB序列号和FIB表项内容;
当任一出接口的业务处理内容更新时,所述CPU根据该出接口标识在所述FPGA中查找对应的出接口信息表项,更新该表项中的出接口业务序列号,且若该出接口由无需进行业务处理更改为需要进行业务处理,或者由需要进行业务处理更改为无需进行业务处理,则更新该表项中的出接口业务处理标志。
当所述FPGA接收到业务流的后续包时,所述FPGA根据上行流表项中的FIB索引查找对应的FIB信息表项之后进一步包括:
若上行流表项和入接口信息表项中的入接口业务序列号不同,和/或上行流表项和FIB信息表项中的FIB序列号不同,则FPGA将该包上送CPU进行业务处理和转发处理,且当在出接口上对包进行了业务处理时,所述CPU下刷上行流表项和下行流表项到所述FPGA;否则,所述CPU只下刷上行流表项到所述FPGA,其中,上行流表项包括:包的五元组、入接口业务序列号、FIB索引、FIB序列号、入接口业务处理内容,下行流表项包括:包的五元组、出接口业务序列号和出接口业务处理内容。
当所述FPGA接收到业务流的后续包、且出接口信息表项中的出接口业务处理标志指示需要进行业务处理时,所述FPGA根据包的五元组查找对应的下行流表项之后进一步包括:
若下行流表项和出接口信息表项中的出接口业务序列号不同,则FPGA将该包上送CPU处理,同时根据FIB信息表项中的FIB表项内容中的出接口号,告知CPU该包的出接口号,CPU对该包进行出接口业务处理,并下刷下行流表项到FPGA,该下行流表项包括:包的五元组、出接口业务序列号和出接口业务处理内容。
一种FPGA,位于三层转发设备中,包括:
入接口信息表存储模块:针对入接口存储入接口信息表项,该表项包括:入接口标识和入接口业务序列号;
FIB信息表存储模块:针对FIB表项存储FIB信息表项,该表项包括:FIB索引、FIB序列号和FIB表项内容;
出接口信息表存储模块:针对出接口存储出接口信息表项,该表项包括:出接口标识和出接口业务序列号;
上行流表存储模块:针对每条业务流存储一条上行流表项,该表项包括:包的五元组、入接口业务序列号、FIB索引、FIB序列号、入接口业务处理内容;
下行流表存储模块:针对每条业务流存储一条下行流表项,该表项包括:包的五元组、出接口业务序列号和出接口业务处理内容;
包处理模块:当接收到业务流的首包时,将该包上送CPU进行业务处理和转发处理;当接收到业务流的后续包时,根据包的五元组在上行流表存储模块中查找对应的上行流表项,根据包的入接口标识在入接口信息表存储模块中查找对应的入接口信息表项,根据上行流表项中的FIB索引在FIB信息表存储模块中查找对应的FIB信息表项,若上行流表项和入接口信息表项中的入接口业务序列号相同、且上行流表项和FIB信息表项中的FIB序列号相同,则根据上行流表项中的入接口业务处理内容对包进行入接口业务处理,并根据包的五元组在下行流表存储模块中查找对应的下行流表项,根据FIB信息表项中的FIB表项内容的出接口标识在出接口信息表存储模块中查找到对应的出接口信息表项,若下行流表项和出接口信息表项中的出接口业务序列号相同,则根据下行流表项中的出接口业务处理内容对包进行出接口业务处理,根据FIB表项内容将包从出接口转发出去。
所述包处理模块进一步用于,当接收到业务流的后续包时,若查找到的上行流表项和入接口信息表项中的入接口业务序列号不同,和/或上行流表项和FIB信息表项中的FIB序列号不同,则将该包上送CPU进行业务处理和转发处理。
所述包处理模块进一步用于,当接收到业务流的后续包时,若查找到的下行流表项和出接口信息表项中的出接口业务序列号不同,则将该包上送CPU进行出接口业务处理和转发处理。
一种CPU,位于三层转发设备中,包括:
入接口信息表下刷模块:针对入接口向FPGA下刷入接口信息表项,该表项包括:入接口标识和入接口业务序列号;
FIB信息表下刷模块:针对FIB表项向FPGA下刷FIB信息表项,该表项包括:FIB索引、FIB序列号和FIB表项内容;
出接口信息表下刷模块:针对出接口向FPGA下刷出接口信息表项,该表项包括:出接口标识和出接口业务序列号;
上行流表下刷模块:当接收到包处理模块发来的下刷上行流表指示时,根据包处理模块对包进行的入接口业务处理和FIB表项查找处理,向FPGA下刷上行流表项,该表项包括:包的五元组、入接口业务序列号、FIB索引、FIB序列号、入接口业务处理内容;
下行流表下刷模块:当接收到包处理模块发来的下刷下行流表指示时,根据包处理模块对包进行的出接口业务处理,向FPGA下刷下行流表项,该表项包括:包的五元组、出接口业务序列号和出接口业务处理内容;
包处理模块:接收FPGA发来的首包或后续包,对该包进行业务处理和转发处理,并向上行流表下刷模块发送下刷上行流表指示,向下行流表下刷模块发送下刷下行流表指示。
所述入接口信息表下刷模块进一步用于,当任一入接口的业务处理内容更新时,根据该入接口标识在FPGA中查找对应的入接口信息表项,更新该表项中的入接口业务序列号;
所述FIB信息表下刷模块进一步用于,当任一FIB表项的内容更新时,根据该FIB表项的FIB索引在FPGA中查找对应的FIB信息表项,更新该表项中的FIB序列号和FIB表项内容;
所述出接口信息表下刷模块进一步用于,当任一出接口的业务处理内容更新时,根据该出接口标识在FPGA中查找对应的出接口信息表项,更新该表项中的出接口业务序列号。
所述包处理模块进一步用于,当接收到FPGA发来的后续包及出接口标识时,根据该出接口标识对该包进行出接口业务处理和转发处理,并向下行流表下刷模块发送下刷下行流表指示。
一种FPGA,位于三层转发设备中,包括:
入接口信息表存储模块:针对入接口存储入接口信息表项,该表项包括:入接口标识和入接口业务序列号;
FIB信息表存储模块:针对FIB表项存储FIB信息表项,该表项包括:FIB索引、FIB序列号和FIB表项内容;
出接口信息表存储模块:针对出接口存储出接口信息表项,该表项包括:出接口标识、出接口业务处理标志和出接口业务序列号,其中,出接口业务处理标志用于表示是否需要在出接口上对包进行业务处理;
上行流表存储模块:针对每条业务流存储一条上行流表项,该表项包括:包的五元组、入接口业务序列号、FIB索引、FIB序列号、入接口业务处理内容;
下行流表存储模块:针对每条需在出接口上进行业务处理的业务流存储一条下行流表项,该表项包括:包的五元组、出接口业务序列号和出接口业务处理内容;
包处理模块:当接收到业务流的首包时,将该包上送CPU进行业务处理和转发处理;当接收到业务流的后续包时,根据包的五元组在上行流表存储模块中查找对应的上行流表项,根据包的入接口标识在入接口信息表存储模块中查找对应的入接口信息表项,根据上行流表项中的FIB索引在FIB信息表存储模块中查找对应的FIB信息表项,若上行流表项和入接口信息表项中的入接口业务序列号相同、且上行流表项和FIB信息表项中的FIB序列号相同,则根据上行流表项中的入接口业务处理内容对包进行入接口业务处理,并根据FIB信息表项中的FIB表项内容的出接口标识查找到对应的出接口信息表项,若出接口信息表项中的出接口业务处理标志指示需要进行业务处理,则根据包的五元组查找对应的下行流表项,若下行流表项和出接口信息表项中的出接口业务序列号相同,则根据下行流表项中的出接口业务处理内容对包进行出接口业务处理,根据FIB表项内容将包从出接口转发出去;若出接口信息表项中的出接口业务处理标志指示无需进行业务处理,则直接根据出接口信息表项中的出接口标识将包转发出去。
所述包处理模块进一步用于,当接收到业务流的后续包时,若查找到的上行流表项和入接口信息表项中的入接口业务序列号不同,和/或上行流表项和FIB信息表项中的FIB序列号不同,则将该包上送CPU进行业务处理和转发处理。
所述包处理模块进一步用于,当接收到业务流的后续包、且出接口信息表项中的出接口业务处理标志指示需要进行业务处理时,若查找到的下行流表项和出接口信息表项中的出接口业务序列号不同,则将该包上送CPU进行出接口业务处理和转发处理。
一种CPU,位于三层转发设备中,包括:
入接口信息表下刷模块:针对入接口向FPGA下刷入接口信息表项,该表项包括:入接口标识和入接口业务序列号;
FIB信息表下刷模块:针对FIB表项向FPGA下刷FIB信息表项,该表项包括:FIB索引、FIB序列号和FIB表项内容;
出接口信息表下刷模块:针对出接口向FPGA下刷出接口信息表项,该表项包括:出接口标识、出接口业务处理标志和出接口业务序列号,其中,出接口业务处理标志用于表示是否需要在出接口上对包进行业务处理;
上行流表下刷模块:当接收到包处理模块发来的下刷上行流表指示时,根据包处理模块对包进行的入接口业务处理和FIB表项查找处理,向FPGA下刷上行流表项,该表项包括:包的五元组、入接口业务序列号、FIB索引、FIB序列号、入接口业务处理内容;
下行流表下刷模块:当接收到包处理模块发来的下刷下行流表指示时,根据包处理模块对包进行的出接口业务处理,向FPGA下刷下行流表项,该表项包括:包的五元组、出接口业务序列号和出接口业务处理内容;
包处理模块:接收FPGA发来的首包或后续包,对该包进行业务处理和转发处理,且当在出接口上对包进行了业务处理时,向上行流表下刷模块发送下刷上行流表指示,同时向下行流表下刷模块发送下刷下行流表指示,当在出接口上未对包进行业务处理时,只向上行流表下刷模块发送下刷上行流表指示。
所述入接口信息表下刷模块进一步用于,当任一入接口的业务处理内容更新时,根据该入接口标识在FPGA中查找对应的入接口信息表项,更新该表项中的入接口业务序列号;
所述FIB信息表下刷模块进一步用于,当任一FIB表项的内容更新时,根据该FIB表项的FIB索引在FPGA中查找对应的FIB信息表项,更新该表项中的FIB序列号和FIB表项内容;
所述出接口信息表下刷模块进一步用于,当任一出接口的业务处理内容更新时,根据该出接口标识在FPGA中查找对应的出接口信息表项,更新该表项中的出接口业务序列号,且若该出接口由无需进行业务处理更改为需要进行业务处理,或者由需要进行业务处理更改为无需进行业务处理,则更新该表项中的出接口业务处理标志。
所述包处理模块进一步用于,当接收到FPGA发来的后续包及出接口标识时,根据该出接口标识对该包进行出接口业务处理和转发处理,并向下行流表下刷模块发送下刷下行流表指示。
与现有技术相比,本发明通过在FPGA中建立入接口信息表、FIB信息表和出接口信息表,在转发包时,通过将上行流表项和入接口信息表项中的入接口业务序列号、上行流表项和FIB信息表项中的FIB序列号、下行流表项和出接口信息表项中出接口业务序列号进行比较,能感知业务、路由变化,从而提高了三层转发效率。
本发明实施例可以实现FPGA中的上、下行流表的快速收敛。
附图说明
图1为本发明实施例一提供的入接口信息表、出接口信息表和FIB信息表的创建和更新方法流程图;
图2-1为本发明实施例一提供的初始时,CPU下刷入接口信息表项、出接口信息表项和FIB信息表项的示意图;
图2-2为本发明实施例一提供的CPU更新入接口信息表项、出接口信息表项和FIB信息表项的示意图;
图3为本发明实施例一提供的包转发方法流程图;
图4-1为本发明实施例一提供的当FPGA接收到业务流的首包时,CPU下刷上行流表项、下行流表项的示意图;
图4-2为本发明实施例一提供的当FPGA接收到业务流的后续包时的处理示意图;
图5为本发明实施例一提供的FPGA的组成示意图;
图6为本发明实施例一提供的CPU的组成示意图。
具体实施方式
下面结合附图及具体实施例对本发明再作进一步详细的说明。
本发明实施例中,首先需要在三层转发设备的FPGA中有三张信息表:入接口信息表、出接口信息表和FIB信息表。
图1为本发明实施例一提供的入接口信息表、出接口信息表和FIB信息表的创建和更新方法流程图,如图1所示,其具体步骤如下:
步骤101:初始时,三层转发设备的CPU在该设备的FPGA中创建入接口信息表、出接口信息表和FIB信息表,该三张表初始时都为空。
步骤102:初始时,针对入接口,CPU向FPGA的入接口信息表下刷入接口信息表项,该表项包括:入接口业务序列号和入接口号;针对出接口,CPU向FPGA的出接口信息表下刷出接口信息表项,该表项包括:出接口业务序列号和出接口号;CPU根据学习到的每条FIB表项,向FPGA的FIB表中下刷一条FIB信息表项,该表项包括:FIB序列号、FIB索引和FIB表项内容。
图2-1给出了初始时,CPU下刷入接口信息表项、出接口信息表项和FIB信息表项的示意图,如图2-1所示,设路由器上有两个入接口:入接口1、2,有两个出接口:出接口1、2,则CPU下刷两条入接口信息表项、两条出接口信息表项到FPGA,设路由器上已学习到两条FIB表项,则CPU下刷两条FIB信息表项到FPGA。
步骤103:当CPU发现任一入接口的业务处理内容更新时,根据该入接口号,在FPGA的入接口信息表中查找对应的入接口信息表项,将该表项中的入接口业务序号加1。
例如:有一个入接口m,初始时,其对应的入接口业务序列号为1,此后该入接口m的业务处理内容每更新一次,CPU就会将其对应的入接口业务序列号加1一次。
步骤104:当CPU发现任一出接口的业务处理内容更新时,根据该出接口号,在FPGA的出接口信息表中查找对应的出接口信息表项,将该表项中的出接口业务序号加1。
步骤105:当CPU发现任一FIB表项的内容更新时,根据该表项的FIB索引,在FPGA的FIB信息表中查找到对应的FIB信息表项,将该表项中的FIB序列号加1,同时更新该表项中的FIB表项内容。
图2-2给出了CPU更新入接口信息表项、出接口信息表项和FIB信息表项的示意图,如图2-2所示,当入接口1的业务处理内容更新时,CPU根据入接口1在FPGA的入接口信息表中找到对应的入接口信息表项,将该表项中的入接口业务序列号由当前的x更新为x+1;当FIB表项1的内容更新时,CPU根据FIB表项1的索引,在FPGA的FIB信息表中找到对应的FIB信息表项,将该表项中的FIB序列号由当前的y更新为y+1,同时更新该表项中的FIB表项1内容;当出接口1的业务处理内容更新时,CPU根据出接口1在FPGA的出接口信息表中找到对应的出接口信息表项,将该表项中的出接口业务序列号由当前的z更新为z+1。
当路由、业务发生变化时,FPGA可通过将入接口信息表项、FIB信息表项与上行流表项进行对比,将出接口信息表项和下行流表项进行对比,来得知路由、业务发生变化,从而将包上送CPU处理,并刷新FPGA中的上行流表项、下行流表项。
图3为本发明实施例一提供的包转发方法流程图,如图3所示,其具体步骤如下:
步骤300:初始时,三层转发设备的CPU在该设备的FPGA中创建上行流表和下行流表,该两张表初始时都为空。
步骤301:FPGA接收一个业务流的首包。
当FPGA接收到一个业务流包,若根据该包的五元组,在FPGA的上行流中未查找到对应的上行流表项,则确定该包为首包。
步骤302:FPGA将该包上送CPU。
步骤303:CPU根据该包的入接口上需进行的业务处理内容,对该包进行业务处理,处理完毕,根据该包的五元组查找对应的FIB表项,然后向FPGA的上行流中下刷上行流表项,该表项包括:五元组、入接口业务序列号、入接口业务处理内容、FIB序列号、FIB索引。
若入接口上不需对包进行业务处理,则上行流表项中的入接口业务处理内容为空。
步骤304:CPU在该包对应的FIB表项中查找到出接口号,根据该出接口上需进行的业务处理内容,对该包进行业务处理,处理完毕将该包从该出接口转发出去,并向FPGA的下行流表中下刷下行流表项,该表项包括:五元组、出接口业务序列号、出接口业务处理内容。
若出接口上不需对包进行业务处理,则下行流表项中的出接口业务处理内容为空。
图4-1给出了当FPGA接收到业务流的首包时,CPU下刷上行流表项、下行流表项的示意图,如图4-1所示,设首包的入接口为入接口1,当前入接口1的入接口业务序列号为x,设首包对应的FIB表项1内容中的FIB索引为FIB索引1,FIB序列号为y;设首包对应的FIB表项1内容中的出接口为出接口1,当前出接口1的出接口业务序列号为z。
步骤305:FPGA接收业务流的后续包,根据包的入接口号,在FPGA的入接口信息表中查找对应的入接口信息表项,获取该表项中的入接口业务序列号;根据包的五元组,在FPGA的上行流中查找对应的上行流表项,获取该表项中的入接口业务序列号,同时获取该表项中的FIB索引和FIB序列号;根据该FIB索引在FPGA的FIB信息表中查找对应的FIB信息表项,获取该表项中的FIB序列号。
步骤306:FPGA判断是否满足:两次获取的入接口业务序列号相同、两次获取的FIB序列号相同,若是,执行步骤307;否则,返回步骤302。
步骤307:FPGA根据上行流表项中的入接口业务处理内容进行业务处理,根据FIB信息表项中的FIB表项内容中的出接口号,在出接口信息表中查找对应的出接口信息表项,获取该表项中的出接口业务序列号;根据包的五元组,在FPGA的下行流表中查找对应的下行流表项,获取该表项中的出接口业务序列号。
本步骤中,默认需要在入接口上对包进行业务处理。在实际应用中,若上行流表项中的入接口业务处理内容为空,则本步骤中FPGA无需对包进行业务处理。
步骤308:FPGA判断两次获取的出接口业务序列号是否相同,若是,执行步骤311;否则,执行步骤309。
步骤309:FPGA将该包上送CPU,同时将上行处理完成标志和出接口号发送给CPU。
步骤310:CPU接收该包和上行处理完成标志、出接口号,得知上行处理完成,则根据出接口号查找到对应的出接口业务处理内容,进行相应的业务处理,将该包从对应的出接口转发出去,然后根据包的五元组,在FPGA的下行流表中查找到对应的下行流表项,更新该下行流表项,本流程结束。
本步骤中,更新下行流表项即,将表项的出接口业务序列号更新为最新的出接口业务序列号,将表项的出接口业务处理内容更新为该出接口的最新业务处理内容。
本步骤中,默认需要在出接口上对包进行业务处理。在实际应用中,若下行流表项中的出接口业务处理内容为空,则本步骤中FPGA无需对包进行业务处理。
步骤311:FPGA根据下行流表项中的出接口业务处理内容对包进行相应业务处理,处理完毕,将包从出接口转发出去。
图4-2给出了当FPGA接收到业务流的后续包时的处理示意图,如图4-2所示,当FPGA发现入接口信息表项和上行流表项中的入接口业务序列号相同、FIB信息表项和上行流表项中的FIB序列号相同,且出接口信息表项和下行流表项中的出接口业务序列号相同时,则在FPGA进行包转发处理;否则,将包上送CPU处理。
需要说明的是,图3所示实施例的实施依赖于图1所示实施例,但是图3所示实施例和图1所示实施例在执行时是相互独立的。
另外,在实际应用中,在入接口或者出接口上可能在某些时候不需对包进行任何业务处理。针对这种情况,除了图1、3所示实施方式外,也可以采用如下实施方式:
在出接口信息表项中增加出接口业务处理标志,同时,步骤102、104中,CPU在下发或更新出接口信息表项时,若发现在该出接口上设置有业务处理,则将出接口业务处理标志置位,即置为“1”;否则,将出接口业务处理标志复位,即置为“0”。同时,步骤304中,若CPU发现在出接口上无需对包进行业务处理,则不向FPGA的下行流表下刷下行流表项;步骤307中,FPGA在查找到对应出接口信息表项后,要先获取该表项中的出接口业务处理标志,若发现该标志被复位,则直接根据出接口信息表项中的出接口号将报文转发出去即可;若发现该标志被置位,则继续执行“获取该表项中的出接口业务序列号”及后续步骤。
图5为本发明实施例一提供的FPGA的组成示意图,该FPGA位于三层转发设备中,如图5所示,该FPGA主要包括:入接口信息表存储模块51、FIB信息表存储模块52、出接口信息表存储模块53、上行流表存储模块54、下行流表存储模块55和包处理模块56,其中:
入接口信息表存储模块51:针对三层转发设备的每个入接口存储一条入接口信息表项,该表项包括:入接口标识和入接口业务序列号。
FIB信息表存储模块52:针对三层转发设备的每条FIB表项存储一条FIB信息表项,该表项包括:FIB索引、FIB序列号和FIB表项内容。
出接口信息表存储模块53:针对三层转发设备的每个出接口存储一条出接口信息表项,该表项包括:出接口标识和出接口业务序列号。
上行流表存储模块54:针对三层转发设备接收到的每条业务流存储一条上行流表项,该表项包括:包的五元组、入接口业务序列号、FIB索引、FIB序列号、入接口业务处理内容。
下行流表存储模块55:针对三层转发设备接收到的每条业务流存储一条下行流表项,该表项包括:包的五元组、出接口业务序列号和出接口业务处理内容。
包处理模块56:当接收到业务流的首包时,将该包上送本设备的CPU进行业务处理和转发处理;当接收到业务流的后续包时,根据包的五元组在上行流表存储模块54中查找对应的上行流表项,根据包的入接口标识在入接口信息表存储模块51中查找对应的入接口信息表项,根据上行流表项中的FIB索引在FIB信息表存储模块52中查找对应的FIB信息表项,若上行流表项和入接口信息表项中的入接口业务序列号相同、且上行流表项和FIB信息表项中的FIB序列号相同,则根据上行流表项中的入接口业务处理内容对包进行入接口业务处理,并根据包的五元组在下行流表存储模块55中查找对应的下行流表项,根据FIB信息表项中的FIB表项内容中的出接口标识在出接口信息表存储模块53中查找到对应的出接口信息表项,若下行流表项和出接口信息表项中的出接口业务序列号相同,则根据下行流表项中的出接口业务处理内容对包进行出接口业务处理,根据FIB表项内容将包从出接口转发出去。
包处理模块56进一步用于,当接收到业务流的后续包时,若查找到的上行流表项和入接口信息表项中的入接口业务序列号不同,和/或上行流表项和FIB信息表项中的FIB序列号不同,则将该包上送CPU进行业务处理和转发处理。
包处理模块56进一步用于,当接收到业务流的后续包时,若查找到的下行流表项和出接口信息表项中的出接口业务序列号不同,则将该包上送CPU进行出接口业务处理和转发处理。
图6为本发明实施例一提供的CPU的组成示意图,该CPU位于三层转发设备中,如图6所示,该CPU主要包括:入接口信息表下刷模块61、FIB信息表下刷模块62、出接口信息表下刷模块63、上行流表下刷模块64、下行流表下刷模块65和包处理模块66,其中:
入接口信息表下刷模块61:针对三层转发设备的每个入接口,向FPGA下刷一条入接口信息表项,该表项包括:入接口标识和入接口业务序列号。
入接口信息表下刷模块61进一步用于,当任一入接口的业务处理内容更新时,根据该入接口标识在FPGA中查找对应的入接口信息表项,更新该表项中的入接口业务序列号。
FIB信息表下刷模块62:针对三层转发设备的每条FIB表项,向FPGA下刷一条FIB信息表项,该表项包括:FIB索引、FIB序列号和FIB表项内容。
FIB信息表下刷模块62进一步用于,当任一FIB表项的内容更新时,根据该FIB表项的FIB索引在FPGA中查找对应的FIB信息表项,更新该表项中的FIB序列号和FIB表项内容。
出接口信息表下刷模块63:针对三层转发设备的每个出接口,向FPGA下刷一条出接口信息表项,该表项包括:出接口标识和出接口业务序列号。
出接口信息表下刷模块63进一步用于,当任一出接口的业务处理内容更新时,根据该出接口标识在FPGA中查找对应的出接口信息表项,更新该表项中的出接口业务序列号。
上行流表下刷模块64:当接收到包处理模块66发来的下刷上行流表指示时,根据包处理模块66对包进行的入接口业务处理和FIB表项查找处理,向FPGA下刷一条上行流表项,该表项包括:包的五元组、入接口业务序列号、FIB索引、FIB序列号、入接口业务处理内容。
下行流表下刷模块65:当接收到包处理模块66发来的下刷下行流表指示时,根据包处理模块66对包进行的出接口业务处理,向FPGA下刷一条下行流表项,该表项包括:包的五元组、出接口业务序列号和出接口业务处理内容。
包处理模块66:接收FPGA发来的业务流的首包或后续包时,对该包进行业务处理和转发处理,并向上行流表下刷模块64发送下刷上行流表指示,向下行流表下刷模块65发送下刷下行流表指示。
包处理模块66进一步用于,当接收到FPGA发来的后续包及出接口标识时,根据该出接口标识对该包进行出接口业务处理和转发处理,并向下行流表下刷模块65发送下刷下行流表指示。
以下给出本发明实施例二提供的FPGA的组成,该FPGA位于三层转发设备中,其主要包括:入接口信息表存储模块、FIB信息表存储模块、出接口信息表存储模块、上行流表存储模块、下行流表存储模块和包处理模块,其中:
入接口信息表存储模块:针对入接口存储入接口信息表项,该表项包括:入接口标识和入接口业务序列号。
FIB信息表存储模块:针对FIB表项存储FIB信息表项,该表项包括:FIB索引、FIB序列号和FIB表项内容。
出接口信息表存储模块:针对出接口存储出接口信息表项,该表项包括:出接口标识、出接口业务处理标志和出接口业务序列号,其中,出接口业务处理标志用于表示是否需要在出接口上对包进行业务处理。
上行流表存储模块:针对每条业务流存储一条上行流表项,该表项包括:包的五元组、入接口业务序列号、FIB索引、FIB序列号、入接口业务处理内容。
下行流表存储模块:针对每条需在出接口上进行业务处理的业务流存储一条下行流表项,该表项包括:包的五元组、出接口业务序列号和出接口业务处理内容。
包处理模块:当接收到业务流的首包时,将该包上送CPU进行业务处理和转发处理;当接收到业务流的后续包时,根据包的五元组在上行流表存储模块中查找对应的上行流表项,根据包的入接口标识在入接口信息表存储模块中查找对应的入接口信息表项,根据上行流表项中的FIB索引在FIB信息表存储模块中查找对应的FIB信息表项,若上行流表项和入接口信息表项中的入接口业务序列号相同、且上行流表项和FIB信息表项中的FIB序列号相同,则根据上行流表项中的入接口业务处理内容对包进行入接口业务处理,并根据FIB信息表项中的FIB表项内容的出接口标识查找到对应的出接口信息表项,若出接口信息表项中的出接口业务处理标志指示需要进行业务处理,则根据包的五元组查找对应的下行流表项,若下行流表项和出接口信息表项中的出接口业务序列号相同,则根据下行流表项中的出接口业务处理内容对包进行出接口业务处理,根据FIB表项内容将包从出接口转发出去;若出接口信息表项中的出接口业务处理标志指示无需进行业务处理,则直接根据出接口信息表项中的出接口标识将包转发出去。
包处理模块可进一步用于,当接收到业务流的后续包时,若查找到的上行流表项和入接口信息表项中的入接口业务序列号不同,和/或上行流表项和FIB信息表项中的FIB序列号不同,则将该包上送CPU进行业务处理和转发处理。
包处理模块还可进一步用于,当接收到业务流的后续包、且出接口信息表项中的出接口业务处理标志指示需要进行业务处理时,若查找到的下行流表项和出接口信息表项中的出接口业务序列号不同,则将该包上送CPU进行出接口业务处理和转发处理。
以下给出本发明实施例二提供的CPU的组成,该CPU位于三层转发设备中,其主要包括:入接口信息表下刷模块、FIB信息表下刷模块、出接口信息表下刷模块、上行流表下刷模块、下行流表下刷模块和包处理模块,其中:
入接口信息表下刷模块:针对入接口向FPGA下刷入接口信息表项,该表项包括:入接口标识和入接口业务序列号。
入接口信息表下刷模块进一步用于,当任一入接口的业务处理内容更新时,根据该入接口标识在FPGA中查找对应的入接口信息表项,更新该表项中的入接口业务序列号。
FIB信息表下刷模块:针对FIB表项向FPGA下刷FIB信息表项,该表项包括:FIB索引、FIB序列号和FIB表项内容。
FIB信息表下刷模块进一步用于,当任一FIB表项的内容更新时,根据该FIB表项的FIB索引在FPGA中查找对应的FIB信息表项,更新该表项中的FIB序列号和FIB表项内容。
出接口信息表下刷模块:针对出接口向FPGA下刷出接口信息表项,该表项包括:出接口标识、出接口业务处理标志和出接口业务序列号,其中,出接口业务处理标志用于表示是否需要在出接口上对包进行业务处理。
出接口信息表下刷模块进一步用于,当任一出接口的业务处理内容更新时,根据该出接口标识在FPGA中查找对应的出接口信息表项,更新该表项中的出接口业务序列号,且若该出接口由无需进行业务处理更改为需要进行业务处理,或者由需要进行业务处理更改为无需进行业务处理,则更新该表项中的出接口业务处理标志。
上行流表下刷模块:当接收到包处理模块发来的下刷上行流表指示时,根据包处理模块对包进行的入接口业务处理和FIB表项查找处理,向FPGA下刷上行流表项,该表项包括:包的五元组、入接口业务序列号、FIB索引、FIB序列号、入接口业务处理内容。
下行流表下刷模块:当接收到包处理模块发来的下刷下行流表指示时,根据包处理模块对包进行的出接口业务处理,向FPGA下刷下行流表项,该表项包括:包的五元组、出接口业务序列号和出接口业务处理内容。
包处理模块:接收FPGA发来的首包或后续包,对该包进行业务处理和转发处理,且当在出接口上对包进行了业务处理时,向上行流表下刷模块发送下刷上行流表指示,同时向下行流表下刷模块发送下刷下行流表指示,当在出接口上未对包进行业务处理时,只向上行流表下刷模块发送下刷上行流表指示。
包处理模块进一步用于,当接收到FPGA发来的后续包及出接口标识时,根据该出接口标识对该包进行出接口业务处理和转发处理,并向下行流表下刷模块发送下刷下行流表指示。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。