报文转发方法及装置与流程

文档序号:14504524阅读:116来源:国知局

本申请涉及网络通信技术领域,特别涉及一种报文转发方法及装置。



背景技术:

gre(genericroutingencapsulation,通用路由封装)协议用来对某种协议(如ip(internetprotocol,因特网协议)、mpls(multiprotocollabelswitching,多协议标签交换)、以太网等)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如ip)中传输。封装后的数据报文在网络中传输的路径称为gre隧道。gre隧道是一个虚拟的点到点的连接,其两端的设备分别对数据报文进行gre封装和解封装。



技术实现要素:

有鉴于此,本申请提供一种报文转发方法及装置。

具体地,本申请是通过如下技术方案实现的:

一方面,提供了一种报文转发方法,该方法包括:

当本设备作为第一隧道的目的端设备的上一跳设备时,接收第一隧道的目的端设备发来的第一通知消息,其中,第一通知消息中携带有第一隧道的相关信息;

在本设备上配置转发表项,其中,该转发表项的匹配域中包括第一隧道的相关信息;

在接收到封装数据报文之后,若该封装数据报文与该转发表项匹配,则对该封装数据报文进行解封装后转发给第一隧道的目的端设备。

另一方面,还提供了一种报文转发装置,该装置包括:

接收单元,用于当本设备作为第一隧道的目的端设备的上一跳设备时,接收第一隧道的目的端设备发来的第一通知消息,其中,第一通知消息中携带有第一隧道的相关信息;还用于接收封装数据报文;

配置单元,用于在接收单元接收到第一通知消息之后,在本设备上配置转发表项,其中,该转发表项的匹配域中包括第一隧道的相关信息;

发送单元,用于在接收单元接收到封装数据报文之后,若该封装数据报文与该转发表项匹配,则对该封装数据报文进行解封装后转发给第一隧道的目的端设备。

通过本申请的以上技术方案,隧道的目的端设备会向上一跳设备发送通知消息,该通知消息中携带有该隧道的相关信息,该上一跳设备在接收到该通知消息之后,就会配置一条匹配域包含该隧道的相关信息的转发表项,后续,该上一跳设备在接收到封装数据报文之后,若该封装数据报文与该转发表项匹配,则该上一跳设备就会对该封装数据报文进行解封装后转发给目的端设备。从而,隧道目的端设备的上一跳设备可以提前将封装数据报文解封装,并将解封装得到的原始数据报文转发给目的端设备,这样,一方面,减轻了目的端设备的解封装处理压力,在源端设备与目的端设备之间建立了多条隧道时,可以将部分隧道的报文解封装处理工作分担给上一跳设备,另一方面,由于在隧道的最后一条链路上,即,该上一跳设备与目的端设备之间的链路上,只需传输原始数据报文,而无需传输封装数据报文,减少了最后一条链路的数据流量,节约了链路带宽。

附图说明

图1是gre封装前后的报文格式示意图;

图2是本申请一示例性实施例示出的当作为第一隧道目的端设备的上一跳设备时,第一设备执行的报文转发方法的流程图;

图3是本申请一示例性实施例示出的网络结构示意图;

图4是图3中的设备r_a、设备r_c和设备r_d的交互流程图;

图5是本申请一示例性实施例示出的keepalive请求报文的格式示意图;

图6是本申请一示例性实施例示出的报文转发装置所在网络设备的结构示意图;

图7是本申请一示例性实施例示出的报文转发装置的一种结构示意图;

图8是本申请一示例性实施例示出的报文转发装置的另一种结构示意图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

gre封装的过程如图1所示,从图1中可以看出,原始报文中包括:14字节的二层头、20字节的ip头、以及30字节的负载(payload),在gre封装的过程中,在原始报文中增加了4字节的gre头和20字节的ip头,这样,与原始报文相比,gre封装后的报文的长度增加了24字节。这样,就增加了gre隧道上的各个链路的数据流量,占用了较多的链路带宽。

为了解决gre封装后的报文增加了gre隧道上的各个链路的数据流量,占用了较多的链路带宽的问题,本申请以下实施例中提供了一种报文转发方法,以及一种可以应用该方法的报文转发装置。本申请实施例的方法可以由路由器等网络设备执行。为了描述方便,以下将执行本申请实施例的报文转发方法的网络设备称为第一设备。

