一种报文传输的方法和装置转让专利

申请号 : CN201510443511.5

文献号 : CN105591982B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王文龙

申请人 : 新华三技术有限公司

摘要 :

本发明提供一种报文传输的方法和装置,该方法包括:第一边缘设备接收来自第二边缘设备的报文;所述第一边缘设备从所述报文中提取源地址和目的地址,如果具有所述源地址和所述目的地址对应的隧道,则所述第一边缘设备利用预设偏移从所述报文中提取所述第二边缘设备所属网络的标识;所述第一边缘设备将所述第二边缘设备所属网络的标识与所述隧道关联的所述第一边缘设备所属网络的标识进行匹配;如果匹配成功,则所述第一边缘设备将所述报文中除了预设第一长度对应的内容之外的其它内容,发送给所述第二边缘设备所属网络的标识对应的设备。通过本发明的技术方案,可以增强边缘设备的可用性,保证报文正常传输。

权利要求 :

1.一种报文传输的方法,其特征在于,第一边缘设备支持第一隧道类型、第二边缘设备支持第二隧道类型时,所述方法包括以下步骤:所述第一边缘设备接收来自所述第二边缘设备的报文;

所述第一边缘设备从所述报文中提取源地址和目的地址,如果所述第一边缘设备上具有对应于所述源地址和所述目的地址的隧道,则所述第一边缘设备利用预设偏移从所述报文中提取所述第二边缘设备所属网络的标识;其中,所述预设偏移为所述第二边缘设备所属网络的标识的起始位置,相对于所述报文的起始位置的偏移;

所述第一边缘设备将所述第二边缘设备所属网络的标识与所述隧道关联的所述第一边缘设备所属网络的标识进行匹配;

如果匹配成功,则所述第一边缘设备将所述报文中除了预设第一长度对应的内容之外的其它内容发送给所述第二边缘设备所属网络的标识对应的设备。

2.根据权利要求1所述的方法,其特征在于,所述第一边缘设备确定所述第一边缘设备上具有对应于所述源地址和所述目的地址的隧道的过程,包括:所述第一边缘设备获得本第一边缘设备的隧道的源地址和目的地址,如果所述报文中的源地址与所述隧道的目的地址相同,所述报文中的目的地址与所述隧道的源地址相同,确定所述隧道与所述报文中的源地址和目的地址对应。

3.根据权利要求1所述的方法,其特征在于,

所述第一边缘设备利用预设偏移从所述报文中提取所述第二边缘设备所属网络的标识的过程,包括:所述第一边缘设备利用所述报文的起始位置以及所述预设偏移,确定所述第二边缘设备所属网络的标识的起始位置;所述第一边缘设备从所述第二边缘设备所属网络的标识的起始位置开始,提取预设第二长度的内容为所述第二边缘设备所属网络的标识。

4.根据权利要求1所述的方法,其特征在于,当第一边缘设备支持第一隧道类型和第二隧道类型,第二边缘设备支持第二隧道类型时,所述方法还包括:所述第一边缘设备在接收到来自所述第二边缘设备的报文时,确定所述第二边缘设备支持第二隧道类型;所述第一边缘设备采用第二隧道类型与所述第二边缘设备进行报文传输;或者,所述第一边缘设备构造第一Internet控制报文协议ICMP请求报文,根据第一隧道类型对应的第一报文格式对所述第一ICMP请求报文进行封装,得到第二ICMP请求报文,并根据第二隧道类型对应的第二报文格式对所述第一ICMP请求报文进行封装,得到第三ICMP请求报文;所述第一边缘设备将所述第二ICMP请求报文和所述第三ICMP请求报文发送给所述第二边缘设备;所述第一边缘设备接收来自所述第二边缘设备的经过第二隧道类型对应的第二报文格式封装的ICMP响应报文,确定所述第二边缘设备支持第二隧道类型;所述第一边缘设备采用第二隧道类型与所述第二边缘设备进行报文传输。

5.根据权利要求1-4任一项所述的方法,其特征在于,

所述第一隧道类型为可扩展虚拟局域网VXLAN隧道类型,所述第二隧道类型为使用通用路由封装的网络虚拟化NVGRE隧道类型;所述第一边缘设备所属网络为VXLAN网络,所述第二边缘设备所属网络为NVGRE网络;所述第一边缘设备所属网络的标识为VXLAN标识,所述第二边缘设备所属网络的标识为虚拟子网标识符VSID;所述第一边缘设备上的隧道为VXLAN隧道,所述第二边缘设备上的隧道为NVGRE隧道;或者,所述第一隧道类型为NVGRE隧道类型,所述第二隧道类型为VXLAN隧道类型;所述第一边缘设备所属网络为NVGRE网络,所述第二边缘设备所属网络为VXLAN网络;所述第一边缘设备所属网络的标识为VSID,所述第二边缘设备所属网络的标识为VXLAN标识;所述第一边缘设备上的隧道为NVGRE隧道,所述第二边缘设备上的隧道为VXLAN隧道。

6.根据权利要求5所述的方法,其特征在于,

当所述报文为经过NVGRE隧道类型封装的报文时,所述预设第一长度对应的报文内容包括IP头和通用路由封装GRE头;

当所述报文为经过VXLAN隧道类型封装的报文时,所述预设第一长度对应的报文内容包括IP头、用户数据报协议UDP头和VXLAN头。

7.一种报文传输的装置,其特征在于,所述报文传输的装置应用在第一边缘设备上,所述第一边缘设备支持第一隧道类型、第二边缘设备支持第二隧道类型时,所述报文传输的装置包括:接收模块,用于接收来自所述第二边缘设备的报文;

处理模块,用于从所述报文中提取源地址和目的地址,如果所述第一边缘设备上具有对应于所述源地址和所述目的地址的隧道,则利用预设偏移从所述报文中提取所述第二边缘设备所属网络的标识;将所述第二边缘设备所属网络的标识与所述隧道关联的所述第一边缘设备所属网络的标识进行匹配;其中,所述预设偏移为所述第二边缘设备所属网络的标识的起始位置,相对于所述报文的起始位置的偏移;

发送模块,用于当匹配成功时,则将所述报文中除了预设第一长度对应的内容之外的其它内容发送给所述第二边缘设备所属网络的标识对应的设备。

