发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种网络处理器和数据包转发方法,其目的在于通过相互关联的业务表和标签表设置标签构成转发路径,以转发不同类型的业务,扩展了所支持的业务种类,提高软件的复用性和稳定性,由此解决不同业务所使用的标签的长度相差很大,难以统一管理和存贮的技术问题。
为实现上述目的,按照本发明的一个方面,提供了一种数据包转发方法,所述数据包转发方法应用于网络处理器,所述网络处理器在其存贮空间上建立多个业务表和多个标签表;
所述数据包转发方法包括:
获取目的业务表,在所述目的业务表中设置与数据包相匹配的标签类型和标签层数,将所述数据包与所述目的业务表建立第一关联;
根据所述标签类型和所述标签层数获取多个目的标签表,在多个所述目的标签表中设置相应的标签值,并将所述目的业务表与多个所述目的标签表建立第二关联;
在进行数据包转发时,通过所述第一关联和所述第二关联确定所述数据包所对应的目的标签表,以得到相应的标签值,将全部的标签值封装至所述数据包中,将经过封装的数据包转发至下游设备。
优选地,每个所述标签表均具有表索引,所述业务表设置有第一表项,所述第一表项用于设置所述业务表所指向的第一个标签表,所述标签表设置有第二表项,所述第二表项用于设置所述标签表所指向的下一个标签表;
所述根据所述标签类型和所述标签层数获取多个目的标签表,在多个所述目的标签表中设置相应的标签值,并将所述目的业务表与多个所述目的标签表的表索引建立第二关联包括:
根据所述标签类型和所述标签层数获取多个目的标签表;
将所述目的业务表的第一表项设置为第一个目的标签表的表索引,在所述第一个目的标签表中设置相应的标签值,将所述第一个目的标签表的第二表项设置为第二个目的标签表的表索引;
在所述第二个目的标签表中设置相应的标签值,将所述第二个目的标签表的第二表项设置为下一个目的标签表的表索引,直至完成全部标签值的设置,将最后一个目的标签表的第二表项设置为设定值。
优选地,每个所述业务表均具有表索引;
将所述数据包与所述目的业务表建立第一关联包括:
将所述数据包与所述目的业务表的表索引建立第一关联。
优选地,在进行数据包转发时,通过所述第一关联和所述第二关联确定所述数据包所对应的目的标签表,以得到相应的标签值,将全部的标签值封装至所述数据包中,将经过封装的数据包转发至下游设备包括:
在进行数据包转发时,根据所述目的业务表的表索引确定相应的目的业务表;
根据所述目的业务表的第一表项所对应的表索引,确定第一个目的标签表,取出所述第一个目的标签表的标签值;
根据所述第一个目的标签表的第二表项所对应的表索引,确定第二个目的标签表,取出所述第二个目的标签表的标签值;
根据所述第二个目的标签表的第二表项所对应的表索引,确定下一个目的标签表,取出所述下一个目的标签表的标签值,直至取出全部的标签值;
将全部的标签值封装至所述数据包中,将经过封装的数据包转发至下游设备。
优选地,多个所述业务表配套设置有第一资源管理器,多个所述标签表配套设置有第二资源管理器;
所述数据包转发方法还包括:
在取出所述目的业务表后,将所述第一资源管理器的头指针往后移动,指向没有被取出的业务表;
在取出多个所述目的标签表后,将所述第二资源管理器的头指针往后移动,指向没有被取出的标签表。
优选地,所述数据包转发方法还包括:
在由所述目的业务表和所述目的标签表所构成的转发路径被删除后,将所述目的业务表和所述目的标签表重置为初始化状态;
将所述第一资源管理器的尾指针指向所述目的业务表,将所述第二资源管理器的尾指针指向所述最后一个目的标签表。
优选地,所述数据包转发方法还包括:
获取数据包的以太帧类型,根据所述以太帧类型确定所述数据包的业务类型,以根据所述业务类型确定所述数据包对应的标签类型。
优选地,每个所述标签表可以存储32bit的标签值。
优选地,所述业务类型包括SR-MPLS业务和SRv6业务;
当业务类型为SR-MPLS业务时,标签类型为MPLS标签,每个MPLS标签占用32bit,针对SR-MPLS业务,若需要三层MPLS标签形成标签栈,则共需要三个目的标签表;
当业务类型为SRv6业务时,标签类型为SID标签,每个SID标签占用128bit,每个SID标签占用四个目的标签表,针对SRv6业务,若需要将四层SID标签形成一个标签栈,则共需要十六个目的标签表。
按照本发明的另一方面,提供了一种网络处理器,包括至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行本发明所述的数据包转发方法。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有如下有益效果:本发明提供一种网络处理器和数据包转发方法,该数据包转发方法包括:获取目的业务表,在所述目的业务表中设置与数据包相匹配的标签类型和标签层数,将所述数据包与所述目的业务表建立第一关联;根据所述标签类型和所述标签层数获取多个目的标签表,在多个所述目的标签表中设置相应的标签值,并将所述目的业务表与多个所述目的标签表建立第二关联;在进行数据包转发时,通过所述第一关联和所述第二关联确定所述数据包所对应的目的标签表,以得到相应的标签值,将全部的标签值封装至所述数据包中,将经过封装的数据包转发至下游设备。
在本发明中,通过该数据包转发方法,可以实现SR-MPLS/SRv6等不同业务的资源共用,提高了存贮资源的利用效率,在有限的硬件资源上,可以共用资源,通过相互关联的业务表和标签表设置标签构成转发路径,以转发不同类型的业务,扩展了所支持的业务种类,提高软件的复用性和稳定性。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
为了便于理解本发明的技术方案,首先对下列名词作解释:
SR:Segment Routing,简写为SR,段路由,SR架构基于源路由。
MPLS:Multi-Protocol Label Switching,简写为MPLS,多协议标签交换,MPLS是新一代的IP高速骨干网络交换标准,MPLS是利用标记(label)进行数据转发的,当分组进入网络时,要为其分配固定长度MPLS标签,并将MPLS标签与分组封装在一起,在整个转发过程中,交换节点仅根据MPLS标签进行转发。其中,每个MPLS标签占用32bit(4个字节)。
SR-MPLS:Segment Routing MPLS,简写为SR-MPLS,指的是基于MPLS转发面的SR,采用MPLS标签进行数据的转发。
SRv6:Segment Routing IPv6,简写为SRv6,指的是基于IPv6转发面的SR,采用路由扩展头SRH(Segment Routing Header,简写为SRH)进行数据的转发。
EtherType:以太帧类型,在以太网链路上的数据包称作以太帧,通过EtherType可以区分以太网帧数据类型字段。例如,一个0x86dd的以太帧类型说明这个帧包含的是IPv6帧,一个0x8847的以太帧类型说明这个帧包含的是MPLS帧,通过以太帧类型可以确定报文的业务类型。
实施例1:
本实施例提供一种数据包转发方法,所述数据包转发方法应用于网络处理器,所述网络处理器在其存贮空间上建立多个业务表和多个标签表。
参阅图1,本实施例的数据包转发方法包括如下步骤:
步骤101:获取目的业务表,在所述目的业务表中设置与数据包相匹配的标签类型和标签层数,将所述数据包与所述目的业务表建立第一关联。
其中,目的业务表指的是空闲可用的业务表。
其中,在业务表中可以设置该业务表所对应的数据包的业务类型,其中,业务类型包括SR-MPLS业务和SRv6业务,不同类型的业务所适用的标签类型也有差异。针对SR-MPLS业务,标签类型为MPLS标签;针对SRv6业务,标签类型为SID标签。
以图2为例,可以通过为Type赋值,表示该业务表对应的数据包的标签类型,例如,Type=0代表标签类型为MPLS标签,Type=1代表业务类型为SID标签。
其中,每个所述业务表均具有表索引,将所述数据包与所述目的业务表的表索引建立第一关联,在后续进行数据包转发时,可以根据与数据包相关联的表索引找到相应的目的业务表。
在本实施例中,获取数据包的以太帧类型,根据所述以太帧类型确定所述数据包的业务类型,以根据所述业务类型确定所述数据包对应的标签类型。例如,一个0x86dd的以太帧类型说明这个帧包含的是IPv6帧,一个0x8847的以太帧类型说明这个帧包含的是MPLS帧,通过以太帧类型可以确定报文的业务类型。
步骤102:根据所述标签类型和所述标签层数获取多个目的标签表,在多个所述目的标签表中设置相应的标签值,并将所述目的业务表与多个所述目的标签表建立第二关联。
其中,在业务表中可以设置标签层数,根据标签表可存储的位数、标签层数和标签类型确定标签表的个数。
在可选的实施例中,每个所述标签表可以存储32bit的标签值,当业务类型为SR-MPLS业务时,标签类型为MPLS标签,每个MPLS标签占用32bit,针对SR-MPLS业务,若需要三层MPLS标签形成标签栈,则共需要三个目的标签表;当业务类型为SRv6业务时,标签类型为SID标签,每个SID标签占用128bit,每个SID标签占用四个目的标签表,针对SRv6业务,若需要将四层SID标签形成一个标签栈,则共需要十六个目的标签表。
在本实施例中,每个所述标签表均具有表索引,所述业务表设置有第一表项,所述第一表项用于设置所述业务表所指向的第一个标签表,所述标签表设置有第二表项,所述第二表项用于设置所述标签表所指向的下一个标签表。其中,所述目的业务表和多个所述标签表通过表索引建立第二关联。
在实际应用场景下,步骤102的具体实现过程如下:
根据所述标签类型和所述标签层数获取多个目的标签表,将所述目的业务表的第一表项设置为第一个目的标签表的表索引,在所述第一个目的标签表中设置相应的标签值,将所述第一个目的标签表的第二表项设置为第二个目的标签表的表索引。
在所述第二个目的标签表中设置相应的标签值,将所述第二个目的标签表的第二表项设置为下一个目的标签表的表索引,以此类推,直至完成全部标签值的设置,将最后一个目的标签表的第二表项设置为设定值,其中设定值可以为0,或者其他不等于任一表索引的值,用于表示该表为最后一个目的标签表。
步骤103:在进行数据包转发时,通过所述第一关联和所述第二关联确定所述数据包所对应的目的标签表,以得到相应的标签值,将全部的标签值封装至所述数据包中,将经过封装的数据包转发至下游设备。
在本实施例中,按照前述步骤完成标签值的设定后,在进行数据包转发时,需要结合目的业务表和目的标签表依次取出标签值,并将标签值形成标签栈,将标签栈压入到数据包中,随数据包一起转发至下游设备。
在实际应用场景下,步骤103的具体实现过程如下:
在进行数据包转发时,根据所述目的业务表的表索引确定相应的目的业务表;根据所述目的业务表的第一表项所对应的表索引,确定第一个目的标签表,取出所述第一个目的标签表的标签值;根据所述第一个目的标签表的第二表项所对应的表索引,确定第二个目的标签表,取出所述第二个目的标签表的标签值;根据所述第二个目的标签表的第二表项所对应的表索引,确定下一个目的标签表,取出所述下一个目的标签表的标签值,直至取出全部的标签值;将全部的标签值封装至所述数据包中,将经过封装的数据包转发至下游设备。
在本实施例中,多个所述业务表配套设置有第一资源管理器,多个所述标签表配套设置有第二资源管理器,根据实际使用的硬件资源,得到这业务表和标签表的最大数目MAX,分别为每个业务表和标签表设置唯一的表索引,然后通过第一资源管理器对业务表的表索引进行队列管理Queue或者FIFO(First In First Out,简写为FIFO)管理;通过第二资源管理器对标签表的表索引进行队列管理Queue或者FIFO管理。其中,队列管理指的是可以在尾部添加元素,在头部删除一个元素。
在初始状态下,业务表均处于空闲状态,业务表按照表索引的顺序排列,例如,业务表的表索引为1~N,第一资源管理器的头指针指向表索引为1的业务表,第一资源管理器的尾指针指向表索引为N的业务表。
在初始状态下,标签表均处于空闲状态,标签表按照表索引的顺序排列,例如,标签表的表索引为1~M,第二资源管理器的头指针指向表索引为1的标签表,第二资源管理器的尾指针指向表索引为M的标签表。
在本实施例中,按照表索引的顺序取表,完成依一次取表操作后,第一资源管理器的头指针往后移动,在取出多个所述目的标签表后,将所述第二资源管理器的头指针往后移动,指向没有被取出的标签表。
在实际使用中,按照表索引的顺序取表,完成依一次取表操作后,第一资源管理器的头指针往后移动,例如,当表索引为1的业务表被取出后,第一资源管理器的头指针指向表索引为2的业务表。
在实际使用中,按照表索引的顺序取表,完成依一次取表操作后,第二资源管理器的头指针往后移动,例如,当表索引为1~3的标签表被取出后,第二资源管理器的头指针指向表索引为4的标签表。
在本实施例中,所述目的业务表和所述目的标签表建立后,构成了某一类数据所需要的转发路径,该转发路径会被这一类的数据包一直使用,直到不再需要这条转发路径时,控制器把这条转发路径删除,此种情况下,需要相应的目的业务表和相应的目的标签表将设置初始化状态,以回收资源。具体实现过程为:在由所述目的业务表和所述目的标签表所构成的转发路径被删除后,将所述目的业务表和所述目的标签表重置为初始化状态,即重置为空闲可用的状态,将所述第一资源管理器的尾指针指向所述目的业务表,将所述第二资源管理器的尾指针指向所述最后一个目的标签表。
在实际使用中,回收表索引为1的业务表后,将业务表添加至表队列的尾部,第一资源管理器的尾指针往后移动,指向表索引为1的业务表。
回收表索引为1~3的标签表后,将标签表依次添加至表队列的尾部,第二资源管理器的尾指针往后移动,指向表索引为3的标签表。
在本实施例中,基于前述数据包转发方法,可以在网络处理器NP(NetworkProcessor,简写为NP)上实现SR-MPLS/SRv6资源的共用,提高了存贮资源的利用效率,在有限的硬件资源上,可以共用资源,通过相互关联的业务表和标签表设置标签构成转发路径,以转发不同类型的业务,扩展了所支持的业务种类,提高软件的复用性和稳定性。
实施例2:
下面结合图3~图5,举例说明基于业务表和标签表,设置标签值的过程、获取标签值的过程和回收被释放的表的过程。在此,以每个标签表可以存储32bit的标签值为例进行举例说明。
如图3,创建具有3层MPLS标签的SR-MPLS业务时,一层MPLS标签的标签值需要占用32bit,3层MPLS标签共需要占用3张标签表。
从第一资源管理器上取得可用的表索引id1,同时头指针移动到表索引id2的位置。从第二资源管理器上取出表索引id1、id2和id3的标签表,同时头指针移动到表索引id4的位置。
在业务表里写标签类型Type=0,标签层数Label_num=3,第一个标签表的表索引first_label_index=1。
在标签表1里填写第一层标签对应的标签值,下一个标签表的表索引next_label_index=2,在标签表2里填写第二层标签对应的标签值,下一个标签表的表索引next_label_index=3。
在标签表3里填写第三层标签对应的标签值,下一个标签表的表索引next_label_index=0。这样在网络处理器上创建了具有关联关系的转发表项,根据实际配置占用相应的存贮空间。
如图4,进行数据包转发时,首先,查找到表索引为1的业务表,网络处理器读取业务表的内容,发现Type是SR-MPLS,需要封装3层MPLS标签,并且第一个标签表的表索引是1,然后去读第一个标签表的内容,得到第一层标签值和下一个标签表的表索引为2,再去读标签表2,得到第二层标签值和下一个标签表的表索引为3,同理,继续读取标签表3,得到第三层标签值,标签表3不指向任何一个标签表,完成标签值的读取。最后对数据包做多层MPLS标签栈的封装,然后将封装后的数据包转发至下游设备。
如图5,在由业务表1和标签表1~3所构成的转发路径被删除后,删除业务表1和标签表1~3(图上为灰化处理),占用的业务表的表索引1,回收到第一资源管理器,第一资源管理器的尾指针移动到尾部id1的位置。
占用的标签表的表索引1~3回收到第二资源管理器上,第二资源管理器的尾指针移动到尾部id3的位置。
上述回收的资源可以供下次循环使用。
实施例3:
如图6,在创建4层标签的SRv6业务时,标签类型为SID标签,需要将四层SID标签形成一个标签栈,每个SID标签占用128bit,每个SID标签占用四个目的标签表,针对SRv6业务工需要十六个目的标签表。
从业务表的第一资源管理器head上取得可用的id2,同时头指针移动到id3的位置。
从标签表的第二资源管理器上取得id4~id19,同时头指针移动到id20的位置。
在业务表里写Type=1,Label_num=4,first_label_index=4。
在标签表4里填写第一层标签的最高32bit,next_label_index=5。在标签表5里填写第一层标签接下来的32bit,next_label_index=6。
在标签表6里填写第一层标签接下来的32bit,next_label_index=7。在标签表7里填写第一层标签最低32bit,next_label_index=8。
依次类推,用4个标签表来存贮一个SRv6 128bit的标签,标签表4到标签表19具有关联关系,每4个标签表的label值可以还原成一层SID标签。
如图7,进行数据包转发时,首先,查找到索引为2的业务表,网络处理器读取业务表的内容,发现Type是SRv6,需要封装4层SID标签,并且第一个标签表的位置是4,然后去读第4、5、6、7这4个标签表的内容,得到第一层SID的标签值和第二层SID的索引,再去读8、9、10、11这4标签表,得到第二层SID的标签值和第三层SID的索引,同理,获得第三SID的标签值和第四层SID的标签值,根据四层SID标签对数据包做SRH头的封装,然后将封装后的数据包转发至下游设备。
在由业务表2和标签表4~19所构成的转发路径被删除后,删除业务表2和标签表4~19,第一资源管理器和第二资源管理器回收相应的表,具体的回收过程与前述实施例类型,在此不再赘述。
实施例4:
请参阅图8,图8是本发明实施例提供的一种网络处理器的结构示意图。本实施例的网络处理器包括一个或多个处理器41以及存储器42。其中,图8中以一个处理器41为例。
处理器41和存储器42可以通过总线或者其他方式连接,图8中以通过总线连接为例。
存储器42作为一种基于数据包转发方法的非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,上述实施例的方法以及对应的程序指令。处理器41通过运行存储在存储器42中的非易失性软件程序、指令以及模块,从而执行各种功能应用以及数据处理,实现前述实施例的方法。
其中,存储器42可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器42可选包括相对于处理器41远程设置的存储器,这些远程存储器可以通过网络连接至处理器41。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
值得说明的是,上述装置和系统内的模块、单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(Read Only Memory,简写为ROM)、随机存取存储器(RandomAccessMemory,简写为RAM)、磁盘或光盘等。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。