如图2所示,当第一设备作为第一隧道的目的端设备的上一跳设备时,第一设备执行的报文转发方法包括以下步骤:

步骤s101,接收第一隧道的目的端设备发来的第一通知消息,其中,第一通知消息中携带有第一隧道的相关信息;

其中,第一隧道的相关信息中可以包括:第一隧道的源端设备的ip地址、第一隧道的目的端设备的ip地址、第一隧道所属协议的id(标识)。

第一隧道可以是gre隧道、pppoe(point-to-pointprotocoloverethernet,以太网上的点对点协议)隧道、l2tp(layer2tunnelingprotocol,二层隧道协议)隧道等,本申请实施例对此不做限定。

步骤s102,在本设备上配置转发表项,其中,该转发表项的匹配域中包括第一隧道的相关信息;

其中,上述转发表项可以配置在软件层面或底层的硬件层面上,也可以将转发表项的匹配项配置在软件层面上、动作域配置在硬件层面上,或者,还可以将转发表项的匹配项配置在硬件层面上、动作域配置在软件层面上,本申请实施例对此不做限定。

在其中一种实施方式中,从第一通知消息中获取到第一隧道的相关信息之后,在本设备上配置一条如表1所示的转发表项:

表1

步骤s103,在接收到封装数据报文之后,将该封装数据报文与如表1所示的转发表项进行匹配,若匹配,则对该封装数据报文进行解封装后转发给第一隧道的目的端设备。

在步骤s103中,在接收到封装数据报文之后,第一设备会将该封装数据报文与位于软件层面或硬件层面的该转发表项的匹配域进行匹配,若匹配,则按照位于软件层面或硬件层面的该转发表项的动作域,对该封装数据报文进行解封装得到原始数据报文,将该原始数据报文转发给第一隧道的目的端设备。

在上述实施例的方法中,隧道的目的端设备会向上一跳设备发送通知消息,该通知消息中携带有该隧道的相关信息,该上一跳设备在接收到该通知消息之后,就会配置一条匹配域包含该隧道的相关信息的转发表项,后续,该上一跳设备在接收到封装数据报文之后,若该封装数据报文与该转发表项匹配,则该上一跳设备就会对该封装数据报文进行解封装后转发给目的端设备。从而,隧道目的端设备的上一跳设备可以提前将封装数据报文解封装,并将解封装得到的原始数据报文转发给目的端设备,这样,一方面,减轻了目的端设备的解封装处理压力,在源端设备与目的端设备之间建立了多条隧道时,可以将部分隧道的报文解封装处理工作分担给上一跳设备,另一方面,由于在隧道的最后一条链路上,即,该上一跳设备与目的端设备之间的链路上,只需传输原始数据报文,而无需传输封装数据报文,减少了最后一条链路的数据流量,节约了链路带宽。

另外,为转发表项提供了一种老化机制,具体的,如果在预定时间内没有接收到第一隧道的目的端设备发来的第一通知消息,则删除如表1所示的转发表项。这样,第一设备在接收到第一隧道的源端设备发来的封装数据报文之后,就会直接转发给第一隧道的目的端设备,而不会对该封装数据报文进行解封装后转发给该目的端设备。后续,当再次接收到该目的端设备发来的第一通知消息时,第一设备就会执行如图2所示的方法,重新配置转发表项,并根据该转发表项执行解封装后转发的操作。

为了能够使得隧道的目的端设备向上一跳设备发送通知消息,本申请实施例中可以利用隧道keepalive(保活)机制,例如,在gre隧道的keepalive机制中,在开启了gre的keepalive功能后,源端设备会周期性的通过gre隧道向目的端设备发送keepalive请求报文,如果连续发送预定数量的keepalive请求报文后,仍然没有收到目的端设备回应的keepalive应答报文,则源端设备会将gre隧道的状态置为down(不可用);在gre隧道的状态为down时,若接收到了目的端设备回应的keepalive应答报文,则源端设备会将gre隧道的状态切换为up(可用),否则,维持在down状态。同样,pppoe隧道和l2tp隧道等隧道也存在类似的keepalive机制。