8.根据权利要求7所述的装置,其特征在于,

所述处理模块,用于在确定所述第一边缘设备上具有对应于所述源地址和所述目的地址的隧道的过程中,获得所述第一边缘设备的隧道的源地址和目的地址,如果所述报文中的源地址与所述隧道的目的地址相同,所述报文中的目的地址与所述隧道的源地址相同,则确定所述隧道与所述报文中的源地址和目的地址对应。

9.根据权利要求7所述的装置,其特征在于,

所述处理模块,用于在利用预设偏移从所述报文中提取第二边缘设备所属网络的标识的过程中,利用所述报文的起始位置以及所述预设偏移,确定第二边缘设备所属网络的标识的起始位置;从第二边缘设备所属网络的标识的起始位置开始,提取预设第二长度的内容为第二边缘设备所属网络的标识。

10.根据权利要求7所述的装置,其特征在于,当所述第一边缘设备支持第一隧道类型和第二隧道类型,所述第二边缘设备支持第二隧道类型时;

所述处理模块,用于在所述接收模块接收到来自所述第二边缘设备的报文时,确定所述第二边缘设备支持第二隧道类型,并采用第二隧道类型与所述第二边缘设备进行报文传输;或者,构造第一Internet控制报文协议ICMP请求报文,根据第一隧道类型对应的第一报文格式对所述第一ICMP请求报文进行封装,得到第二ICMP请求报文,并根据第二隧道类型对应的第二报文格式对所述第一ICMP请求报文进行封装,得到第三ICMP请求报文;

所述发送模块,还用于将所述第二ICMP请求报文和所述第三ICMP请求报文发送给所述第二边缘设备;所述接收模块,还用于接收来自所述第二边缘设备的经过第二隧道类型对应的第二报文格式封装的ICMP响应报文;

所述处理模块,还用于在收到所述ICMP响应报文时,确定所述第二边缘设备支持第二隧道类型,采用第二隧道类型与所述第二边缘设备进行报文传输。

11.根据权利要求7-10任一项所述的装置,其特征在于,

所述第一隧道类型为可扩展虚拟局域网VXLAN隧道类型,所述第二隧道类型为使用通用路由封装的网络虚拟化NVGRE隧道类型;所述第一边缘设备所属网络为VXLAN网络,所述第二边缘设备所属网络为NVGRE网络;所述第一边缘设备所属网络的标识为VXLAN标识,所述第二边缘设备所属网络的标识为虚拟子网标识符VSID;所述第一边缘设备上的隧道为VXLAN隧道,所述第二边缘设备上的隧道为NVGRE隧道;或者,所述第一隧道类型为NVGRE隧道类型,所述第二隧道类型为VXLAN隧道类型;所述第一边缘设备所属网络为NVGRE网络,所述第二边缘设备所属网络为VXLAN网络;所述第一边缘设备所属网络的标识为VSID,所述第二边缘设备所属网络的标识为VXLAN标识;所述第一边缘设备上的隧道为NVGRE隧道,所述第二边缘设备上的隧道为VXLAN隧道。

12.根据权利要求11所述的装置,其特征在于,

当所述报文为经过NVGRE隧道类型封装的报文时,所述预设第一长度对应的报文内容包括IP头和通用路由封装GRE头;

当所述报文为经过VXLAN隧道类型封装的报文时,所述预设第一长度对应的报文内容包括IP头、用户数据报协议UDP头和VXLAN头。

说明书 :

一种报文传输的方法和装置

技术领域

[0001] 本发明涉及通信技术领域,尤其涉及一种报文传输的方法和装置。

背景技术

[0002] VXLAN(Virtual eXtensible Local Area Network,可扩展虚拟局域网)是基于IP网络,采用MAC(Media Access Control,介质访问控制)+UDP(User Datagram Protocol,用户数据报协议)封装形式的二层VPN(Virtual Private Network,虚拟专用网络)技术。VXLAN可以基于已有的服务提供商或者企业IP网络,为分散的物理站点提供二层互联,并能够为不同的租户提供业务隔离。在VXLAN网络中,源VTEP(VXLAN Tunnel End Point,VXLAN隧道端点)设备在接收到来自源设备的报文后,对报文进行VXLAN封装,并将VXLAN封装后的报文发送给目的VTEP设备。目的VTEP设备在接收到VXLAN封装后的报文后,对报文进行VXLAN解封装,并将VXLAN解封装后的报文发送给目的设备,从而完成源设备与目的设备之间的报文传输。
[0003] NVGRE(Network Virtualization using Generic Routing Encapsulation,使用通用路由封装的网络虚拟化)是基于IP网络,采用MAC+GRE(Generic  Routing Encapsulation,通用路由封装)封装形式的二层VPN技术。NVGRE可以基于已有的服务提供商或者企业IP网络,为分散的物理站点提供二层互联,并能够为不同的租户提供业务隔离。源NVE(Network Virtualization Edge,网络虚拟化边缘)设备在收到来自源设备的报文后,对报文进行NVGRE封装,并将NVGRE封装后的报文发送给目的NVE设备。目的NVE设备在收到NVGRE封装后的报文后,对报文进行NVGRE解封装,并将NVGRE解封装后的报文发送给目的设备,从而完成源设备与目的设备之间的报文传输。
[0004] 在源设备与目的设备的报文传输过程中,如果与源设备连接的为VTEP设备,与目的设备连接的为NVE设备,则VTEP设备将VXLAN封装后的报文发送给NVE设备后,NVE设备无法对报文进行VXLAN解封装,从而导致报文传输失败。同理,如果与源设备连接的为NVE设备,与目的设备连接的为VTEP设备,则NVE设备将NVGRE封装后的报文发送给VTEP设备后,VTEP设备无法对报文进行NVGRE解封装,从而导致数据传输失败。

发明内容

