具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例一提供的标签转发信息存储方法的流程图。如图1所示,本实施例的方法包括:
步骤11、标签转发信息存储装置判断待存储的标签信息是否为公网标签;若判断结果为是,即标签信息为公网标签,则执行步骤12;反之,执行步骤15。
步骤12,标签转发信息存储装置判断标签信息对应的待存储的第一行为是否为POP行为;若判断结果为否,则执行步骤13;反之,执行步骤14。
步骤13、标签转发信息存储装置将标签信息存储到标签转发表的公网非POP存储区域中的第一级标签下,并将第一行为对应存储到标签转发表中,并结束此次标签转发信息的存储操作。
步骤14、标签转发信息存储装置将标签信息存储到标签转发表的公网POP存储区域中的第一级标签下,并将第一行为对应存储到标签转发表中,并结束此次标签转发信息的存储操作。
步骤15、标签转发信息存储装置判断其上一跳是否支持并开启了PHP功能;如果判断结果为否,即上一跳不支持或支持但未开启PHP功能,则执行步骤16;反之,如果判断结果为是,即上一跳支持并开启了PHP功能,则执行步骤17。
其中,本实施例的标签转发信息存储装置同时也是报文转发装置,即在接收到报文时,将会根据所生成的标签转发表完成对报文的转发。其中,所述本地标签转发信息存储装置的上一跳是指在转发报文时,报文转发路径上的倒数第二跳。
步骤16、标签转发信息存储装置将标签信息存储到标签转发表的私网存储区域中的第二级标签下,并修改第一行为为第二行为后对应存储到标签转发表中,并结束此次标签转发信息的存储操作;其中,第二行为标识在根据标签信息转发报文时将报文中的栈顶标签弹出后再执行第一行为。
步骤17、标签转发信息存储装置将标签信息存储到标签转发表的私网存储区域中的第一级标签下,并将第一行为对应存储到标签转发表中,并结束此次标签转发信息的存储操作。
其中,在转发报文的过程中,如果报文所在转发路径上的倒数第二跳开启了PHP功能,则当该报文到达最后一跳时将仅携带单个标签,而该单个标签有可能是私网标签。基于此,本实施例的标签转发信息存储装置在倒数第二跳开启了PHP功能时,将待存储的标签信息存储到私网标签的第一级标签下,以保证报文被正确转发。
在本实施例中,公网非POP存储区域、私网存储区域和公网POP存储区域在标签转发表中依次相邻,即通过将标签转发表的存储区域依次划分为公网非POP存储区域、私网存储区域和公网POP存储区域分别用于存储非POP行为对应的公网标签、私网标签和POP行为对应的公网标签,通过根据标签的类型控制标签在标签转发表中的存放顺序,实现了对标签的分类存储。根据本实施例的方法形成的标签转发表尤其适用于对携带两个标签的报文进行转发。
另外,在本实施例对标签进行分类存储时,还包括在倒数第二跳不支持或支持而未开启PHP功能时对现有POP行为进行扩展,所扩展的POP行为即为第二行为。当标签信息为私网标签时,为了减少对标签转发表的查找次数,将私网标签对应的行为(即第一行为)修改为第二行为,该第二行为为将报文中的栈顶标签弹出,然后再执行原来第一行为对应的操作。例如:假设第一行为为PUSH,则第二行为为POP-PUSH,即将报文中的栈顶标签弹出后再执行PUSH操作。又例如:假设第一行为为SWAP,则第二行为为POP-PUSH,即将报文中的栈顶标签弹出后再执行SWAP。再例如:假设第一行为为POP,则第二行为为POP-POP,即将报文中的栈顶标签弹出后再执行POP。
基于上述标签转发表转发报文时,如果接收到的报文携带有两个标签,若第一个标签对应的转发信息为非POP行为时,会匹配中公网非POP存储区域中的一个标签,只需一次查找即可完成报文的转发;若第一个标签对应的转发信息为POP行为时,说明本地报文转发装置为该报文的最后一跳,则在公网非POP存储区域中不存在匹配一致的标签,继续在私网存储区域匹配第二个标签,则在标签分配正确的情况下一定可以匹配到一个标签,根据该匹配中的标签将报文中的第一级标签弹出后,根据第二个标签对应的原始行为对报文进行转发处理,即通过一次查找完成对报文的转发。
本实施例的标签转发信息存储方法,通过依次在公网非POP存储区域、私网存储区域和公网POP存储区域中查找,在倒数第二跳未开启PHP功能时,如果匹配中私网存储区域,则根据匹配中的标签对应的第二行为,先将报文中的栈顶标签弹出再根据匹配中的标签对应的第一行为可以直接将报文转发出去,只需要查找一次标签转发表,减少了查找标签转发表的次数。
本实施例的标签转发信息存储方法,通过将标签转发表的存储空间依次划分为公网非POP存储区域、私网存储区域和公网POP存储区域,根据标签的类型将非POP行为对应的公网标签、私网标签和POP行为对应的公网标签分别存储于公网非POP存储区域、私网存储区域和公网POP存储区域,在基于标签转发表转发报文时,解决了在倒数第二跳未开启PHP功能时最后一跳转发携带两个标签的报文时需要查找两次标签转发表的问题,减少了报文转发时的延迟,提高了转发报文的效率。
图2A为本发明实施例二提供的标签转发信息存储方法的流程图。本实施例基于实施例一实现,相同之处不再赘述。如图2A所示,本实施例的方法包括:
步骤21、标签转发信息存储装置进行初始化,将标签转发表平均划分为公网非POP存储区域、私网存储区域和公网POP存储区域。
具体的,标签转发信息存储装置将存储标签转发表的存储空间划分为公网非POP存储区域、私网存储区域和公网POP存储区域。由于标签转发表中的标签信息通常存放在TCAM中,而转发信息通常存储在ASIC上,而在基于标签转发表转发报文时,主要是对标签信息进行查找操作,即在TCAM中查找到与报文携带的标签一致的标签,因此,更为具体的说,本实施例的标签转发信息存储装置主要是将TCAM划分为公网非POP存储区域、私网存储区域和公网POP存储区域(如图2B所示),以控制标签信息的存放顺序,而标签信息对应的转发信息将会对应的存储到ASIC上。
其中,除了对TCAM进行均匀划分外,也可以根据不同类型标签信息的数量将TCAM划分为大小不等的存储空间。例如:如果本地标签转发信息存储装置所定义的私网标签数量较多,则可以将私网存储区域划分的更大。又例如:如果本地标签转发信息存储装置所定义的非POP行为的公网标签较多,则可以将公网非POP存储区域划分的更大。
另外,将TCAM划分为三类存储空间并不是唯一的。本实施例的划分方式主要是针对接收到携带有两个标签的报文而划分的,即在本实施例中TCAM仅利用多级标签中的两级进行存储,其他级别的标签均被无效掉,即不使用。如果接收到的报文携带三个标签,则TCAM将利用多级标签中的三级标签进行存储,并将TCAM划分为四类存储空间,依次为公网非POP存储区域、用于存储内层私网标签的内层私网存储区域、用于存储外层私网标签的外层私网存储区域和公网POP存储区域。基于上述原理,可以将TCAM划分为更多个存储区域,用于解决携带更多个标签的报文的转发效率问题。
其中,标签信息在TCAM的各个存储区域中是以表项的形式进行存储的,每条表项对应多级标签。在本实施例中,以每条表项对应两级标签为例,分别为第一级标签和第二级标签,如果TCAM支持更多级标签,则其他级别的标签全被掩掉。
步骤22、由MPLS协议或者用户手工配置触发标签转发信息存储过程。
步骤23、标签转发信息存储装置判断待存储标签转发信息中的标签信息是否为公网标签;如果判断结果为是,则执行步骤24;反之,执行步骤31。
其中,存储到TCAM中的标签信息是由本地标签转发信息存储装置分配的,所以标签转发信息存储装置可以区分所要存储的标签信息是公网标签还是私网标签。
其中,公网标签是指在MPLS网络(即公网)中,负责在公网内转发MPLS报文的标签;而私网标签主要用于标识某个私有网络中的处理操作,私网标签在MPLS网络的转发过程中不会发生变化,同时也不会对MPLS转发产生任何影响。
步骤24、标签转发信息存储装置判断待存储的标签转发信息中转发信息中的行为是否为POP行为;若判断结果为否,则执行步骤25,反之,执行步骤28。
步骤25、标签转发信息存储装置判断公网非POP存储区域是否存在空闲区域;若判断结果为否,即公网非POP存储区域不存在空闲区域,则执行步骤26,若判断结果为是,则执行步骤27。
其中,空闲区域是指可用于存储标签信息的表项。
步骤26、标签转发信息存储装置根据网存储区域和公网POP存储区域对公网非POP存储区域进行扩展,并执行步骤27。
步骤26的一种优选实施方式包括:步骤261、标签转发信息存储装置判断私网存储区域是否存在空闲区域;若判断结果为否,则执行步骤262;若判断结果为是,则执行步骤263。
步骤262、标签转发信息存储装置根据公网POP存储区域对公网非POP存储区域进行扩展。
在本实施例中,假设整个TCAM足够存储本地标签转发信息存储装置所定义的所有公网标签和私网标签,因此,当公网非POP存储区域和私网存储区域没有空闲区域时,公网POP存储区域一定存在空闲区域。
以图2B所示为例,本实施例提供一种由公网POP存储区域扩展公网非POP存储区域的实施方式:如果公网POP存储区域的第一条表项空闲,则将私网存储区域的第一条表项中的信息移至原来公网POP存储区域的第一条表项(即私网存储区域扩展后的最后一条表项)中,并将原来私网存储区域的第一条表项扩展为公网非POP存储区域的一条表项。如果公网POP存储区域的第一条表项非空闲,则将公网POP存储区域的第一条表项中的信息移至公网POP存储区域中的空闲表项中,然后将私网存储区域的第一条表项中的信息移至原来公网POP存储区域的第一条表项(即私网存储区域扩展后的最后一条表项)中,并将原来私网存储区域的第一条表项扩展为公网非POP存储区域的一条表项。经扩展后,公网非POP存储区域中的表项增加1,而公网POP存储区域中的表项减去1。
步骤263、标签转发信息存储装置根据私网存储区域对公网非POP存储区域进行扩展。
以图2B所示为例,本实施例提供一种通过私网存储区域扩展公网非POP存储区域的实施方式:如果私网存储区域的第一条表项空闲,则直接将该第一条表项扩展为公网非POP存储区域的表项即可。如果私网存储区域的第一条表项非空闲,则将私网存储区域的第一条表项中的信息移至私网存储区域的其他空闲表项中,将原来私网存储区域的第一条表项扩展为公网非POP存储区域的一条表项。此时,公网非POP存储区域中的表项增加1,私网存储区域中的表项减少1。
其中,步骤26的另一种实施方式也可以是先判断公网POP存储区域是否存在空闲区域;如果判断结果为公网POP存储区域不存在空闲区域,则根据私网存储区域对公网非POP存储区域进行扩展;反之,根据公网POP存储区域对公网非POP存储区域进行扩展。其中,由私网存储区域或公网POP存储区域扩展公网非POP存储区域的具体过程可参见上述优选实施方式中的描述。
步骤27、标签转发信息存储装置将标签信息存储到公网非POP存储区域中的第一级标签下,并将行为对应存储到标签转发表中,并结束此次存储操作。
具体的,如果由步骤26转至步骤27,则此时对应的公网非POP存储区域是扩展后的公网非POP存储区域,则将标签信息存储到扩展后的公网非POP存储区域中的优选实施方式为将标签信息存储到扩展来的表项的第一级标签下,同时将行为和行为所需的其他信息对应存储到ASIC上的标签转发表中。
如果是由步骤25转至步骤27,则此时对应的公网非POP存储区域没有经过扩展,则可以直接将标签信息存储到公网非POP存储区域中的空闲表项中。
其中,上述操作具体用于将标签信息存储到TCAM的公网非POP存储区域,而将转发信息存储到对应的ASIC上。
步骤28、标签转发信息存储装置判断公网POP存储区域是否存在空闲区域;若判断结果为否,即公网POP存储区域不存在空闲区域,则执行步骤29;若判断结果为是,则执行步骤30。
步骤29、标签转发信息存储装置根据私网存储区域和公网非POP存储区域对公网POP存储区域进行扩展,并执行步骤30。
步骤29的一种优选实施方式包括:步骤291、标签转发信息存储装置判断私网存储区域是否存在空闲区域;若判断结果为否,则执行步骤292;若判断结果为是,则执行步骤293。
步骤292、标签转发信息存储装置根据公网非POP存储区域对公网POP存储区域进行扩展。
当公网POP存储区域和私网存储区域均不存在空闲区域时,公网非POP存储区域中一定存在空闲区域。
以图2B所示为例,本实施例提供一种根据公网非POP存储区域扩展公网POP存储区域的实施方式:如果公网非POP存储区域与私网存储区域相邻的最后一条表项空闲,则将私网存储区域中的最后一条表项中的信息移至原来公网非POP存储区域的最后一条表项,将原来私网存储区域中的最后一条表项扩展为公网POP存储区域的表项。如果公网非POP存储区域的最后一条表项非空闲,则将该最后一条表项中的信息移至公网非POP存储区域的其他空闲表项中,然后将私网存储区域中的最后一条表项中的信息移至原来公网非POP存储区域的最后一条表项,将原来私网存储区域中的最后一条表项扩展为公网POP存储区域的表项。经扩展后,公网非POP存储区域的表项减少1,公网POP存储区域的表项增加1。
步骤293、标签转发信息存储装置根据私网存储区域对公网POP存储区域进行扩展。
以图2B为例,本实施例提供一种根据私网存储区域扩展公网POP存储区域的实施方式:如果私网存储区域的最后一条表项空闲,则直接将该最后一条表项扩展为公网POP存储区域的表项。如果私网存储区域的最后一条表项非空闲,将该最后一条表项中的信息移至私网存储区域的其他空闲表项中,将该最后一条表项扩展为公网POP存储区域的表项。经过扩展后,公网POP存储区域的表项增加1,私网存储区域的表项减少1。
其中,步骤29的另一种实施方式也可以是先判断公网非POP存储区域是否存在空闲区域;如果判断结果为公网非POP存储区域不存在空闲区域,则根据私网存储区域对公网POP存储区域进行扩展;反之,根据公网非POP存储区域对公网POP存储区域进行扩展。其中,由私网存储区域或公网非POP存储区域扩展公网POP存储区域的具体过程可参见上述优选实施方式中的描述。
步骤30、标签转发信息存储装将标签信息存储到公网POP存储区域中的第一级标签下,并将行为对应存储到标签转发表中,并结束此次存储操作。
具体的,如果由步骤29转至步骤30,则此时对应的公网POP存储区域是扩展后的公网POP存储区域,则将标签信息存储到扩展后的公网POP存储区域中的优选实施方式为将标签信息存储到扩展来的表项的第一级标签下,同时将行为和行为所需的其他信息对应存储到ASIC上的标签转发表中。
如果是由步骤28转至步骤30,则此时对应的公网POP存储区域没有经过扩展,则可以直接将标签信息存储到公网POP存储区域中的空闲表项中。
其中,上述操作具体用于将标签信息存储到TCAM的公网非POP存储区域,而将转发信息存储到对应的ASIC上。
步骤31、标签转发信息存储装置判断其上一跳是否支持并开启了PHP功能;如果判断结果为否,则执行步骤32;如果判断结果为是,则执行步骤35。
在报文转发过程中,本实施例的标签转发信息存储装置也是报文所在标记交换路径(Label Switching Path;简称为:LSP)上的一跳,负责转发报文。标签转发信息存储装置的上一跳也是报文转发过程中报文所在LSP上的一跳,也负责转发报文。在本实施例中,上一跳是指报文所在LSP上的倒数第二跳。其中,倒数第二跳不支持PHP功能,或者倒数第二跳支持PHP功能但未开启PHP功能,均被判断为否。而只有倒数第二跳支持并开启了PHP功能时,判断结果才为是。
标签转发信息存储装置根据标签分发协议(Label Distribute Protocol;简称为:LDP)进行标签分发,在该过程中可以获知倒数第二跳是否支持并开启了PHP功能。具体的,在进行LDP交互时使用隐含标签值为3的标签通告倒数第二跳开启PHP功能,即如果倒数第二跳判断出SWAP的标签为3,则将会转换行为为PHP行为,即开启PHP功能;反之则不开启PHP功能。
步骤32、标签转发信息存储装置判断私网存储区域是否存在空闲区域;若判断结果为否,即私网存储区域不存在空闲区域,则执行步骤33,若判断结果为是,则执行步骤34。
步骤33、标签转发信息存储装置根据公网POP存储区域和公网非POP存储区域对私网存储区域进行扩展,并执行步骤34。
步骤33的一种优选实施方式包括:步骤331、标签转发信息存储装置判断公网POP存储区域是否存在空闲区域;若判断结果为否,则执行步骤332,若判断结果为是,则执行步骤333。
步骤332、标签转发信息存储装置根据公网非POP存储区域对私网存储区域进行扩展。
当公网POP存储区域和私网存储区域均不存在空闲区域时,公网非POP存储区域中一定存在空闲区域。
以图2B所示为例,本实施例提供一种根据公网非POP存储区域扩展私网存储区域的实施方式:如果公网非POP存储区域与私网存储区域相邻的最后一条表项空闲,则直接将公网非POP存储区域的最后一条表项扩展为私网存储区域的表项。如果公网非POP存储区域的最后一条表项非空闲,则将该最后一条表项中的信息移至公网非POP存储区域的其他空闲表项中,然后将公网非POP存储区域中的最后一条表项扩展为私网存储区域的表项。经扩展后,公网非POP存储区域的表项减少1,私网存储区域的表项增加1。
步骤333、标签转发信息存储装置根据公网POP存储区域对私网存储区域进行扩展,并执行步骤40。
同理,当私网存储区域和公网非POP存储区域均不存在空闲区域时,公网POP存储区域中一定存在空闲区域。
以图2B所示为例,本实施例提供一种由公网POP存储区域扩展私网存储区域的实施方式:如果公网POP存储区域的第一条表项空闲,则直接将公网POP存储区域的第一条表项扩展为私网存储区域的一条表项。如果公网POP存储区域的第一条表项非空闲,则将公网POP存储区域的第一条表项中的信息移至公网POP存储区域中的空闲表项中,然后将原来公网POP存储区域的第一条表项扩展为私网存储区域的一条表项。经扩展后,公网POP存储区域中的表项减少1,私网存储区域中的表项增加1。
其中,步骤33的另一种实施方式也可以是先判断公网非POP存储区域是否存在空闲区域;如果判断结果为公网非POP存储区域不存在空闲区域,则根据公网POP存储区域对私网存储区域进行扩展;反之,根据公网POP存储区域对私网存储区域进行扩展。其中,由公网POP存储区域或公网非POP存储区域扩展私网存储区域的具体过程可参见上述优选实施方式中的描述。
步骤34、标签转发信息存储装置将标签信息存储到私网存储区域中的第二级标签下,并修改标签信息对应的行为为POP后在执行原行为后对应存储到标签转发表中,结束此次标签转发信息存储操作。
具体的,如果由步骤33转至步骤34,则此时对应的私网存储区域是扩展后的私网存储区域,则将标签信息存储到扩展后的私网存储区域中的优选实施方式为将标签信息存储到扩展来的表项的第二级标签下。此时,基于私网存储区域转发报文时,报文中的第一个标签将被掩掉,而直接根据第二个标签查找,因此,本实施例相应修改报文中的第二个标签(即存储到私网存储区域中的第二级标签下的标签信息)对应的行为为先执行POP再执行原行为,可以使报文中的第一个标签被弹出,然后根据第二个标签对应的行为转发该报文,减少了转发携带两个标签的报文时查找标签转发表的次数,减少了转发时延,可以提高报文的转发效率。
其中,在将原行为修改为先POP再执行原行为后,将修改后的行为以及所需的其他信息对应存储到ASIC上的标签转发表中。
如果是由步骤32转至步骤34,则此时对应的私网存储区域没有经过扩展,则可以直接将标签信息存储到私网存储区域中的空闲表项中。
其中,上述操作具体用于将标签信息存储到TCAM的私网存储区域,而将转发信息存储到对应的ASIC上。
步骤35、标签转发信息存储装置将标签信息存储到私网存储区域中的第一级标签下,并将行为对应存储到标签转发表中,结束此次标签转发信息存储操作。
对于携带两个标签的MPLS报文,若倒数第二跳开启了PHP功能,由于在倒数第二跳将MPLS报文的栈顶标签弹出了,所以到达最后一跳时MPLS报文中就只剩下一个标签(也就是栈顶标签),因此,只关心栈顶标签,所以,在该情况下需要将私网标签存储到第一级标签下,以保证报文能够成功被处理。
在该步骤35中,如果私网存储区域没有空闲区域,则同样需要根据公网POP存储区域或者公网非POP存储区域对私网存储区域进行扩展,然后优选的将待存储的标签信息存储到扩展来的空闲表项的第一级标签下。其中,对私网存储区域进行扩展的步骤可参见步骤33,在此不再赘述。
在此说明,上述各步骤中对存储区域进行扩展的方式仅为一种优选实施方式,并不限于此。各种可保证扩展后的公网非POP存储区域、私网存储区域和公网POP存储区域仍为依次相邻的扩展存储区域的实施方式均适用于本实施例,在各种扩展存储区域的实施方式中,移动表项的数量越少的实施方式的扩展效果越好。
本实施例在保证公网非POP存储区域、私网存储区域和公网POP存储区域仍然依次相邻的基础上,通过对各存储区域进行扩展,可以使各存储区域得到灵活使用,提高了TCAM的使用效率。
本实施例的标签转发信息存储方法,在倒数第二跳未开启PHP功能时,将非POP行为对应的公网标签、私网标签和POP行为对应的公网标签依次存放在标签转发表中,使得在接收到MPLS报文时按照上述顺序查找,如果MPLS报文只是进行公网的SWAP和PUSH,则只关心栈顶标签,可以在公网非POP存储区域即可保证MPLS报文得到处理;如果MPLS报文需要进行POP后再查找标签转发表进行转发时(假设倒数第二跳未开启PHP),在本实施例的私网存储区域即可保证一次查找匹配中,使MPLS报文得到正确处理,由此可见,本实施例可以使携带两个标签的MPLS报文在前面两个区域优先得到处理,可以减少查找标签转发表的次数。
其中,由于标签具有本地意义,也就是说MPLS报文可能携带多个相同的标签。例如:栈顶标签为SWAP或PUSH操作的MPLS报文所携带的第二个标签由于并非本地分配,所以可能与本地分配的栈顶标签SWAP或PUSH相同,这在MPLS协议中是允许的。为此,本实施例通过将非POP行为对应的公网标签存放在私网标签前面,可以避免出现进行公网的SWAP和PUSH操作的MPLS报文中的第二个标签刚好匹配中私网标签的情况,提高转发报文的成功率。
图3A为本发明实施例三提供的报文转发方法的流程图。如图3A所示,本实施例的方法包括:
步骤51、判断接收到的报文所在LSP上的倒数第二跳是否支持并开启了PHP功能;如果判断结果为否,即倒数第二跳不支持或支持而未开启PHP功能,执行步骤52;如果判断结果为是,执行步骤55。
其中,本实施例的报文转发方法基于上述实施例一或二提供的标签转发表实现,即在本实施例中,标签转发表依次分为三个存储区域,分别为:公网非POP存储区域、私网存储区域和公网POP存储区域,并适用于对携带一个或两个标签的MPLS报文进行转发。其中,公网非POP存储区域存储有除POP行为对应的公网标签之外的其他公网标签,且各标签存储在该存储区域中各表项的第一级标签下。私网存储区域存储私网标签。POP行为对应的公网标签存储在标签转发表的公网POP存储区域中,且存储在该存储区域中各表项的第一级标签下。
在上述实施例一或二中,标签转发信息存储装置具体根据报文所在LSP上的倒数第二跳是否支持并开启PHP功能而生成不同的标签转发表。如果报文所在LSP上的倒数第二跳支持并开启了PHP功能,则标签转发表中私网存储区域中各标签存储在各表项对应的第一级标签下;如果报文所在LSP上的倒数第二跳不支持或支持而未开启PHP功能时,私网存储区域中各标签存储在该存储区域中各表项的第二级标签下,并且需要相应的各标签所对应的原行为为POP后再执行原行为。
基于上述,报文转发装置可以事先获知报文所在LSP的倒数第二跳是否支持并开启了PHP功能。另外,报文转发装置也可以根据标签转发表的存储形式来获知报文所在LSP的倒数第二跳是否支持并开启了PHP功能。
当判断结果为倒数第二跳不支持或支持而未开启PHP功能,则执行步骤52-步骤54;反之,执行步骤55-步骤58。
步骤52、获取接收到的报文中的第一个标签,并查找标签转发表中的公网非POP存储区域以判断第一个标签是否存在公网非POP存储区域中。如果判断结果为否,执行步骤53,如果判断结果为是,执行步骤54。
具体的,当报文转发装置接收到一个MPLS报文时,首先会根据协议规定对MPLS报文进行解析,解析MPLS报文中的MPLS封装字段获取标签的数目以及每个标签信息的具体值。
如图3B所示,一个MPLS报文主要由以太网封装字段、MPLS封装字段和协议数据单元(Protocol Data Unit;简称为:PDU)字段三部分构成。以太网封装字段包括目的地址、源地址、以太网类型等信息;MPLS封装字段包括所封装的标签的信息,如果MPLS报文包括多个标签,则多个标签在MPLS封装字段中将以堆栈的方式进行存放和使用;PDU字段主要为用户的数据,可以是IP报文也可以是另一个MPLS报文。其中,每个标签包括:标签值,长度为20bit,是进行标签转发查找时的依据;扩展字段(Exp):长度为3bit,用于携带服务质量(Quality of Service;简称为:QoS)属性;栈底标志S,长度为1bit,如果有多个标签时,处于栈底的标签的栈底标志S位置“1”,其它标签的栈底标志S为“0”,当只有一个标签时该栈底标志S位置“1”。
具体的,报文转发装置可以通过其ASIC对MPLS报文的MPLS封装字段中的栈底标志S进行解析,即可获取MPLS报文携带的标签个数。
在本实施例中,以接收到的报文最多携带两个标签为例进行说明。则在在倒数第二跳不支持或支持而未开启PHP功能时,首先根据报文中的第一个标签判断是否需要执行公网的非POP行为,如果是,则执行步骤54,即根据公网非POP行为对报文进行处理后转发;反之,执行步骤53。
步骤53、获取报文中的第二个标签,并根据第二个标签查找标签转发表中的私网存储区域以获取第二个标签对应的转发信息,根据转发信息弹出报文中的第一个标签后对报文进行转发,结束此次报文转发操作。
其中,如果第一个标签未在公网非POP存储区域匹配到一致的标签,说明第一个标签对应的行为为POP行为,说明本实施例的报文转发装置为该报文所在LSP上的最后一跳;又由于该报文所在LSP上的倒数第二跳未开启PHP功能,则说明该报文需要先执行POP操作弹出第一个标签之后根据第二个标签执行转发操作。在本实施例中,报文转发装置直接获取MPLS报文中的第二个标签,并在私网存储区域中的各个表项的第二级标签下查找,获取第二个标签对应的转发信息,即在私网存储区域中与第二个标签匹配一致的标签对应转发信息,并基于该转发信息对报文进行转发。其中,私网存储区域中的标签对应的行为是由各标签原来的行为进行修改后得到的,具体将原行为修改为先弹出报文的栈顶标签后再执行原行为。因此,在本实施例中,在找到第二个标签对应的转发信息时,直接将报文的栈顶标签弹出,再对报文进行处理后转发,使报文在私网存储区域中优先得到了处理,不需要再次查找标签转发表,减少了查找标签转发表的次数。
在此说明,如果标签分配正确,当报文携带两个标签且第一个标签为POP操作时,且在倒数第二跳未开启PHP功能时,其第二个标签一定存在于私网存储区域中。
步骤54、根据第一个标签对应的转发信息转发该报文,结束此次报文转发操作。
如果第一个标签存在公网非POP存储区域,说明本实施例的报文转发装置并非该报文所在LSP上的最后一跳,也说明该报文需要进行公网非POP操作,例如可能是SWAP或PUSH操作,则报文转发装置直接根据第一个标签对应的转发信息对报文进行处理后转发,使报文在公网非POP存储区域得到优先处理,保证只查找一次标签转发表就完成报文的转发。例如:如果第一个标签对应的行为为SWAP,则将MPLS报文的栈顶标签交换后通过相应端口进行转发。
步骤55、获取报文的第一个标签,并查找公网非POP存储区域以判断第一个标签是否存在公网非POP存储区域中;如果判断结果为否,则执行步骤56;如果判断结果为是,则执行步骤58。
其中,对于一个报文而言,本实施例的报文转发装置要么是报文所在LSP上的最后一跳,要么不是报文所在LSP上的最后一跳。在本实施例步骤55-步骤58描述的操作流程的前提条件为:报文所在LSP上的倒数第二跳支持并开启了PHP功能,因此,如果本实施例的报文转发装置不是报文所在LSP上的最后一跳,则只需要关心栈顶标签即可;如果本实施例的报文转发装置是报文所在LSP上的最后一跳,则其上一跳即倒数第二跳会将报文中原来的栈顶标签弹出,从而使本实施例的报文转发装置也只需要关心报文的栈顶标签。
基于上述,报文转发装置获取报文的第一个标签(即当前报文的栈顶标签),根据标签转发表中各存储区域的顺序,首先将第一个标签在公网非POP存储区域中各表项的第一级标签中进行查找,判断第一个标签是否对应于公网非POP行为。
步骤56、根据第一个标签查找私网存储区域以判断第一个标签是否存在私网存储区域中;如果判断结果为否,则执行步骤57;如果判断结果为是,则执行步骤58。
如果在步骤55中未在公网非POP存储区域中查找到与第一个标签一致的标签,则继续查找私网存储区域中各表项的第一级标签,判断第一个标签是否为私网标签。
步骤57、根据第一个标签查找公网POP存储区域以获取第一个标签对应的转发信息,并根据转发信息弹出第一个标签后转发报文,结束此次报文转发操作。
如果在步骤56中未在私网存储区域中查找到与第一个标签一致的标签,在标签分配正确的情况下,第一个标签一定存在于公网POP存储区域中,对应于公网POP行为。在该步骤57中获取第一个标签对应的POP行为,将报文中的第一个标签弹出后查找IP路由表,以根据IP路由表将该报文转发出去。
步骤58、根据第一个标签对应的转发信息转发报文,结束此次报文转发操作。
如果在步骤56中在私网存储区域中找到了与第一个标签一致的标签,则获取第一个标签对应的转发信息,并根据转发信息对报文进行处理后转发出去;例如可能是将报文的标签交换为新的标签之后转发,也可能是在报文中压入新的标签后转发。
如果在步骤55中在公网非POP存储区域中找到了与第一个标签一致的标签,则获取第一个标签对应的公网非POP行为,对报文进行处理后转发出去。如果获取的公网非POP行为为SWAP操作,则将报文的标签交换为新的标签之后将报文转发出去;如果获取的公网非POP行为为PUSH操作,则在报文中压入新的标签后将报文转发出去。
本实施例的报文转发方法,基于依次存储非POP行为对应的公网标签、私网标签和POP行为对应的公网标签标签转发表对MPLS报文进行转发。在报文所在LSP上的倒数第二跳不支持或支持而未开启PHP功能时,基于分类存储的标签转发表以及所存储的经过相应修改的私网标签对应的行为,对携带两个标签的报文进行转发,可以使报文在公网非POP存储区域和私网存储区域优先得到处理,减少了查找标签转发表的次数,减少了报文转发的时延,提高了报文的转发效率;在报文所在LSP上的倒数第二跳开启PHP功能时,可以基于公网非POP存储区域、私网存储区域和公网POP存储区域保证了报文能够被正确转发。
在此说明,上述实施例提供的标签转发信息存储方法与报文转发方法相结合,以下实施例将进一步通过实际示例对存储方法和转发方法的结合进行详细说明。
本实施例以虚拟私有网(Virtual Private Network;简称为:VPN)的最基本应用为例来说明,且在本实施例中以任意一台网络设备为例。假设该网络设备上分配有私网标签:100(POP),200(POP),300(SWAP 500),400(POP)。这些私网标签在公有网络中不可见,用于标示私网网络,实现VPN的业务功能。同时,最后一跳还分配有公网标签:30(SWAP 70),40(PUSH80),50(POP),60(POP)。这些公网标签用于完成报文在公有网中进行转发,与VPN的业务功能无关。
其中,现有技术中标签转发表的存储方式如表1所示。在倒数第二跳未开启PHP功能的情况下,根据本发明实施例一或二对标签信息进行存储得到的标签转发表如表2所示。
表2
在标签分配没有错误的情况下,基于上述表2本实施例网络设备进行报文转发的情况包括以下几种:
若接收到的MPLS报文的栈顶标签Label1为30,则第一次查找,首先查找公网非POP存储区域,获取公网标签30对应的转发信息,则将栈顶标签Lable1交换为70,进行转发。
若接收到的MPLS报文的栈顶标签Label1为40,则第一次查找,首先查找公网非POP存储区域,获取公网标签40对应的转发信息,则将压入标签80,进行转发。
若接收到的MPLS报文的栈顶标签为50,第二层标签为300,说明此时网络设备是该报文所在LSP上的最后一跳,又由于假设倒数第二跳未开启PHP功能,则第一次查找,首先查找公网非POP存储区域,未查找到标签50,继续根据报文中的第二层标签查找私网存储区域,此时匹配中第二层标签300,则获取私网标签300对应的转发信息,将MPLS报文的栈顶标签50弹出,然后将标签300交换为标签500后进行转发。
在倒数第二跳开启PHP功能的情况下,根据本发明实施例一或二对标签信息进行存储得到的标签转发表如表3所示。
表3
在标签分配没有错误的情况下,基于上述表3本实施例网络设备对接收到的报文进行转发时,将只关心栈顶标签,则转发报文的情况包括以下几种:
若接收到的MPLS报文的栈顶标签Label1为30,则第一次查找,首先查找公网非POP存储区域,获取公网标签30对应的转发信息,则将栈顶标签Lable1交换为70,进行转发。
若接收到的MPLS报文的栈顶标签为300,则第一次查找,首先查找公网非POP存储区域,未查找到标签300,继续查找私网存储区域,获取私网标签300对应的转发信息,将标签300交换为标签500后进行转发。
若接收到的MPLS报文的栈顶标签Label1为50,则第一次查找,首先查找公网非POP存储区域,未查找到标签50,继续在私网存储区域中进行查找,未查找到标签50,则继续查找公网POP存储区域,查找到公网标签50,获取公网标签50对应的转发信息,将MPLS报文的栈顶标签50弹出后查找IP路由表将报文转发出去。
由上述可见,在倒数第二跳未不支持或未开启PHP功能的条件下转发携带两个标签的报文时,本实施例通过私网存储区域和修改后的转发信息使得查找一次标签转发表即可完成报文的转发操作,减少了查找标签转发表的次数,提高报文的转发效率。在倒数第二跳开启PHP功能的条件下,本实施例的分类存储标签的标签转发表也能够正确转发报文。
图4为本发明实施例四提供的报文转发信息存储装置的结构示意图。本实施例的存储装置可以为MPLS网络中任何一台网络设备。如图4所示,本实施例的存储装置包括:第一判断模块61、第一存储模块62、第二存储模块63、第二判断模块64和第三存储模块65。
第一判断模块61,用于在待存储的标签信息为公网标签时,判断标签信息对应的待存储的第一行为是否为POP行为;第一存储模块62,用于在第一判断模块61的判断结果为否时,将标签转发信息存储到标签转发表的公网非POP存储区域中的第一级标签下,并将第一行为对应存储到标签转发表中;第二存储模块63,用于在第一判断模块61的判断结果为是时,将标签信息存储到标签转发表的公网POP存储区域中的第一级标签下,并将第一行为对应存储到标签转发表中;第二判断模块64,用于在待存储的标签信息为私网标签时,判断标签转发信息存储装置的上一跳是否支持并开启了PHP功能;第三存储模块65,用于在第二判断模块64的判断结果为标签转发信息存储装置的上一跳不支持或支持而未开启PHP功能时,将标签信息存储到标签转发表的私网存储区域中的第二级标签下,并修改第一行为为第二行为后对应存储到标签转发表中,第二行为标识在根据标签信息转发报文时将报文中的栈顶标签弹出后再执行第一行为。
其中,本实施例的装置还可以包括标签类型判断模块66,用于判断待存储的标签信息是否为公网标签,并将判断结果发送给第一判断模块61和第二判断模块64。其中,由于标签信息是由本地标签转发信息存储装置分配的,因此,标签类型判断模块66可以判断出待存储的标签是私网标签还是公网标签。
在本实施例中,公网非POP存储区域、私网存储区域和公网POP存储区域在标签转发表中依次相邻。
本实施例标签转发信息存储装置的各功能模块可用于执行上述方法实施例一和二提供的标签转发信息存储方法的流程,其具体工作原理不再赘述,详见方法实施例的描述。
本实施例的标签转发信息存储装置,通过将标签转发表的存储空间依次划分为公网非POP存储区域、私网存储区域和公网POP存储区域,根据标签的类型将非POP行为对应的公网标签、私网标签和POP行为对应的公网标签分别存储于公网非POP存储区域、私网存储区域和公网POP存储区域,在倒数第二跳不支持或支持而未开启PHP功能的条件下,进一步修改私网存储区域中各标签对应的转发信息为POP后再转发,使得在基于标签转发表转发报文时,解决了报文所在LSP上的倒数第二跳不支持或支持而未开启PHP功能时报文所在LSP上最后一跳转发携带两个标签的报文时需要查找两次标签转发表的问题,减少了报文转发时的延迟,提高了转发报文的效率。
图5为本发明实施例五提供的标签转发信息存储装置的结构示意图。本实施例基于实施例四实现,如图5所示,本实施例的存储装置还包括:划分模块71。
划分模块71,用于在标签转发信息存储装置执行存储标签信息的操作之前,将标签转发表平均划分为公网非POP存储区域、私网存储区域和公网POP存储区域。其中,划分模块71并不限于进行平均划分,也可以根据本地标签转发信息存储装置所定义的公网标签和私网标签的数量进行适应性划分。例如:如果私网标签的数量较多,则可以将私网存储区域划分的更大些。
由于标签转发表中的标签信息通常存储在TCAM上,因此,本实施例的划分模块71主要用于将TCAM划分为不同的存储区域。
进一步,本实施例的标签转发信息存储装置还包括:第四存储模块72,用于在第二判断模块64的判断结果为标签转发信息存储装置的上一跳支持并开启了PHP功能时,将标签信息存储到标签转发表的私网存储区域中的第一级标签下,并将第一行为对应存储到标签转发表中。第四存储模块72的操作原理可参见实施例二中步骤35的描述,在此不再赘述。
进一步,本实施例中第一存储模块62包括:第一判断单元621、第一扩展存储单元623和第一存储单元625。
具体的,第一判断单元621,用于在第一判断模块61的判断结果为否时,判断公网非POP存储区域是否存在空闲区域;第一扩展存储单元623,用于在第一判断单元621的判断结果为否时,根据私网存储区域和公网POP存储区域对公网非POP存储区域进行扩展,并将标签信息存储到标签转发表的扩展后的公网非POP存储区域中的第一级标签下,并将第一行为对应存储到标签转发表中;第一存储单元625,用于在第一判断单元621的判断结果为是时,直接将标签信息存储到标签转发表的公网非POP存储区域中的第一级标签下,并将第一行为对应存储到标签转发表中。第一扩展存储单元623对公网非POP存储区域进行扩展的具体方式可参见方法实施例二中的步骤26。
再进一步,本实施例中第二存储模块63包括:第二判断单元631、第二扩展存储单元633和第二存储单元635。
具体的,第二判断单元631,用于在第一判断模块61的判断结果为是时,判断公网POP存储区域是否存在空闲区域;第二扩展存储单元633,用于在第二判断单元631的判断结果为否时,根据私网存储区域和公网非POP存储区域对公网POP存储区域进行扩展,将标签信息存储到标签转发表的扩展后的公网POP存储区域中的第一级标签下,并将第一行为对应存储到标签转发表中;第二存储单元635,用于在第二判断单元631的判断结果为是时,直接将标签信息存储到标签转发表的公网POP存储区域中的第一级标签下,并将第一行为对应存储到标签转发表中。第二扩展存储单元633对公网POP存储区域进行扩展的具体方式可参见方法实施例二中的步骤29。
更进一步,本实施例中第三存储模块65包括:第三判断单元651、第三扩展存储单元653和第三存储单元655。
具体的,第三判断单元651,用于在第二判断模块64的判断结果为本地标签转发信息存储装置的上一跳不支持或支持而未开启PHP功能时,判断私网存储区域是否存在空闲区域;第三扩展存储单元653,用于在第三判断单元651的判断结果为否时,根据公网POP存储区域和公网非POP存储区域对私网存储区域进行扩展,将标签信息存储到标签转发表的扩展后的私网存储区域中的第二级标签下,并修改第一行为为第二行为后对应存储到标签转发表中;第三存储单元655,用于在第三判断单元651的判断结果为是时,直接将标签信息存储到标签转发表的私网存储区域中的第二级标签下,并修改第一行为为第二行为后对应存储到标签转发表中。第三扩展存储单元653对私网存储区域进行扩展的具体方式可参见方法实施例二中的步骤33。
其中,本实施例的第四存储模块72的一种实现结构可以参见第三存储模块65的实现结构,在本实施例中未示出。另外,第四存储模块72和第三存储模块65也可以由同一模块来实现。
本实施例的标签转发信息存储装置,通过上述各功能单元对各存储区域进行扩展,可以使各存储区域得到灵活使用,提高了TCAM的使用效率。
其中,上述各功能单元扩展各存储区域的方式仅为一种优选方式,所有满足扩展后的公网非POP存储区域、私网存储区域和公网POP存储区域仍为依次相邻的扩展方式均适用于本实施例。在各种扩展方式中,移动的表项数量越少该扩展方式越易于实施,扩展效率较高。
图6为本发明实施例六提供的报文转发装置的结构示意图。本实施例的报文转发装置为MPLS网络中任何一台网络设备。如图6所示,本实施例的转发装置包括:第一查找判断模块81、第一转发模块82和第二转发模块83。
第一查找判断模块81,用于在接收到的报文所在LSP上的倒数第二跳不支持或支持而未开启PHP功能时,获取报文中的第一个标签,并查找标签转发表中的公网非POP存储区域以判断第一个标签是否存在公网非POP存储区域中,所述公网非POP存储区域存储有除POP行为对应的公网标签之外的其他公网标签,而POP行为对应的公网标签存储在标签转发表的公网POP存储区域中;第一转发模块82,用于在第一查找判断模块81的判断结果为否时,获取报文中的第二个标签,并根据第二个标签查找标签转发表中的私网存储区域以获取第二个标签对应的转发信息,根据转发信息弹出报文中的第一个标签后对报文进行转发,所述私网存储区域中存储有所有私网标签;第二转发模块83,用于在第一查找判断模块81的判断结果为是时,根据第一个标签对应的转发信息转发报文。
在本实施例中,公网非POP存储区域、私网存储区域和公网POP存储区域在标签转发表中依次相邻。
本实施例报文转发装置基于上述实施例提供的标签转发信息存储装置所生成的标签转发表对携带两个标签的报文进行转发,其具体工作原理详见上述方法实施例三提供的报文转发方法的流程,在此不再赘述。
本实施例的报文转发装置,基于依次存储非POP行为对应的公网标签、私网标签和POP行为对应的公网标签这样的查找顺序对报文进行转发,在报文所在LSP上的倒数第二跳不支持或支持而未开启PHP功能时,本实施例的报文转发装置可基于分类存储的标签转发表以及所存储的经过相应修改的私网标签对应的行为,对携带两个标签的报文进行转发,可以使报文在公网非POP存储区域和私网存储区域优先得到处理,减少了查找标签转发表的次数,减少了报文转发的时延,提高了报文的转发效率;在报文所在LSP上的倒数第二跳开启PHP功能时,可以基于公网非POP存储区域、私网存储区域和公网POP存储区域保证了报文能够被正确转发。
图7为本发明实施例七提供的报文转发装置的结构示意图。本实施例基于实施例六实现,如图7所示,本实施例的转发装置还包括:第二查找判断模块91、第三查找判断模块92、第三转发模块93、第四转发模块94和第五转发模块95。
具体的,第二查找判断模块91,用于在报文所在LSP上的倒数第二跳支持并开启了PHP功能时,获取报文的第一个标签,并查找公网非POP存储区域以判断第一个标签是否存在公网非POP存储区域中;第三查找判断模块92,用于在第二查找判断模块91的判断结果为否时,根据第一个标签查找私网存储区域以判断第一个标签是否存在私网存储区域中;第三转发模块93,用于在第三查找判断模块92的判断结果为否时,根据第一个标签查找公网POP存储区域以获取第一个标签对应的转发信息,并根据转发信息弹出第一个标签后转发报文;第四转发模块94,用于在第三查找判断模块92的判断结果为是时,根据第一个标签对应的转发信息转发报文;第五转发模块95,用于在第二查找判断模块91的判断结果为是时,根据第一个标签对应的转发信息转发报文。
进一步,本实施例的报文转发装置还可以包括第三判断模块96,用于判断报文所在LSP上的倒数第二跳是否支持并开启了PHP功能,并将判断结果提供给第一查找判断模块81和第二查找判断模块91。其中,第三判断模块96具体可以预先存储的LSP信息来判断报文所在LSP上的倒数第二跳是否支持并开启了PHP功能,也可以根据标签转发表的存储形式来判断报文所在LSP上的倒数第二跳是否支持并开启了PHP功能。
本实施例报文转发装置基于上述实施例提供的标签转发信息存储装置所生成的标签转发表对携带单个标签的报文进行转发,其具体工作原理详见上述方法实施例三提供的报文转发方法的流程,在此不再赘述。
本实施例的报文转发装置,基于依次存储非POP行为对应的公网标签、私网标签和POP行为对应的公网标签这样的查找顺序对报文进行转发。在倒数第二跳未不支持或未开启PHP功能的条件下转发携带两个标签的报文时,本实施例的报文转发装置可以通过私网存储区域和修改后的转发信息使得查找一次标签转发表即可完成报文的转发操作,减少了查找标签转发表的次数,提高报文的转发效率。在倒数第二跳开启PHP功能的条件下,本实施例报文转发装置也可以根据分类存储标签的标签转发表将报文成功转发出去。
在此说明,上述实施例四和五提供的标签转发信息存储装置与上述实施例六或七提供的报文转发装置可以为MPLS网络中的同一网络设备。该网络设备首先根据报文所在LSP上的倒数第二跳是否支持并开启了PHP功能,生成按照非POP行为对应的公网标签、私网标签和POP行为对应的公网标签顺序且分类存储的标签转发表,然后,在接收到报文时基于所生成的标签转发表进行转发,解决了在报文所在LSP上的倒数第二跳不支持或支持而未开启PHP功能的条件下,最后一跳转发携带两个标签的报文时需要查找两次标签转发表的问题,减少了查找标签转发表的次数,提高了报文转发效率。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。