通过利用上述的隧道keepalive机制,第一隧道的目的端设备可以在接收到源端设备通过第一隧道发来的keepalive请求报文之后,向发来该keepalive请求报文的上一跳设备(即第一设备)发送携带有第一隧道的相关信息的第一通知消息,从而使得第一设备执行如图2所示的操作步骤。在实际实施过程中,可以通过配置命令的方式,使得第一设备在接收到第一隧道的目的端设备发来的第一通知消息后,根据该命令在本设备上配置转发表项;或者,也可以在协议标准中作出相应的规定,本申请实施例对此不做限定。

同样,第一设备也可以作为某一隧道的目的端设备,这样,当第一设备作为第二隧道的目的端设备时,在接收到源端设备通过第二隧道发来的keepalive请求报文之后,第一设备会向发来该keepalive请求报文的上一跳设备发送第二通知消息,其中,第二通知消息中携带有第二隧道的相关信息。其中,第二隧道的相关信息中可以包括:第一设备的ip地址、该源端设备的ip地址、第二隧道所属协议的id,第二隧道可以是gre隧道、pppoe隧道、l2tp隧道等,本申请实施例对此不做限定。

本申请实施例中对上述通知消息(包括第一通知消息和第二通知消息)的协议和报文格式不做具体限定,只要能够携带隧道的相关信息,并且能够起到通知作用即可。其中一种通知消息可以是ttl(timetolive,生存时间)为1的keepalive应答报文。具体的,当作为第二隧道的目的端设备时,第一设备在接收到源端设备发来的keepalive请求报文之后,除了按照隧道keepalive机制回应现有的keepalive应答报文之外,还发送ttl=1的keepalive应答报文给发来该keepalive请求报文的上一跳设备,以便该上一跳设备执行如图2所示的操作步骤。该ttl=1的keepalive应答报文就是通知消息,其中,ttl置为1可以起到2个作用:一个是可以使得该keepalive应答报文在该上一跳设备上终结,不再继续转发,另一个是作为通知消息的标识,即ttl=1用于标识该keepalive应答报文为通知消息。

本申请实施例利用了隧道keepalive机制,隧道目的端设备在接收到keepalive请求报文之后,额外发送ttl=1的keepalive应答报文给发来该keepalive请求报文的上一跳设备,以便通知该上一跳设备配置转发表项,使得隧道封装数据报文提前解封装。另外,使用ttl=1的keepalive应答报文作为通知消息,可以在现有的keepalive应答报文的基础上实现通知作用,无需定义新的消息类型,也无需对现有keepalive应答报文的格式进行修改,应用范围广泛。

下面以图3所示的实际网络为例对上述实施例的方法进行详细说明。如图3所示,设备r_a与设备r_d之间建立了gre隧道,其中,设备r_a为该gre隧道的源端设备,设备r_d为该gre隧道的目的端设备,设备r_c为目的端设备的上一跳设备。设备r_a的ip地址为ip-a、mac地址为mac-a,设备r_c的ip地址为ip-c、mac地址为mac-c,设备r_d的ip地址为ip-d、mac地址为mac-d。

此时的报文转发方法如图4所示,具体包括以下步骤:

步骤s201,设备r_a通过gre隧道向设备r_d发送keepalive请求报文;

其中,keepalive请求报文的格式如图5所示,包括:二层头、外层ip头、外层gre头、内层ip头、以及内层gre头。在步骤s201中,该keepalive请求报文的外层ip头中的源ip地址为ip-a、目的ip地址为ip-d,内层ip头中的源ip地址为ip-d、目的ip地址为ip-a。

步骤s202,设备r_d接收到该keepalive请求报文之后,对该keepalive请求报文进行解封装,之后构造2个keepalive应答报文:keepalive应答报文1和keepalive应答报文2;

具体的,设备r_d接收到该keepalive请求报文之后,记录该keepalive请求报文的入端口为port21,解析出该keepalive请求报文的二层头中的源mac地址为mac-c、目的mac地址为mac-d;然后,设备r_d弹出该keepalive请求报文的外层ip头和外层gre头,得到剩余的二层头、内层ip头和内层gre头,并利用这些报头构造keepalive应答报文1和keepalive应答报文2。

其中,构造keepalive应答报文1的过程是,将ip头中的ttl置为1,将二层头中的源mac地址mac-c和目的mac地址mac-d互换,即,将mac-d作为源mac地址,将mac-c作为目的mac地址,这样,构造得到的keepalive应答报文1的二层头中的源mac地址为mac-d、目的mac地址为mac-c,ip头中的ttl=1。keepalive应答报文1即为通知消息。