[0005] 本发明提供一种报文传输的方法,第一边缘设备支持第一隧道类型、第二边缘设备支持第二隧道类型时,所述方法包括以下步骤:
[0006] 所述第一边缘设备接收来自所述第二边缘设备的报文;
[0007] 所述第一边缘设备从所述报文中提取源地址和目的地址,如果所述第一边缘设备上具有对应于所述源地址和所述目的地址的隧道,则所述第一边缘设备利用预设偏移从所述报文中提取所述第二边缘设备所属网络的标识;
[0008] 所述第一边缘设备将所述第二边缘设备所属网络的标识与所述隧道关联的所述第一边缘设备所属网络的标识进行匹配;如果匹配成功,则所述第一边缘设备将所述报文中除了预设第一长度对应的内容之外的其它内容发送给所述第二边缘设备所属网络的标识对应的设备。
[0009] 本发明提供一种报文传输的装置,所述报文传输的装置应用在第一边缘设备上,所述第一边缘设备支持第一隧道类型、第二边缘设备支持第二隧道类型时,所述报文传输的装置包括:
[0010] 接收模块,用于接收来自所述第二边缘设备的报文;
[0011] 处理模块,用于从所述报文中提取源地址和目的地址,如果所述第一边缘设备上具有对应于所述源地址和所述目的地址的隧道,则利用预设偏移从所述报文中提取所述第二边缘设备所属网络的标识;将所述第二边缘设备所属网络的标识与所述隧道关联的所述第一边缘设备所属网络的标识进行匹配;
[0012] 发送模块,用于当匹配成功时,则将所述报文中除了预设第一长度对应的内容之外的其它内容发送给所述第二边缘设备所属网络的标识对应的设备。
[0013] 基于上述技术方案,本发明实施例中,当第一边缘设备和第二边缘设备支持的隧道类型不同时,第一边缘设备能够对来自第二边缘设备的报文进行处理,以避免报文传输失败,第二边缘设备能够对来自第一边缘设备的报文进行处理,以避免报文传输失败。上述方式可以解决支持不同隧道类型的边缘设备的互通性问题,增强边缘设备的可用性,保证报文正常传输。

附图说明

[0014] 图1是本发明一种实施方式中的应用场景示意图;
[0015] 图2是本发明一种实施方式中报文传输的方法的流程图;
[0016] 图3是本发明一种实施方式中VXLAN封装的封装格式示意图;
[0017] 图4是本发明一种实施方式中NVGRE封装的封装格式示意图;
[0018] 图5是本发明一种实施方式中第一边缘设备的逻辑结构图;
[0019] 图6是本发明一种实施方式中报文传输的装置的逻辑结构图。

具体实施方式

