一种报文转发方法、装置及转发设备与流程

文档序号:17071272发布日期:2019-03-08 23:20阅读:154来源:国知局
一种报文转发方法、装置及转发设备与流程
本申请实施例涉及通信领域,尤其涉及一种报文转发方法、装置及转发设备。
背景技术
:点到多点(pointtomultiplepoint,p2mp)通用路由封装(genericroutingencapsulation,gre)组网包括:一个中心节点和多个分支节点。在中心节点上配置p2mpgre隧道模式的gre隧道口,在各分支节点上配置传统的p2pgre隧道模式的gre隧道口,这样就可以实现在中心节点和多个分支节点上建立p2mpgre隧道。为了指导报文转发,中心节点上储存有路由表和p2mp隧道表。路由表的路由表项包括:目的地址、出接口和下一跳。p2mp隧道表中的p2mp隧道表项至少包括:目的地址和封装属性。现有的生成p2mp隧道表项的方式是:中心节点基于分支节点连接的用户主机发送的流量来生成p2mp隧道表项。具体地,当中心节点接收到某一分支节点连接的某一用户主机发送的流量时,可以以该流量的内层源地址(即该用户主机的ip地址)作为目的地址、以外层源地址(即该分支节点上gre隧道口对应的接口ip地址)作为封装属性,生成p2mp隧道表项。然而,当中心节点对接有多个分支节点,每个分支节点又连接有多个用户主机时,每个分支节点的每个用户主机都会在中心节点上生成与每个用户主机对应的p2mp隧道表项,造成中心节点上生成大量的p2mp隧道表项,大大浪费中心节点的资源。技术实现要素:有鉴于此,本申请实施例提供一种报文转发方法、装置及转发设备,用以减少p2mp隧道表项对于p2mpgre组网中的中心节点资源的占用。具体地,本申请实施例是通过如下技术方案实现的:根据本申请实施例的第一方面,提供一种报文转发方法,所述方法应用于点到多点通用路由封装p2mpgre组网的中心节点,所述方法包括:接收p2mpgre组网中的分支节点通过gre隧道发送的gre报文,所述gre隧道的一端为所述中心节点的第一接口,所述gre隧道的另一端为所述分支节点的第二接口;所述第二接口中配置第一gre隧道口;若确定该gre报文的内层源地址是所述第一gre隧道口的地址,则基于该gre报文生成p2mp隧道表项并将该p2mp隧道表项添加至p2mp隧道表;依据所述p2mp隧道表和已储存的路由表转发接收到的报文;其中,所述p2mp隧道表项的目的地址是所述gre报文的内层源地址,封装属性是所述gre报文的外层源地址;所述gre报文的外层源地址为所述第二接口的地址。可选的,所述第一接口中配置第二gre隧道口;所述确定该gre报文的内层源地址是所述分支节点上的第一gre隧道口的地址,包括:检测所述gre报文的内层源地址与所述第二gre隧道口的地址是否在同一网段;若是,则确定所述gre报文的内层源地址是所述分支节点上的第一gre隧道口的地址。可选的,所述依据所述p2mp隧道表和已储存的路由表转发接收到的报文,包括:当接收到报文时,在本地储存的路由表中查找与该报文匹配的路由表项;若所述路由表项的出接口为所述第二gre隧道口,则将所述路由表项的下一跳作为关键字,在所述p2mp隧道表中查找目的地址是所述关键字的p2mp隧道表项;使用查找到的p2mp隧道表项中记录的封装属性、以及本地记录的所述第一接口地址对所述报文进行gre封装;将gre封装后的报文通过所述第二gre隧道口进行转发。可选的,所述基于该gre报文生成p2mp隧道表项,包括:若确定本地未生成与该gre报文对应的p2mp隧道表项,且在本地已生成的与该gre报文对应的p2mp隧道表项已老化,则基于该gre报文生成p2mp隧道表项。根据本申请实施例的第二方面,提供一种报文转发装置,所述装置应用于点到多点通用路由封装p2mpgre组网的中心节点,所述装置包括:接收单元,用于接收p2mpgre组网中的分支节点通过gre隧道发送的gre报文,所述gre隧道的一端为所述中心节点的第一接口,所述gre隧道的另一端为所述分支节点的第二接口;所述第二接口中配置第一gre隧道口;生成单元,用于若确定该gre报文的内层源地址是所述第一gre隧道口的地址,则基于该gre报文生成p2mp隧道表项并将该p2mp隧道表项添加至p2mp隧道表;转发单元,用于依据所述p2mp隧道表和已储存的路由表转发接收到的报文;其中,所述p2mp隧道表项的目的地址是所述gre报文的内层源地址,封装属性是所述gre报文的外层源地址;所述gre报文的外层源地址为所述第二接口的地址。可选的,所述第一接口中配置第二gre隧道口;所述生成单元,在确定该gre报文的内层源地址是所述分支节点上的第一gre隧道口的地址时,具体用于检测所述gre报文的内层源地址与所述第二gre隧道口的地址是否在同一网段;若是,则确定所述gre报文的内层源地址是所述分支节点上的第一gre隧道口的地址。可选的,所述转发单元,具体用于当接收到报文时,在本地储存的路由表中查找与该报文匹配的路由表项;若所述路由表项的出接口为所述第二gre隧道口,则将所述路由表项的下一跳作为关键字,在所述p2mp隧道表中查找目的地址是所述关键字的p2mp隧道表项;使用查找到的p2mp隧道表项中记录的封装属性、以及本地记录的所述第一接口地址对所述报文进行gre封装;将gre封装后的报文通过所述第二gre隧道口进行转发。可选的,所述生成单元,在基于该gre报文生成p2mp隧道表项时,具体用于若确定本地未生成与该gre报文对应的p2mp隧道表项,且在本地已生成的与该gre报文对应的p2mp隧道表项已老化,则基于该gre报文生成p2mp隧道表项。根据本申请实施例的第三方面,提供一种转发设备,包括处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,所述处理器被所述机器可执行指令促使执行如第一方面所述方法。根据本申请实施例的第四方面,提供一种机器可读存储介质,所述机器可读存储介质存储有机器可执行指令,在被处理器调用和执行时,所述机器可执行指令促使所述处理器执行如第一方面所述方法。本申请实施例中心节点在接收到gre报文后,选择内层源地址是该分支节点的gre隧道口地址的gre报文来生成p2mp隧道表项,由于该生成的p2mp隧道表项的目的地址是分支节点上gre隧道口地址,而不再是分支节点连接的各用户主机的地址,使得该一条p2mp隧道表项就可以代替与该分支节点连接的各用户主机对应的多条p2mp隧道表项,所以采用本申请实施例提供的方法来生成p2mp隧道表项,会大大减少p2mp隧道表项的数量,因此大大减少了p2mp隧道表项对于中心节点资源的占用。此外,由于p2mp隧道表项的内容发生更改,本申请实施例还提供了适用于本申请实施例的p2mp隧道表项转发报文的流程,使得中心节点可以基于包含有分支节点上gre隧道口地址的p2mp隧道表项,将报文转发给该分支节点连接的用户主机。附图说明图1是一种p2mp组网的组网架构图;图2是本申请实施例一示例性实施例示出的一种报文转发方法的流程图;图3是本申请实施例一示例性实施例示出的一种报文转发方法的示意图;图4是本申请实施例一示例性实施例示出的一种转发设备的硬件结构图;图5是本申请实施例一示例性实施例示出的一种报文转发装置的框图。具体实施方式这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请实施例的一些方面相一致的装置和方法的例子。在本申请实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请实施例。在本申请实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。参见图1,图1是一种p2mpgre组网的组网架构图。图1中的转发设备101是该p2mpgre组网的中心节点,转发设备102和转发设备103是该p2mpgre组网的分支节点。转发设备101与转发设备102、转发设备103之间建立有p2mpgre隧道。中心节点和各分支节点可以连接用户主机或者连接私网,比如转发设备101连接有用户主机a、转发设备102连接有用户主机b、转发设备103连接有用户主机c。传统的生成p2mp隧道表项的方式是:中心节点接收分支节点连接的用户主机发送的流量,并基于该流量内层ip地址和外层ip地址生成p2mp隧道表项。具体地,以用户主机b向用户主机a发送报文为例。假设用户主机b的ip地址为22.2.2.2,用户主机a的ip地址11.2.2.2,则用户主机b向用户主机a发送的报文1源ip地址为22.2.2.2,目的ip地址为11.2.2.2。假设,转发设备b上的gre隧道口ip地址为192.168.22.2,该gre隧道口对应的接口ip地址为22.1.1.1。转发设备a上的gre隧道口ip地址为192.168.22.1,该gre隧道口对应的接口ip地址为11.1.1.1。当用户主机b向用户主机a发送报文1,用户主机b可先将报文1发送给转发设备102。转发设备102在接收到该报文1后,可在报文1封装外层报头,形成gre报文。该gre报文的外层报头的源ip地址是转发设备102上的gre隧道口对应的接口的ip地址(即22.1.1.1),目的ip地址是转发设备101上的gre隧道口对应的接口ip地址(即11.1.1.1)。转发设备102可将gre报文发送给转发设备101,转发设备101在接收到该gre报文后,可对该gre报文进行解封装。然后,转发设备102可以获取该gre报文的内层源地址(即用户主机b的ip地址22.2.2.2)和外层源地址(即转发设备102上gre隧道口对应的五里口ip地址22.1.1.1),并以该内层源地址作为目的地址,以外层源地址作为封装属性生成p2mp隧道表项。生成的p2mp隧道表项如表1所示。表1这种生成p2mp隧道表项的不好之处在于:当中心节点对接有多个分支节点,而每个分支节点下又连接多个用户主机时,每个分支节点的每个用户主机都会在中心节点上生成与每个用户主机对应的p2mp隧道表项,造成中心节点上生成大量的p2mp隧道表项,大量浪费转发设备101的资源。有鉴于此,本申请实施例中心节点在接收到gre报文后,选择内层源地址是该分支节点的gre隧道口地址的gre报文来生成p2mp隧道表项,由于该生成的p2mp隧道表项的目的地址是分支节点上gre隧道口地址,而不再是分支节点连接的各用户主机的地址,使得该一条p2mp隧道表项就可以代替与该分支节点连接的各用户主机对应的多条p2mp隧道表项,所以采用本申请实施例提供的方法来生成p2mp隧道表项,会大大减少p2mp隧道表项的数量,因此大大减少了p2mp隧道表项对于中心节点资源的占用。此外,本申请实施例还提供了适用于本申请实施例的p2mp隧道表项转发报文的流程,使得中心节点可以基于包含有分支节点上gre隧道口地址的p2mp隧道表项,将报文转发给该分支节点连接的用户主机。参见图2,图2是本申请实施例一示例性实施例示出的一种报文转发方法的流程图。该方法可应用在p2mpgre组网的中心节点上,该方法可包括如下所示步骤。步骤201:中心节点可接收p2mpgre组网中的分支节点通过gre隧道发送的gre报文.其中,所述gre隧道的一端为所述中心节点的第一接口,所述gre隧道的另一端为所述分支节点的第二接口;所述第二接口中配置第一gre隧道口,所述第一接口中配置第二gre隧道口。换句话来说,中心节点从第一接口接收到该分支节点发送的gre报文。步骤202:若确定该gre报文的内层源地址是所述第一gre隧道口的地址,中心节点则可基于该gre报文生成p2mp隧道表项并将该p2mp隧道表项添加至p2mp隧道表。其中,所述p2mp隧道表项的目的地址是所述gre报文的内层源地址,封装属性是所述gre报文的外层源地址;所述gre报文的外层源地址为所述第二接口的地址。其中,中心节点接收到的gre报文的内层源地址可以是分支节点上的gre隧道口地址,当封装在该gre报文内的报文是分支节点发送的路由协议报文,或者是分支节点发送的ping报文等,该gre报文的内层源地址是该分支节点上的gre隧道口地址。当然,该gre报文的内层源地址也可以是分支节点连接的用户主机地址或者该分支节点连接的网段地址。当封装在该gre报文内的报文是该分支节点转发的该分支节点连接的用户主机的报文等时,该gre报文的内层源地址是该分支节点连接的用户主机或者网段地址。本申请实施例只是在接收到内层源地址为分支节点上gre隧道口地址的gre报文时,才基于该gre报文生成p2mp隧道表项,在接收到内层源地址不是分支节点上的gre隧道口地址gre报文时,不生成p2mp隧道表项。所以采用本申请实施例这种方式生成的p2mp隧道表项的目的地址是分支节点上gre隧道口地址,而不再是分支节点连接的各用户主机的地址,使得该一条p2mp隧道表项就可以代替与该分支节点连接的各用户主机对应的多条p2mp隧道表项,所以采用本申请实施例提供的方法来生成p2mp隧道表项,会大大减少p2mp隧道表项的数量,因此大大减少了p2mp隧道表项对于中心节点资源的占用。上述,p2mp隧道表项主要用于报文的转发,记载了要为待转发报文添加的封装信息。p2mp隧道表项的表项形式如表2所示。该p2mp隧道表项包括:目的地址及掩码、封装属性(即封装后的报文的外层目的地址)。目的地址掩码封装属性表2下面通过步骤1至步骤3对步骤202进行详细地说明。步骤1:中心节点在接收到p2mpgre组网中的分支节点通过gre隧道发送的gre报文后,可解封装该gre报文。步骤2:中心节点可确定该gre报文的内层源地址是否是上述第一gre隧道口地址。在实现时,中心节点可获取该gre报文的内层源地址。然后,中心节点可检测该内层源地址与本地第一接口中配置的第二gre隧道口是否在同一网段。若该内层源地址与本地第一接口中配置的第二gre隧道口在同一网段,则确定该内层源地址是第一gre隧道口地址。若该内层源地址与本地第一接口中配置的第二gre隧道口不在同一网段,则确定该内层源地址不是第一gre隧道口地址。这里只是对确定内层源地址是否是第一gre隧道口地址的示例性说明,当然,中心节点还可采用其他方法来进行步骤2中的判断,比如,中心节点可以获取分支节点上的第一gre隧道口地址并进行记录。中心节点可以检测该gre报文的内层源地址是否与记录的第一gre隧道口地址一致来进行步骤2的判断。步骤3:中心节点可基于该gre报文生成p2mp隧道表项并将该p2mp隧道表项添加至p2mp隧道表。在实现时,中心节点可检测本地是否生成与该gre报文对应的p2mp隧道表项,以及检测本地已生成的与该gre报文对应的p2mp隧道表项是否老化。若中心节点确定本地未生成与该gre报文对应的p2mp隧道表项,且在本地已生成的与该gre报文对应的p2mp隧道表项已老化,则基于该gre报文生成p2mp隧道表项。若中心节点确定本地已生成与该gre报文对应的p2mp隧道表项,或者在本地已生成的与该gre报文对应的p2mp隧道表项还未老化,则不生成p2mp隧道表项。在基于gre报文生成p2mp隧道表项时,中心节点可以以该gre报文的内层源地址作为目的地址,以该gre文报头的外层源地址作为封装属性,生成p2mp隧道表项。步骤203:中心节点依据所述p2mp隧道表和已储存的路由表转发接收到的报文。其中,中心节点上储存的路由表是基于路由协议报文学习到的,该路由表包括多个路由表项。每个路由表项至少包括:目的地址、出接口和下一跳。路由表项的表项形式如表3所示。目的地址出接口下一跳表3在本申请实施例中,当中心节点接收到报文时,中心节点可在本地储存的路由表中查找与该报文匹配的路由表项。若所述路由表项的出接口为上述第二gre隧道口,则中心节点可将所述路由表项的下一跳作为关键字,在所述p2mp隧道表中查找目的地址是所述关键字的p2mp隧道表项,中心节点可使用查找到的p2mp隧道表项中记录的封装属性、以及本地记录的所述第一接口地址对所述报文进行gre封装。gre封装后的报文的外层源地址为第一接口地址,外层目的地址为封装属性。然后,中心节点可将gre封装后的报文通过所述第二gre隧道口进行转发。需要说明的是,中心节点接收到的报文可以是数据报文也可以是协议报文,这里不对中心节点接收到的报文进行具体地限定。由上述描述可知,本申请实施例中心节点在接收到gre报文后,选择内层源地址是该分支节点的gre隧道口地址的gre报文来生成p2mp隧道表项,由于该生成的一条p2mp隧道表项的目的地址是分支节点上gre隧道口地址,而不再是分支节点连接的各用户主机的地址,使得该一条p2mp隧道表项就可以代替分别与该分支节点连接的各用户主机对应的多条p2mp隧道表项,所以采用本申请实施例提供的方法来生成p2mp隧道表项,会大大减少p2mp隧道表项的数量,因此大大减少了p2mp隧道表项对于中心节点资源的占用。比如,分支节点连接有3个用户主机,采用现有的p2mp隧道表项生成方法,中心节点上会生成3个分别包含有各用户主机地址的p2mp隧道表项,而由于本申请实施例是基于内层源地址是该分支节点上的隧道口地址的gre报文来生成p2mp隧道表项的,所以本申请实施例隧道表项记录的不再是分支节点连接的用户主机地址,而是分支节点gre隧道口地址,使得中心节点生成的1条p2mp隧道表项就可以代表这3条p2mp隧道表项,所以大大减少了p2mp隧道表项的数量,节省了中心节点上的资源。此外,由于p2mp隧道表项的内容发生更改,本申请实施例还提供了适用于本申请实施例的p2mp隧道表项转发报文的流程,使得中心节点可以基于包含有分支节点上gre隧道口ip地址的p2mp隧道表项,可以将报文转发给该分支节点连接的用户主机。下面通过具体的实施例,并结合图3,对本申请实施例提供的报文转发方法进行详细地说明。如图3所示,假设p2mpgre组网中包括转发设备301,转发设备302和转发设备303。其中,转发设备301为p2mpgre组网中的中心节点,转发设备302为p2mpgre组网中的分支节点,转发设备303为p2mpgre组网中的分支节点。中心节点和各分支节点可连接用户主机或者私网。假设转发设备301、转发设备302和转发设备303之间建立有p2mpgre隧道。(1)在转发设备301上创建该p2mpgre隧道的gre隧道口tunnel0,配置如下所示:interfacetunnel0modep2mp(创建gre隧道口tunnel0,隧道口模式为p2mp模式)ipaddress192.168.22.1255.255.255.0(gre隧道口ip地址)source11.1.1.1(gre隧道口对应的接口ip地址)。(2)在转发设备302上创建该p2mpgre隧道的gre隧道口tunnel0,配置如下所示:interfacetunnel0modep2p;(创建本地gre隧道口tunnel0,隧道口模式为p2p)ipaddress192.168.22.2255.255.255.0;(本地gre隧道口ip地址)source22.1.1.1;(本地gre隧道口对应的接口ip地址)destination11.1.1.1;(中心节点上gre隧道口对应的接口ip地址)。(3)在转发设备303上创建该p2mpgre隧道的gre隧道口tunnel0,配置如下所示:interfacetunnel0modep2p;(创建本地gre隧道口tunnel0,隧道口模式为p2p);ipaddress192.168.22.3255.255.255.0;(本地gre隧道口ip地址);source33.1.1.1;(本地gre隧道口对应的接口ip地址);destination11.1.1.1。(中心节点上隧道口对应的接口ip地址)。在转发设备301上进行了上述(1)中的gre隧道口配置后,转发设备301上的路由表中会增加一条路由表项,该增加的路由表项为路由表项1,该路由表项1的目的地址为192.168.22.0/24、出接口为tunnel0,下一跳为192.168.22.1,此时本地路由表如表4所示。目的地址出接口下一跳192.168.22.0/24tunnel0192.168.22.1表4下面通过p2mp隧道表项的生成,以及利用p2mp隧道表和路由表转发报文两方面来对本申请实施例提出的报文转发方法进行详细地说明。1、p2mp隧道表项的生成1)假设,转发设备302向转发设备301通告自身的路由信息。此时,转发设备302可构造bgp报文1,通过bgp报文1来进行自身路由的通告。该bgp报文1里携带了转发设备302的路由信息。具体地,bgp报文1的格式如表5所示,bgp报文报头的外层目的地址是转发设备301上gre隧道口对应的接口ip地址(即11.1.1.1),外层源地址是转发设备302上gre隧道口对应的接口ip地址(即22.1.1.1),内层目的地址是转发设备301上gre隧道口ip地址(即192.168.22.1),内层源地址是转发设备302上gre隧道口ip地址(即192.168.22.2),bgp报文的载荷为转发设备302上gre隧道口ip地址(即192.168.22.2),当然bgp报文还可包括其他内容,这里只是示例性地说明,不对bgp报文进行具体地限定。表5在通告时,转发设备302对bgp报文1进行gre封装,形成gre报文1,然后转发设备302可向转发设备301发送gre报文1。转发设备301在接收到gre报文1时,可以解封装gre报文1。然后检测该gre报文1的内层源地址与接收该gre报文1的接口中配置的gre隧道口(即中心节点上gre隧道口)是否在同一网段。若该gre报文1的内层源地址与中心节点上gre隧道口不在同一网段,则不生成p2mp隧道表项。在本示例中,由于内层源地址为192.168.22.2,中心节点上gre隧道口为192.168.22.1,所以转发设备301可确定该gre报文1的内层源地址与中心节点上gre隧道口在同一网段,此时转发设备301可进一步检查本地是否生成与该gre报文1对应的p2mp隧道表项1,以及检查已生成的p2mp隧道表项1是否老化。假设转发设备301未生成与gre报文1的外层源地址和内层源地址对应的p2mp隧道表项1,且已生成的p2mp隧道表项1已老化,则转发设备301可基于gre报文1,生成p2mp隧道表项1,并将该p2mp隧道表项1添加至本地p2mp隧道表。具体地,转发设备301可以以该gre报文1的内层源地址作为目的地址,以该gre报文1的外层源地址作为封装属性,生成p2mp隧道表项1,并将该p2mp隧道表项1添加在本地p2mp隧道表中,此时p2mp隧道表如表6所示。目的地址掩码封装属性192.168.22.22422.1.1.1表6此外,假设,转发设备301未学习到与该gre报文1中封装的bgp报文1对应的路由表项、或者转发设备301学习到的与bgp报文1对应的路由表项已老化,此时转发设备301可基于该bgp报文1生成路由表项2,并将该路由表项2添加在本地路由表中。具体地,转发设备301可将该gre报文1载荷携带的地址作为目的地址(即192.168.22.2)、出接口为转发设备301接收该gre报文1的gre隧道口(即中心节点上gre隧道口tunnel0)、下一跳为该gre报文1的内层源地址(192.168.22.2),生成路由表项2并加该路由表项2添加在本地路由表中,此时路由表如表7所示。目的地址出接口下一跳192.168.22.0/24tunnel0192.168.22.1192.168.22.2/32tunnel0192.168.22.2表72)假设,转发设备302在向转发设备301通告自身的路由后,转发设备302新学习到该转发设备302连接的私网或者用户主机的路由,则转发设备302可向转发设备301通过转发设备302新学习到的路由。具体地,转发设备302构造bgp报文2,该bgp报文2中携带了新学习到的路由地址。假设,转发设备302上引用新的路由的地址为转发设备302连接的私网,该网段的ip地址为22.2.2.0/24,则该bgp报文2如表8所示,bgp报文2报头的外层目的地址是转发设备301上gre隧道口对应的接口ip地址(即11.1.1.1),外层源地址是转发设备302上gre隧道口对应的接口ip地址(即22.1.1.1),内层目的地址是转发设备301上gre隧道口ip地址(即192.168.22.1),内层源地址是转发设备302上gre隧道口ip地址(即192.168.22.2),bgp报文的载荷为私网的ip地址(即22.2.2.0/24),当然bgp报文还可包括其他内容,这里只是示例性地说明,不对bgp报文进行具体地限定。表8转发设备302可对该bgp报文2进行gre封装,形成gre报文2,然后将该gre报文2通过gre隧道发送给转发设备301。当转发设备301接收到转发设备302发送的gre报文2后,可解封装该gre报文2。然后检测该gre报文2的内层源地址与接收该gre报文2的接口中配置的gre隧道口(即中心节点上gre隧道口)是否在同一网段。若该gre报文2的内层源地址与中心节点上gre隧道口不在同一网段,则不生成p2mp隧道表项。在本例中,由于内层源地址为192.168.22.2,接收gre报文2的接口中配置的gre隧道口为192.168.22.1,所以转发设备301可确定该gre报文2的内层源地址与中心节点上gre隧道口在同一网段,此时转发设备301可进一步检查本地是否生成与该gre报文2对应的p2mp隧道表项,以及检查已生成的与该gre报文2对应的p2mp隧道表项是否老化。如表6所示的p2mp隧道表可知,转发设备301的p2mp隧道表中已经存在与gre报文2的内层源地址和外层源地址对应的p2mp隧道表项(即p2mp隧道表中存在目的地址是gre报文2的内层源地址,封装属性是gre报文2的外层源地址的p2mp隧道表项)并且没有被老化,所以转发设备301不再基于gre报文2生成p2mp隧道表项。此外,假设,转发设备301未学习到与gre报文2中封装的bgp报文2对应的路由表项,或者学习到的与bgp报文2对应的路由表项已老化。此时,转发设备301可基于该bgp报文2生成路由表项3并添加在本地路由表中。具体地,转发设备301可将该gre报文2载荷携带的地址作为目的地址(即22.2.2.0/24)、出接口为转发设备301接收该gre报文2的gre隧道口(tunnel0)、下一跳为该gre报文的内层源地址(192.168.22.2),生成路由表项3并加该路由表项3添加在路由表中,添加了路由表项3的路由表如表9所示。表9由上述描述可知,本申请实施例的中心节点(即转发设备301)不再基于分支节点连接的用户主机或者连接的私网发送的流量来学习p2mp隧道表项,而是基于分支节点(即转发设备302)发送的报文(即内层源地址是该分支节点隧道口地址的gre报文)来学习p2mp隧道表项,使得学习到的p2mp隧道表项数量更少,有效地节省了p2mp隧道表项占用的资源。3)假设转发设备302向转发设备301转发该转发设备302连接的私网中的主机发送的报文。假设,该私网中的主机发送的报文的源ip地址是22.2.2.0/24。转发设备302可对该报文进行gre封装,生成gre报文3。该gre报文3的外层源地址是该转发设备302上gre隧道口对应的接口ip地址(即22.1.1.1),外层目的地址是该转发设备301上gre隧道口对应的接口ip地址(即11.1.1.1),内层源地址是22.2.2.0/24,内层目的地址是该转发设备301连接用户主机地址。转发设备302可将该gre报文3发送给转发设备301。转发设备301在接收到该gre报文3后,可对该gre报文3进行解封装。然后转发设备301可检测该gre报文3的内层源地址与中心节点上gre隧道口地址是否在同一网段。在本例中,由于gre报文3的内层源地址为22.2.2.0/24,而中心节点上gre隧道口地址为192.168.22.1,两者不再同一网段,则转发设备301转发该gre报文3中封装的报文,不生成p2mp隧道表项。2、依据本地p2mp隧道表和本地路由表转发报文当转发设备301接收到报文1时,假设报文1的目的ip地址是22.2.2.2,则转发设备301可以以该报文1的目的ip地址作为关键字,在本地路由表中(即在表9)中查找目的地址是该关键字的路由表项,在本例中,查找出的路由表项为路由表项3(即从上到下第三条路由表项)。然后,转发设备301可检测该路由表项3的出接口是否为gre隧道口,在本例中,该路由表项3的出接口为本地gre隧道口(即tunnel0)。此时,转发设备301可以以该路由表项3中的下一跳(即192.168.22.2)为关键字,在本地p2mp隧道表(即表6)中查找目的地址是该关键字的p2mp隧道表项。在本例中,查找出的p2mp隧道表项为p2mp隧道表项1。转发设备301可以以该p2mp隧道表项1中的封装属性(即22.1.1.1)、以及本地记录的本地gre隧道口1对应的接口ip地址(即11.1.1.1)对报文1进行加封装。其中,加封装后的报文1的外层源地址为11.1.1.1,外层目的地址为22.1.1.1,内层目的地址为22.2.2.2。然后,转发设备301可将该加封装后的报文1通过本地gre隧道口转发给转发设备302,以由转发设备302将该报文1转发给目的地址为22.2.2.2的用户主机。由上述描述可知,本申请实施例转发设备301(即中心节点)在接收到gre报文后,选择内层源地址是该分支节点的gre隧道口地址的gre报文生成p2mp隧道表项,由于该生成的一条p2mp隧道表项的目的地址是转发设备302(即分支节点)上gre隧道口ip地址,而不再是转发设备302连接的各用户主机的地址,使得该一条p2mp隧道表项就可以代替分别与该转发设备302连接的各用户主机对应的多条p2mp隧道表项,所以采用本申请实施例提供的方法来生成p2mp隧道表项,会大大减少p2mp隧道表项的数量,因此大大减少了p2mp隧道表项对于转发设备301资源的占用。比如,转发设备302连接有3个用户主机,采用现有的p2mp隧道表项生成方法,转发设备301上会生成3个分别包含有各用户主机地址的p2mp隧道表项,而由于本申请实施例是基于转发设备302发送的路由协议报文来生成p2mp隧道表项的,所以本申请实施例隧道表项记录的不再是转发设备302连接的用户主机地址,而是转发设备302上gre隧道口ip地址,使得转发设备301生成的1条p2mp隧道表项就可以代表这3条p2mp隧道表项,所以大大减少了p2mp隧道表项的数量,节省了中心节点上的资源。此外,本申请实施例还提供了适用于本申请实施例的p2mp隧道表项转发报文的流程,使得转发设备301可以基于包含有转发设备302上gre隧道口ip地址的p2mp隧道表项,可以将报文转发给该转发设备302连接的用户主机或者私网。本申请实施例还提供与上述报文转发方法对应的报文转发装置。参见图4,图4是本申请一示例性实施例示出的一种报文转发装置的框图,,该装置应用于点到多点通用路由封装p2mpgre组网的中心节点(即转发设备),可包括如下所示单元。接收单元401,用于执行上述报文转发方法中的步骤201,即接收p2mpgre组网中的分支节点通过gre隧道发送的gre报文,所述gre隧道的一端为所述中心节点的第一接口,所述gre隧道的另一端为所述分支节点的第二接口;所述第二接口中配置第一gre隧道口,具体可参见上述步骤201,这里不再赘述。生成单元402,用于执行上述报文转发方法中的步骤202,即若确定该gre报文的内层源地址是所述第一gre隧道口的地址,则基于该gre报文生成p2mp隧道表项并将该p2mp隧道表项添加至p2mp隧道表,具体可参见步骤202,这里不再赘述。转发单元403,用于执行上述报文转发方法中的步骤203,即依据所述p2mp隧道表和已储存的路由表转发接收到的报文,具体可参见步骤203,这里不再赘述。其中,所述p2mp隧道表项的目的地址是所述gre报文的内层源地址,封装属性是所述gre报文的外层源地址;所述gre报文的外层源地址为所述第二接口的地址。可选的,所述第一接口中配置第二gre隧道口;所述生成单元402,在执行上述步骤202中的确定该gre报文的内层源地址是所述分支节点上的第一gre隧道口的地址的步骤时,可以具体用于检测所述gre报文的内层源地址与所述第二gre隧道口的地址是否在同一网段;若是,则确定所述gre报文的内层源地址是所述分支节点上的第一gre隧道口的地址。可选的,所述转发单元403,在执行上述步骤203时,具体可用于当接收到报文时,在本地储存的路由表中查找与该报文匹配的路由表项;若所述路由表项的出接口为所述第二gre隧道口,则将所述路由表项的下一跳作为关键字,在所述p2mp隧道表中查找目的地址是所述关键字的p2mp隧道表项;使用查找到的p2mp隧道表项中记录的封装属性、以及本地记录的所述第一接口地址对所述报文进行gre封装;将gre封装后的报文通过所述第二gre隧道口进行转发。可选的,所述生成单元402,在执行上述步骤202中的基于该gre报文生成p2mp隧道表项步骤时,可具体用于若确定本地未生成与该gre报文对应的p2mp隧道表项,且在本地已生成的与该gre报文对应的p2mp隧道表项已老化,则基于该gre报文生成p2mp隧道表项。由上述描述可知,在中心节点的接收单元接收到gre报文后,生成单元可选择内层源地址是该分支节点的gre隧道口地址的gre报文来生成p2mp隧道表项,由于生成的一条p2mp隧道表项的目的地址是分支节点上gre隧道口地址,而不再是分支节点连接的各用户主机的地址,使得该一条p2mp隧道表项就可以代替分别与该分支节点连接的各用户主机对应的多条p2mp隧道表项,所以采用本申请实施例提供的方法来生成p2mp隧道表项,会大大减少p2mp隧道表项的数量,因此大大减少了p2mp隧道表项对于中心节点资源的占用。此外,上述转发单元在接收到报文后可以依据本申请实施例生成的p2mp转发表和路由表进行报文转发,使得中心节点的转发单元可以基于包含有分支节点上gre隧道口地址的p2mp隧道表项,将报文转发给该分支节点连接的用户主机。相应地,本申请还提供了对应图4所示装置的硬件结构图。如图5所示,图5是本申请一示例性实施例示出的一种转发设备(即上述中心节点)的硬件结构图。该转发设备包括:通信接口501、处理器502、机器可读存储介质503和总线504;其中,通信接口501、处理器502和机器可读存储介质503通过总线504完成相互间的通信。处理器502通过读取并执行机器可读存储介质503中与报文转发控制逻辑对应的机器可执行指令,可执行上述步骤201至步骤203所描述的报文转发方法。本文中提到的机器可读存储介质203可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:易失存储器、非易失性存储器或者类似的存储介质。具体地,机器可读存储介质403可以是ram(radomaccessmemory,随机存取存储器)、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。该转发设备是指具有转发功能的设备,包括路由器、交换机等等,这里只是对转发设备进行示例性地说明,不进行具体地限定。还需要说明的是,本申请实施例所述的中心节点和分支节点就是一种转发设备。上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。以上所述仅为本申请实施例的较佳实施例而已,并不用以限制本申请实施例,凡在本申请实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请实施例保护的范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1