keepalive应答报文2为现有的keepalive应答报文,该报文的二层头中的源mac地址为mac-d、目的mac地址是keepalive应答报文2转发的下一跳设备的mac地址,ip头中的ttl=254。根据设备r_a的ip地址ip-a在ip路由表中查找对应的下一跳信息,可以获取到keepalive应答报文2的出端口和下一跳设备的mac地址等信息。

步骤s203,设备r_d通过port21发送keepalive应答报文1给设备r_c;

由于根据ip-a查找到的下一跳设备有可能不是设备r_c,因此,在步骤s203中,不是通过在ip路由表中查找到的出端口发送keepalive应答报文1,而是通过keepalive请求报文的入端口port21发送keepalive应答报文1,能够确保keepalive应答报文1发送给设备r_c。

步骤s204,设备r_d通过在ip路由表中查找到的出端口发送keepalive应答报文2给设备r_a;

由步骤s202~步骤s204可知,keepalive应答报文1与keepalive应答报文2的ip头中的ttl值不同、确定出端口的方式也不同。其中,keepalive应答报文1的ttl置为1、而不是置为254,其目的是:一方面可以使得keepalive应答报文1只能转发一跳,从而在设备r_c上终结,不再继续转发,另一方面ttl=1可以用于标识keepalive应答报文1为通知消息。另外,确定keepalive应答报文1的出端口为keepalive请求报文的入端口port21、而不是根据ip-a查找到的出端口,其原因是:keepalive应答报文1是要发回给keepalive请求报文的转发路径(即设备r_a→设备r_b→设备r_c→设备r_d)上的倒数第2跳设备,即设备r_c的,所以必须从keepalive请求报文的入端口上发出;而keepalive应答报文2是要发给设备r_a的,因此,只需按照gre隧道keepalive机制,根据设备r_a的ip地址ip-a在ip路由表中查找对应的出端口,通过该出端口转发给设备r_a即可。

在实际实施过程中,keepalive应答报文1和keepalive应答报文2没有特定的发送先后顺序。keepalive应答报文1是一种用于通知设备r_c配置转发表项以便实现提前解封装的功能通知消息,而keepalive应答报文2是一种保活维护消息,在其中一种实现方式中,可以先执行步骤s203再执行步骤s204。在其中另一种实现方式中,可以先执行步骤s204再执行步骤s203。

步骤s205,设备r_a接收到keepalive应答报文2之后,会维持gre隧道的状态为up;

后续,设备r_a会在预定发送时间间隔到达时,再次执行步骤s201。

步骤s206,设备r_c接收到keepalive应答报文1之后,解析出ip头中的ttl=1,就会直接上送cpu进行处理,cpu从该keepalive应答报文1的ip头中获取源ip地址ip-d、目的ip地址ip-a、协议id,然后在底层硬件层面上配置如表2所示的转发表项;

表2

另外,在接收到上述keepalive应答报文1时,设备r_c会启动计时器从0开始计时,后续,每次接收到keepalive应答报文1时,会重新启动计时器,以使计时器重新从0开始计时,如果计时器的计时时间达到预定时间t,则会删除该转发表项。

步骤s207,设备r_c在接收到设备r_a发来的gre封装数据报文之后,会将该gre封装数据报文与如表2所示的转发表项进行匹配,在命中该表项时,按照该转发表项的动作域,对该gre封装数据报文进行解封装后转发给设备r_d。

由如图4所示的方法可以看出,本申请实施例的方法中,利用了gre隧道的keepalive机制,gre隧道的目的端设备r_d接收到源端设备r_a发来的keepalive请求报文之后,在进行应答时,额外发送1个ttl=1的keepalive应答报文给发来该keepalive请求报文的上一跳设备r_c,可以使得设备r_c配置转发表项,根据该表项可以将设备r_a发来的封装数据报文提前解封装后转发给设备r_d,从而减少了隧道目的端设备r_d的解封装处理压力,并且减少了gre隧道最后一条链路的链路开销。

此外,设备r_c在根据如表2所示的转发表项对封装数据报文进行解封装时,还可以支持隧道的安全认证处理。例如,gre隧道支持识别关键字(key)验证、端到端校验这两种安全认证机制。

(1)key验证

在步骤s206中设备r_c接收到设备r_d发来的keepalive应答报文1之后,向设备r_d获取gre隧道的key并保存,或者,keepalive应答报文1中携带有key,设备r_c直接从keepalive应答报文1中获取key并保存。