[0020] 针对现有技术中存在的问题,本发明实施例中提出一种报文传输的方法,该方法可以应用于包括第一边缘设备和第二边缘设备的网络中,如数据中心网络。以图1为本发明实施例的应用场景示意图,第一设备和第一边缘设备连接,第二设备和第二边缘设备连接,第一边缘设备通过IP网络与第二边缘设备连接。第一设备和第二设备为报文传输的源设备和目的设备,当第一设备向第二设备发送报文时,第一设备为源设备,第二设备为目的设备,当第二设备向第一设备发送报文时,第二设备为源设备,第一设备为目的设备。第一设备可为第一VM(Virtual Machine,虚拟机),第二设备可为第二VM。
[0021] 本发明实施例中,第一设备和第一边缘设备属于第一网络,第一边缘设备是第一网络的边缘设备,第二设备和第二边缘设备属于第二网络,第二边缘设备是第二网络的边缘设备。其中,第一边缘设备支持的隧道类型与第二边缘设备支持的隧道类型可以完全不同,例如,第一边缘设备支持第一隧道类型,第二边缘设备支持第二隧道类型。或者,第一边缘设备支持的隧道类型与第二边缘设备支持的隧道类型可以有部分相同,例如,第一边缘设备支持第一隧道类型和第二隧道类型,第二边缘设备支持第二隧道类型。
[0022] 在上述应用场景下,如图2所示,当第一边缘设备支持第一隧道类型、第二边缘设备支持第二隧道类型时,该报文传输的方法包括以下步骤:
[0023] 步骤201,第一边缘设备接收来自第二边缘设备的报文。
[0024] 其中,该报文是经过第二隧道类型对应的第二报文格式封装的报文,且该报文中包括IP头、基于第二隧道类型对应的第二报文格式封装的隧道头。
[0025] 在第二设备向第一设备发送报文的过程中,第二设备将报文发送给第二边缘设备。第二边缘设备在收到报文后,由于第二边缘设备支持第二隧道类型,因此,采用第二隧道类型对应的第二报文格式对报文进行封装,得到经过第二报文格式封装的报文,并将封装后的报文发送给第一边缘设备。针对第一边缘设备收到的报文中包括的IP头,该IP头的源IP地址为第二边缘设备的IP地址,目的IP地址为第一边缘设备的IP地址。
[0026] 步骤202,第一边缘设备从报文中提取源地址和目的地址,如果本第一边缘设备上具有对应于该源地址和该目的地址的隧道,则第一边缘设备利用预设偏移从该报文中提取第二边缘设备所属网络的标识。
[0027] 其中,第一边缘设备可以从报文的IP头中提取源地址和目的地址,该源地址为第二边缘设备的IP地址,目的地址为第一边缘设备的IP地址。
[0028] 其中,第一边缘设备在接收到报文之后,在发现该报文的IP头的目的IP地址为本第一边缘设备的IP地址时,则确定需要对报文进行解封装处理。由于第一边缘设备并不支持第二隧道类型,因此,第一边缘设备在对报文进行解封装处理时会失败。本发明实施例中,在对报文解封装失败时,并不是直接丢弃报文,而是从该报文的IP头中提取出源地址和目的地址,如果本第一边缘设备上具有对应于该源地址和该目的地址的隧道,则第一边缘设备利用预设偏移从该报文中提取第二边缘设备所属网络的标识。如果本第一边缘设备上没有对应于该源地址和该目的地址的隧道,则第一边缘设备丢弃该报文。
[0029] 本发明实施例中,第一边缘设备确定本第一边缘设备上具有对应于源地址和目的地址的隧道的过程,可以包括但不限于如下方式:第一边缘设备获得本第一边缘设备的隧道的源地址和目的地址,如果该报文中的源地址与该隧道的目的地址相同,且该报文中的目的地址与该隧道的源地址相同,则第一边缘设备确定该隧道与该报文中的源地址和目的地址对应。
[0030] 本发明实施例中,预设偏移可以为第二边缘设备所属网络的标识的起始位置,相对于报文的起始位置的偏移。基于此,第一边缘设备利用预设偏移从报文中提取第二边缘设备所属网络的标识的过程,包括但不限于如下方式:第一边缘设备利用报文的起始位置以及预设偏移,确定第二边缘设备所属网络的标识的起始位置;第一边缘设备从第二边缘设备所属网络的标识的起始位置开始,提取预设第二长度的内容为第二边缘设备所属网络的标识。
[0031] 其中,由于第二边缘设备所属网络的标识的起始位置,相对于报文的起始位置的偏移是固定的,不会发生变化,因此可以在第一边缘设备上预先配置第二边缘设备所属网络的标识的起始位置相对于报文的起始位置的偏移。
[0032] 其中,针对第二边缘设备所属网络的标识的起始位置,确定报文的起始位置向后移动预设偏移时,得到第二边缘设备所属网络的标识的起始位置。
[0033] 其中,第二边缘设备所属网络的标识的长度是固定的,因此可以将第二边缘设备所属网络的标识的长度预先配置在第一边缘设备上。假设第二边缘设备所属网络的标识的长度为预设第二长度,则第一边缘设备从第二边缘设备所属网络的标识的起始位置开始,提取预设第二长度的内容为第二边缘设备所属网络的标识。
[0034] 步骤203,第一边缘设备将第二边缘设备所属网络的标识与对应于该源地址和该目的地址的隧道所关联的第一边缘设备所属网络的标识进行匹配。
[0035] 步骤204,如果匹配成功,则第一边缘设备将报文中除了预设第一长度对应的内容之外的其它内容,发送给第二边缘设备所属网络的标识对应的设备。
[0036] 其中,对应于源地址和目的地址的隧道所关联的第一边缘设备所属网络的标识可以为一个或者多个。当第二边缘设备所属网络的标识在这一个或者多个标识中时,则说明匹配成功。当第二边缘设备所属网络的标识不在这一个或者多个标识中时,则说明匹配失败,第一边缘设备直接丢弃报文。
[0037] 其中,由于第一边缘设备并不支持第二隧道类型对应的第二报文格式封装的报文,因此,第一边缘设备无法直接从报文中解析出需要发送的内容。基于此,本发明实施例中,第一边缘设备可以预先获得预设第一长度,并将报文中除了预设第一长度对应的内容之外的其它内容作为需要发送的内容。
[0038] 在实际应用中,基于第二隧道类型对应的第二报文格式封装的报文的隧道头的长度是固定的,不会发生变化,因此,用户可以预先在第一边缘设备上配置预设第一长度,或由第二边缘设备将预设第一长度通知给第一边缘设备。
[0039] 其中,在第一边缘设备将报文发送给第二边缘设备所属网络的标识对应的设备的过程中,第一边缘设备首先将第二边缘设备所属网络的标识作为第一边缘设备所属网络的标识,并将报文发送给第一边缘设备所属网络的标识对应的设备。
[0040] 其中,上述过程为第二设备向第一设备发送报文的过程,针对第一设备向第二设备发送报文的过程,与此过程相同,后续不再重复赘述。
[0041] 本发明实施例中,当第一边缘设备支持第一隧道类型和第二隧道类型,第二边缘设备支持第二隧道类型时,则:方式一、第一边缘设备在接收到来自第二边缘设备的报文时,确定第二边缘设备支持第二隧道类型;第一边缘设备采用第二隧道类型与第二边缘设备进行报文传输。或者,
[0042] 方式二、第一边缘设备构造第一ICMP(Internet Control Message Protocol,Internet控制报文协议)请求报文,根据第一隧道类型对应的第一报文格式对第一ICMP请求报文进行封装,得到第二ICMP请求报文,并根据第二隧道类型对应的第二报文格式对第一ICMP请求报文进行封装,得到第三ICMP请求报文。第一边缘设备将第二ICMP请求报文和第三ICMP请求报文发送给第二边缘设备;第一边缘设备接收来自第二边缘设备的经过第二隧道类型对应的第二报文格式封装的ICMP响应报文,确定第二边缘设备支持第二隧道类型;第一边缘设备采用第二隧道类型与第二边缘设备进行报文传输。
[0043] 本发明实施例中,第一隧道类型为VXLAN隧道类型,第二隧道类型为NVGRE隧道类型;第一边缘设备所属网络为VXLAN网络,第二边缘设备所属网络为NVGRE网络;第一边缘设备所属网络的标识为VXLAN标识,第二边缘设备所属网络的标识为VSID;第一边缘设备上的隧道为VXLAN隧道,第二边缘设备上的隧道为NVGRE隧道。或者,第一隧道类型为NVGRE隧道类型,第二隧道类型为VXLAN隧道类型;第一边缘设备所属网络为NVGRE网络,第二边缘设备所属网络为VXLAN网络;第一边缘设备所属网络的标识为VSID,第二边缘设备所属网络的标识为VXLAN标识;第一边缘设备上的隧道为NVGRE隧道,第二边缘设备上的隧道为VXLAN隧道。
[0044] 基于此,当报文为经过NVGRE隧道类型封装的报文时,预设第一长度对应的报文内容包括IP头和GRE头;当报文为经过VXLAN隧道类型封装的报文时,预设第一长度对应的报文内容包括IP头、UDP头和VXLAN头。
[0045] 基于上述技术方案,本发明实施例中,当第一边缘设备和第二边缘设备支持的隧道类型不同时,第一边缘设备能够对来自第二边缘设备的报文进行处理,以避免报文传输失败,第二边缘设备能够对来自第一边缘设备的报文进行处理,以避免报文传输失败。上述方式可以解决支持不同隧道类型的边缘设备的互通性问题,增强边缘设备的可用性,保证报文正常传输。
[0046] 如图1所示,以下结合应用场景对上述过程进行详细说明。
[0047] 应用场景1:第一边缘设备支持VXLAN隧道类型,第一边缘设备上建立VXLAN隧道,且第一边缘设备为VTEP设备。第二边缘设备支持NVGRE隧道类型,第二边缘设备上建立NVGRE隧道,且第二边缘设备为NVE设备。
[0048] 一个服务器上可以创建多个VM,不同的VM可以属于相同的数据中心网络(如NVGRE网络或VXLAN网络),也可以属于不同的数据中心网络。属于相同的数据中心网络的VM,处于同一个逻辑二层网络,彼此之间二层互通。属于不同的数据中心网络的VM,彼此之间二层隔离。其中,NVGRE网络通过VSID(Virtual Subnet Identifier,虚拟子网标识符)来标识,其长度为24比特。VXLAN网络通过VXLAN标识来标识,VXLAN标识又称为VNI(VXLAN Network Identifier,VXLAN网络标识符),其长度为24比特。
[0049] 本发明实施例中,假设第一设备为VM1,第二设备为VM2,由于第一边缘设备支持VXLAN隧道类型,因此VM1属于VXLAN网络,并通过VXLAN标识1来表示。由于第二边缘设备支持NVGRE隧道类型,因此VM2属于NVGRE网络,并通过VSID1来表示。
[0050] 步骤1、VM1向VTEP设备发送报文1,该报文1的目的地址为VM2。
[0051] 步骤2、VTEP设备在接收到报文1之后,对报文1进行VXLAN封装,得到报文2。其中,该报文2中包括IP头、UDP头、VXLAN头和报文1。
[0052] 如图3所示,为VXLAN封装的封装格式示意图,在原始二层数据帧(即报文1)外添加8字节的VXLAN头、8字节的UDP头和20字节的IP头。其中,IP头的源IP地址为VTEP设备的IP地址,目的IP地址为NVE设备的IP地址。UDP头的目的端口号为VXLAN UDP端口号(缺省为
4789)。VXLAN头主要包括两部分:1、标记位I,当该标记位I为1时,表示VXLAN头中携带的VXLAN标识有效,当该标记位I为0时,表示VXLAN头中携带的VXLAN标识无效。2、VXLAN标识,该VXLAN标识用于表示VM所属的VXLAN网络,长度为24比特,如为VXLAN标识1。
[0053] 步骤3、VTEP设备通过IP网络将VXLAN封装的报文2发给NVE设备。
[0054] 步骤4、NVE设备收到报文2后,发现IP头的目的IP地址为本NVE设备的IP地址,则对报文2进行解封装处理。由于报文2经过VXLAN封装,且NVE设备不支持VXLAN封装,因此对报文2解封装失败,执行步骤5。
[0055] 步骤5、NVE设备从报文2的IP头中提取源地址和目的地址,在NVE设备上查找是否存在匹配该源地址和目的地址的NVGRE隧道。如果存在匹配的NVGRE隧道,则利用预设偏移从报文2中提取VXLAN标识。如果不存在匹配的NVGRE隧道,则直接丢弃报文2。
[0056] 步骤6、NVE设备将VXLAN标识与匹配该源地址和目的地址的NVGRE隧道所关联的VSID进行匹配。如果匹配成功,则NVE设备将报文中除了预设第一长度对应的内容之外的其它内容发送给VXLAN标识对应的设备。
[0057] 其中,报文2的IP头的源IP地址为VTEP设备的IP地址,目的IP地址为NVE设备的IP地址,因此,当NVE设备上存在NVE设备与VTEP设备之间的NVGRE隧道时,说明存在匹配的NVGRE隧道,当不存在NVE设备与VTEP设备之间的NVGRE隧道时,说明不存在匹配的NVGRE隧道。
[0058] 其中,NVGRE隧道两端的设备为NVE设备和VTEP设备。NVE设备在建立NVGRE隧道时,可以只利用本NVE设备的IP地址和VTEP设备的IP地址建立NVGRE隧道,并不需要与VTEP设备进行NVGRE隧道的协商,不需要VTEP设备向本NVE设备发送信息即可建立NVGRE隧道。该NVGRE隧道的源地址为本NVE设备的IP地址,目的地址为VTEP设备的IP地址。
[0059] 其中,预先在NVE设备上配置VXLAN标识的起始位置相对于报文的起始位置的偏移(即预设偏移),例如,当IP头为20字节,UDP头为8字节,VXLAN头的位置为1字节(标记位和保留字段)时,则VXLAN标识的起始位置,相对于报文的起始位置的偏移为29字节。基于预设偏移和报文的起始位置,可以确定VXLAN标识的起始位置。从VXLAN标识的起始位置开始,提取3字节(24比特,预设第二长度)的内容为VXLAN标识。
[0060] 其中,匹配该源地址和目的地址的NVGRE隧道所关联的VSID,可以为一个或者多个VSID,当提取的VXLAN标识位于这一个或者多个VSID时,则说明匹配成功,进行后续处理。当提取的VXLAN标识不位于这一个或者多个VSID时,则说明匹配失败,结束处理流程,直接丢弃报文。
[0061] 其中,在利用预设偏移从报文2中提取VXLAN标识时,如果从VXLAN标识的起始位置开始,提取的3字节内容是VXLAN标识,则在判断VXLAN标识是否位于NVGRE隧道所关联的一个或者多个VSID时,该VXLAN标识可能位于这一个或者多个VSID,也可能不位于这一个或者多个VSID。如果从VXLAN标识的起始位置开始,提取的3字节内容不是VXLAN标识,则在判断VXLAN标识是否位于NVGRE隧道所关联的一个或者多个VSID时,该VXLAN标识必然不位于这一个或者多个VSID,因此直接丢弃报文。
[0062] 其中,在NVE设备将报文中除了预设第一长度对应的内容之外的其它内容发送给VXLAN标识对应的设备时,NVE设备可以从报文2中去除IP头、UDP头、VXLAN头,得到报文1。其中,可以在NVE设备上预先配置IP头、UDP头和VXLAN头的长度,即预设第一长度。在一个实施例中,可以在内存中将指针从报文2的起始位置按照预设第一长度进行偏移,将指针的位置更改到报文1的起始位置,直接读取报文1发送;或者,将预设第一长度对应的报文2的内容所占用的内存直接释放掉,将剩余的报文1发送。
[0063] NVE设备将提取的VXLAN标识(如VXLAN标识1)作为VSID(如VSID1),并利用VSID将报文1发送给VM2。其中,由于VM1属于VXLAN网络,并通过VXLAN标识1来表示,VM2属于NVGRE网络,并通过VSID1来表示,且VXLAN标识1和VSID1是相同的数值,因此,NVE设备将VXLAN头中携带VXLAN标识1作为VSID1时,该VSID1表示VM2属于NVGRE网络,可以利用VSID将报文1发送给VM2。
[0064] 应用场景2:第一边缘设备支持NVGRE隧道类型,第一边缘设备建立NVGRE隧道,且第一边缘设备为NVE设备。第二边缘设备支持VXLAN隧道类型,第二边缘设备建立VXLAN隧道,且第二边缘设备为VTEP设备。
[0065] 一个服务器上可以创建多个VM,不同的VM可以属于相同的数据中心网络(如NVGRE网络或者VXLAN网络),也可以属于不同的数据中心网络。属于相同的数据中心网络的VM,处于同一个逻辑二层网络,彼此之间二层互通。属于不同的数据中心网络的VM,彼此之间二层隔离。其中,NVGRE网络可以通过VSID来标识,其长度为24比特。VXLAN网络可以通过VXLAN标识来标识,VXLAN标识又称为VNI,其长度为24比特。
[0066] 本发明实施例中,假设第一设备为VM1,第二设备为VM2,由于第一边缘设备支持NVGRE隧道类型,因此VM1属于NVGRE网络,并通过VSID1来表示。由于第二边缘设备支持VXLAN隧道类型,因此VM2属于VXLAN网络,并通过VXLAN标识1来表示。
[0067] 步骤1、VM1向NVE设备发送报文1,该报文1的目的地址为VM2。
[0068] 步骤2、NVE设备在接收到报文1之后,对报文1进行NVGRE封装,并得到报文2。其中,该报文2中包括IP头、GRE头和报文1。
[0069] 如图4所示,为NVGRE封装的封装格式示意图,在原始二层数据帧(即报文1)外添加8字节的GRE头和20字节的IP头。其中,IP头的源IP地址为NVE设备的IP地址,目的IP地址为VTEP设备的IP地址。GRE头主要包括以下部分:1、Flags(标记位),Flags共4比特,第一比特为0,表示GRE头中不携带GRE校验和,第二比特未定义,第三比特为1,表示GRE头中携带VSID,第四比特为0,表示GRE头不携带序列号。2、版本,表示GRE协议版本号。3、协议类型,表示GRE头内封装的载荷数据的协议类型,取值为0x6558,表示透明以太网桥接,即GRE头内封装二层以太网数据帧。4、VSID,用于表示VM所属的NVGRE网络,长度为24比特,如VSID 1。
[0070] 步骤3、NVE设备通过IP网络将NVGRE封装的报文2发给VTEP设备。
[0071] 步骤4、VTEP设备收到报文2后,发现IP头的目的IP地址为本VTEP设备的IP地址,则对报文2进行解封装处理。由于报文2经过NVGRE封装,且VTEP设备不支持NVGRE封装,因此对报文2解封装失败,执行步骤5。
[0072] 步骤5、VTEP设备从报文2的IP头中提取出源地址和目的地址,并在本VTEP设备上查找是否存在匹配该源地址和该目的地址的VXLAN隧道。如果存在匹配的VXLAN隧道,则利用预设偏移从报文2中提取VSID。如果不存在匹配的VXLAN隧道,则直接丢弃报文2。
[0073] 步骤6、VTEP设备将VSID与匹配该源地址和目的地址的VXLAN隧道所关联的VXLAN标识进行匹配。如果匹配成功,则VTEP设备将报文中除了预设第一长度对应的内容之外的其它内容发送给该VSID对应的设备。
[0074] 其中,报文2的IP头的源IP地址为NVE设备的IP地址,目的IP地址为VTEP设备的IP地址,因此,当VTEP设备上存在VTEP设备与NVE设备之间的VXLAN隧道时,说明存在匹配的VXLAN隧道,当不存在VTEP设备与NVE设备之间的VXLAN隧道时,说明不存在匹配的VXLAN隧道。
[0075] 其中,VXLAN隧道两端的设备为VTEP设备和NVE设备。VTEP设备在建立VXLAN隧道时,可以只利用本VTEP设备的IP地址和NVE设备的IP地址建立VXLAN隧道,并不需要与NVE设备进行VXLAN隧道的协商,不需要NVE设备向本VTEP设备发送信息即可建立VXLAN隧道。该VXLAN隧道的源地址为本VTEP设备的IP地址,目的地址为NVE设备的IP地址。
[0076] 其中,预先在VTEP设备上配置VSID的起始位置相对于报文的起始位置的偏移(即预设偏移),例如,当IP头为20字节,GRE头为4字节时,则VSID的起始位置,相对于报文的起始位置的偏移为24字节。基于预设偏移和报文的起始位置,可以确定VSID的起始位置。从VSID的起始位置开始,提取3字节(24比特,预设第二长度)的内容为VSID。
[0077] 其中,匹配该源地址和目的地址的VXLAN隧道所关联的VXLAN标识,可以为一个或者多个,当提取的VSID位于这一个或者多个VXLAN标识时,则说明匹配成功,进行后续处理。当提取的VSID不位于这一个或者多个VXLAN标识时,则说明匹配失败,结束处理流程,直接丢弃报文。
[0078] 其中,在利用预设偏移从报文2中提取VSID时,如果从VSID的起始位置开始,提取的3字节内容是VSID,则在判断VSID是否位于VXLAN隧道所关联的一个或者多个VXLAN标识时,该VSID可能位于这一个或者多个VXLAN标识,也可能不位于这一个或者多个VXLAN标识。如果从VSID的起始位置开始,提取的3字节内容不是VSID,则在判断VSID是否位于VXLAN隧道所关联的一个或者多个VXLAN标识时,该VSID必然不位于这一个或者多个VXLAN标识,因此直接丢弃报文。
[0079] 其中,在VTEP设备将报文中除了预设第一长度对应的内容之外的其它内容发送给该VSID对应的设备时,VTEP设备可以从报文2中去除IP头、GRE头,得到报文1。可以在VTEP设备上预先配置IP头、GRE头的长度,即预设第一长度。在一个实施例中,可以在内存中将指针从报文2的起始位置按照预设第一长度进行偏移,将指针的位置更改到报文1的起始位置,直接读取报文1发送;或者,将预设第一长度对应的报文2的内容所占用的内存直接释放掉,将剩余的报文1发送。
[0080] VTEP设备将提取的VSID(如VSID1)作为VXLAN标识(如VXLAN标识1),并利用VXLAN标识将报文1发送给VM2。其中,由于VM1属于NVGRE网络,并通过VSID1来表示,VM2属于VXLAN网络,并通过VXLAN标识1来表示,且VXLAN标识1和VSID1是相同的数值。基于此,VTEP设备在将GRE头中携带的VSID1作为VXLAN标识1时,由于该VXLAN标识1表示VM2属于的VXLAN网络,因此,VTEP设备可以利用该VXLAN标识1将报文1发送给VM2。
[0081] 基于应用场景1和应用场景2,在源设备与目的设备的报文传输过程中,如果与源设备连接的为VTEP设备,与目的设备连接的为NVE设备,则VTEP设备将VXLAN封装后的报文发送给NVE设备后,NVE设备可以继续传输报文,避免报文传输失败。同理,如果与源设备连接的为NVE设备,与目的设备连接的为VTEP设备,则NVE设备将NVGRE封装后的报文发送给VTEP设备后,VTEP设备可以继续传输报文,避免报文传输失败。
[0082] 应用场景3:第一边缘设备支持VXLAN隧道类型和NVGRE隧道类型,第一边缘设备建立VXLAN隧道和NVGRE隧道。第二边缘设备支持VXLAN隧道类型,第二边缘设备建立VXLAN隧道,且第二边缘设备为VTEP设备。
[0083] 在第一设备与第二设备的报文传输过程中,当由第二设备发起报文传输时,第二设备向第一设备发送报文1。第二边缘设备收到报文1后,对报文1进行VXLAN封装,得到报文2,并通过IP网络将VXLAN封装的报文2发送给第一边缘设备。第一边缘设备收到报文2后,发现IP头的目的IP地址为本第一边缘设备的IP地址,则对报文2进行解封装处理。由于报文2经过VXLAN封装,且第一边缘设备支持VXLAN封装,因此对报文2解封装成功,并将解封装后的报文1发送给第一设备。在此基础上,第一边缘设备确定第二边缘设备支持VXLAN封装,并采用VXLAN隧道类型与第二边缘设备进行报文传输,即第一边缘设备在向第二边缘设备发送报文时,对报文进行VXLAN封装,并通过IP网络将VXLAN封装的报文发送给第二边缘设备。
[0084] 在第一设备与第二设备的报文传输过程中,当由第一设备发起报文传输时,第一设备向第二设备发送报文。第一边缘设备收到该报文后,构造第一ICMP请求报文,对第一ICMP请求报文进行VXLAN封装,得到第二ICMP请求报文,并对第一ICMP请求报文进行NVGRE封装,得到第三ICMP请求报文,并通过IP网络分别将第二ICMP请求报文和第三ICMP请求报文发送给第二边缘设备。第二边缘设备在收到第二ICMP请求报文后,由于第二ICMP请求报文是经过VXLAN封装的,且第二边缘设备支持VXLAN隧道类型,因此,第二边缘设备会向第一边缘设备发送ICMP响应报文,对ICMP响应报文进行VXLAN封装,并通过IP网络向第一边缘设备发送VXLAN封装后的ICMP响应报文。第二边缘设备在收到第三ICMP请求报文后,由于第三ICMP请求报文是经过NVGRE封装的,且第二边缘设备不支持NVGRE隧道类型,因此,第二边缘设备丢弃第三ICMP请求报文。第一边缘设备在接收到来自第二边缘设备的经过VXLAN封装的ICMP响应报文后,确定第二边缘设备支持VXLAN封装,并采用VXLAN隧道类型与第二边缘设备进行报文传输,即第一边缘设备在向第二边缘设备发送报文时,对报文进行VXLAN封装,并通过IP网络将VXLAN封装的报文发送给第二边缘设备。
[0085] 其中,第一ICMP请求报文、第二ICMP请求报文、第三ICMP请求报文的源地址是第一边缘设备的地址,目的地址是第二边缘设备的地址。
[0086] 应用场景4:第一边缘设备支持VXLAN隧道类型和NVGRE隧道类型,第一边缘设备建立VXLAN隧道和NVGRE隧道。第二边缘设备支持NVGRE隧道类型,第二边缘设备建立NVGRE隧道,且第二边缘设备为NVE设备。
[0087] 在第一设备与第二设备的报文传输过程中,当由第二设备发起报文传输时,第二设备向第一设备发送报文1。第二边缘设备收到报文1后,对报文1进行NVGRE封装,得到报文2,并通过IP网络将NVGRE封装的报文2发送给第一边缘设备。第一边缘设备收到报文2后,发现IP头的目的IP地址为本第一边缘设备的IP地址,则对报文2进行解封装处理。由于报文2经过NVGRE封装,且第一边缘设备支持NVGRE封装,因此对报文2解封装成功,并将解封装后的报文1发送给第一设备。在此基础上,第一边缘设备确定第二边缘设备支持NVGRE封装,并采用NVGRE隧道类型与第二边缘设备进行报文传输,即第一边缘设备在向第二边缘设备发送报文时,对报文进行NVGRE封装,并通过IP网络将NVGRE封装的报文发送给第二边缘设备。
[0088] 在第一设备与第二设备的报文传输过程中,当由第一设备发起报文传输时,第一设备向第二设备发送报文。第一边缘设备收到该报文后,构造第一ICMP请求报文,对第一ICMP请求报文进行VXLAN封装,得到第二ICMP请求报文,并对第一ICMP请求报文进行NVGRE封装,得到第三ICMP请求报文,并通过IP网络分别将第二ICMP请求报文和第三ICMP请求报文发送给第二边缘设备。第二边缘设备在收到第二ICMP请求报文后,由于第二ICMP请求报文是经过VXLAN封装的,且第二边缘设备不支持VXLAN隧道类型,因此,第二边缘设备丢弃第二ICMP请求报文。第二边缘设备在收到第三ICMP请求报文后,由于第三ICMP请求报文是经过NVGRE封装的,且第二边缘设备支持NVGRE隧道类型,因此,第二边缘设备会向第一边缘设备发送ICMP响应报文,对ICMP响应报文进行NVGRE封装,并通过IP网络向第一边缘设备发送NVGRE封装后的ICMP响应报文。第一边缘设备在接收到来自第二边缘设备的经过NVGRE封装的ICMP响应报文后,确定第二边缘设备支持NVGRE封装,并采用NVGRE隧道类型与第二边缘设备进行报文传输,即第一边缘设备在向第二边缘设备发送报文时,对报文进行NVGRE封装,并通过IP网络将NVGRE封装的报文发送给第二边缘设备。
[0089] 其中,第一ICMP请求报文、第二ICMP请求报文、第三ICMP请求报文的源地址是第一边缘设备的地址,目的地址是第二边缘设备的地址。
[0090] 基于应用场景3和应用场景4,在源设备与目的设备的报文传输过程中,如果有一个边缘设备支持多种隧道类型,另一个边缘设备支持一种隧道类型,则自适应的将两个边缘设备调整为相同的隧道类型,以避免报文传输失败。
[0091] 本发明提出的报文传输的装置,可以应用在第一边缘设备中,该报文传输的装置可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在的第一边缘设备的处理器,将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图5所示,为本发明提出的报文传输的装置所在的,第一边缘设备的一种硬件结构图,除了图5所示的处理器、网络接口、内存以及非易失性存储器外,第一边缘设备还可以包括其他硬件,如负责处理报文的转发芯片等;从硬件结构上来讲,该第一边缘设备还可能是分布式设备,可能包括多个接口卡,以便在硬件层面进行报文处理的扩展。
[0092] 基于与上述方法同样的发明构思,本发明实施例还提供一种报文传输的装置,所述报文传输的装置应用在第一边缘设备上,所述第一边缘设备支持第一隧道类型、第二边缘设备支持第二隧道类型时,如图6所示,所述报文传输的装置包括:
[0093] 接收模块11,用于接收来自所述第二边缘设备的报文;
[0094] 处理模块12,用于从所述报文中提取源地址和目的地址,如果所述第一边缘设备上具有对应于所述源地址和所述目的地址的隧道,利用预设偏移从所述报文中提取所述第二边缘设备所属网络的标识;将所述第二边缘设备所属网络的标识与所述隧道关联的所述第一边缘设备所属网络的标识进行匹配;
[0095] 发送模块13,用于当匹配成功时,将所述报文中除了预设第一长度对应的内容之外的其它内容发送给所述第二边缘设备所属网络的标识对应的设备。
[0096] 所述处理模块12,用于在确定所述第一边缘设备上具有对应于所述源地址和所述目的地址的隧道的过程中,获得所述第一边缘设备的隧道的源地址和目的地址,如果所述报文中的源地址与所述隧道的目的地址相同,所述报文中的目的地址与所述隧道的源地址相同,则确定所述隧道与所述报文中的源地址和目的地址对应。
[0097] 所述预设偏移为所述第二边缘设备所属网络的标识的起始位置,相对于所述报文的起始位置的偏移;所述处理模块12,用于在利用预设偏移从所述报文中提取第二边缘设备所属网络的标识的过程中,利用所述报文的起始位置以及所述预设偏移,确定第二边缘设备所属网络的标识的起始位置;从第二边缘设备所属网络的标识的起始位置开始,提取预设第二长度的内容为第二边缘设备所属网络的标识。
[0098] 当所述第一边缘设备支持第一隧道类型和第二隧道类型,所述第二边缘设备支持第二隧道类型时;所述处理模块12,用于在所述接收模块接收到来自所述第二边缘设备的报文时,确定所述第二边缘设备支持第二隧道类型,并采用第二隧道类型与所述第二边缘设备进行报文传输;或者,构造第一Internet控制报文协议ICMP请求报文,根据第一隧道类型对应的第一报文格式对所述第一ICMP请求报文进行封装,得到第二ICMP请求报文,并根据第二隧道类型对应的第二报文格式对所述第一ICMP请求报文进行封装,得到第三ICMP请求报文;所述发送模块13,还用于将所述第二ICMP请求报文和所述第三ICMP请求报文发送给所述第二边缘设备;所述接收模块11,还用于接收来自所述第二边缘设备的经过第二隧道类型对应的第二报文格式封装的ICMP响应报文;所述处理模块12,还用于在收到所述ICMP响应报文时,确定所述第二边缘设备支持第二隧道类型,采用第二隧道类型与所述第二边缘设备进行报文传输。
[0099] 所述第一隧道类型为可扩展虚拟局域网VXLAN隧道类型,所述第二隧道类型为使用通用路由封装的网络虚拟化NVGRE隧道类型;所述第一边缘设备所属网络为VXLAN网络,所述第二边缘设备所属网络为NVGRE网络;所述第一边缘设备所属网络的标识为VXLAN标识,所述第二边缘设备所属网络的标识为虚拟子网标识符VSID;所述第一边缘设备上的隧道为VXLAN隧道,所述第二边缘设备上的隧道为NVGRE隧道;或者,
[0100] 所述第一隧道类型为NVGRE隧道类型,所述第二隧道类型为VXLAN隧道类型;所述第一边缘设备所属网络为NVGRE网络,所述第二边缘设备所属网络为VXLAN网络;所述第一边缘设备所属网络的标识为VSID,所述第二边缘设备所属网络的标识为VXLAN标识;所述第一边缘设备上的隧道为NVGRE隧道,所述第二边缘设备上的隧道为VXLAN隧道。
[0101] 当所述报文为经过NVGRE隧道类型封装的报文时,所述预设第一长度对应的报文内容包括IP头和通用路由封装GRE头;
[0102] 当所述报文为经过VXLAN隧道类型封装的报文时,所述预设第一长度对应的报文内容包括IP头、用户数据报协议UDP头和VXLAN头。
[0103] 其中,本发明装置的各个模块可以集成于一体,也可以分离部署。上述模块可以合并为一个模块,也可以拆分成多个子模块。
[0104] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
[0105] 本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可拆分成多个子模块。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0106] 以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。