在获取到key之后,配置转发表项,此时的转发表项的动作域为:在判断出封装数据报文中携带的key与本地保存的key一致时,对该封装数据报文进行解封装后转发给设备r_d。

这样,在步骤s207中,设备r_c在接收到设备r_a发来的gre封装的数据报文之后,会将该gre封装的数据报文与转发表项进行匹配,在命中该表项时,按照该转发表项的动作域,判断该gre封装数据报文中携带的key与本地保存的key是否一致,若一致,则对该gre封装数据报文进行解封装后转发给设备r_d。

(2)端到端校验

在keepalive应答报文1中携带有校验指示标记,在步骤s206中设备r_c接收到keepalive应答报文1之后,根据该校验指示标记,配置转发表项,其中,转发表项的动作域为:计算封装数据报文的校验和,在判断出计算得到的校验和与该封装数据报文中携带的校验和一致时,对该封装数据报文进行解封装后转发给设备r_d。

这样,在步骤s207中,设备r_c在接收到设备r_a发来的gre封装数据报文之后,会将该gre封装数据报文与转发表项进行匹配,在命中该表项时,按照该转发表项的动作域,计算该gre封装数据报文的校验和,判断该校验和与该gre封装数据报文中携带的校验和是否一致,若一致,则对该gre封装数据报文进行解封装后转发给设备r_d。

显然,如图4所示的方法,对于支持keepalive机制的其它隧道同样适用,例如,pppoe隧道和l2tp隧道等,本申请实施例对此不做限定。

与前述报文转发方法的实施例相对应,本申请还提供了报文转发装置的实施例。

本申请报文转发装置60的实施例可以应用在路由器等网络设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在网络设备的处理器10将非易失性存储器50中对应的计算机程序指令读取到内存40中运行形成的。从硬件层面而言,如图6所示,为本申请报文转发装置所在网络设备的一种硬件结构图,除了图6所示的处理器10、内部总线20、网络接口30、内存40、以及非易失性存储器50之外,实施例中装置所在的网络设备通常根据该网络设备的实际功能,还可以包括其他硬件,对此不再赘述。

请参考图7,本申请实施例的报文转发装置60中包括以下模块:接收单元601、配置单元602和发送单元603,其中:

接收单元601,用于当本设备作为第一隧道的目的端设备的上一跳设备时,接收第一隧道的目的端设备发来的第一通知消息,其中,第一通知消息中携带有第一隧道的相关信息;还用于接收封装数据报文;

配置单元602,用于在接收单元601接收到第一通知消息之后,在本设备上配置转发表项,其中,转发表项的匹配域中包括第一隧道的相关信息;

发送单元603,用于在接收单元601接收到封装数据报文之后,若封装数据报文与转发表项匹配,则对该封装数据报文进行解封装后转发给第一隧道的目的端设备。

其中,接收单元601,还用于当本设备作为第二隧道的目的端设备时,接收第二隧道的源端设备通过第二隧道发来的保活keepalive请求报文;

发送单元603,还用于在接收单元601接收到keepalive请求报文之后,向发来该keepalive请求报文的上一跳设备发送第二通知消息,其中,第二通知消息中携带有第二隧道的相关信息。

另外,如图8所示,上述报文转发装置60中还包括:删除单元604,用于若接收单元601在预定时间内没有接收到第一隧道的目的端设备发来的第一通知消息,则从本设备上删除转发表项。

其中,接收单元601通过以下方式判断在预定时间内没有接收到第一隧道的目的端设备发来的第一通知消息:接收单元601在接收到第一隧道的目的端设备发来的第一通知消息时,启动计时器开始计时;在计时器的计时时间达到预定时间时,确定在预定时间内没有接收到第一隧道的目的端设备发来的第一通知消息。

其中,接收单元601接收到的第一通知消息和发送单元603发送的第二通知消息是ttl为1的keepalive应答报文。

其中,上述隧道的相关信息中包括:隧道两端的设备的ip地址、隧道所属协议的标识id。具体的,第一隧道两端的设备为第一隧道的源端设备和目的端设备,第二隧道两端的设备为本设备和第二隧道的源端设备。

其中,上述第一隧道或第二隧道为以下之一:gre隧道、pppoe隧道、l2tp隧道。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1