CN108183919B - 报文转发方法及vxlan网关 - Google Patents

报文转发方法及vxlan网关 Download PDF

Info

Publication number
CN108183919B
CN108183919B CN201810050254.2A CN201810050254A CN108183919B CN 108183919 B CN108183919 B CN 108183919B CN 201810050254 A CN201810050254 A CN 201810050254A CN 108183919 B CN108183919 B CN 108183919B
Authority
CN
China
Prior art keywords
message
address
header
vxlan
tunnel
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201810050254.2A
Other languages
English (en)
Other versions
CN108183919A (zh
Inventor
梁亦历
高晓秋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Cloud Computing Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201810050254.2A priority Critical patent/CN108183919B/zh
Publication of CN108183919A publication Critical patent/CN108183919A/zh
Application granted granted Critical
Publication of CN108183919B publication Critical patent/CN108183919B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/22Parsing or analysis of headers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/28Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
    • H04L12/46Interconnection of networks
    • H04L12/4641Virtual LANs, VLANs, e.g. virtual private networks [VPN]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本申请实施例提供了一种报文转发方法及VXLAN网关,涉及网络技术领域。所述方法,用于VXLAN处理模块中,该VXLAN处理模块是设置在网关节点中的模块,该方法包括:从数据链路层获取第一虚拟机VM发送的第一报文,将第一报文的第一报文头中的外层以太头、外层IP头和外层UDP头进行一次解封装处理,得到UDP有效载荷,剥离UDP有效载荷的VXLAN头得到内层报文,对内层报文进行重新封装得到第二报文;使得三个报文头能够通过VXLAN处理模块进行一次解封装处理,缩短了解封装处理的时长,从而提高了VXL AN网关转发报文时的性能。

Description

报文转发方法及VXLAN网关
技术领域
本申请涉及网络技术领域,特别涉及一种报文转发方法及虚拟可扩展局域网(Virtual Extensible Local Area Network,VXLAN)网关。
背景技术
VXLAN技术是用于扩展网络虚拟化,以得到足够数量的虚拟网络来满足用户使用的技术。
相关技术中,用于VXLAN网关的报文转发方法包括:VXLAN网关接收第一计算节点发送的数据报文,通过内核协议栈剥离该数据报文的第一VXLAN封装,并获取数据报文的内层报文中的目的地址,根据映射表以及目的地址确定数据报文的下一跳地址,为数据报文添加第二VXLAN封装,第二VXLAN封装中的目的地址为下一跳地址,VXLAN网关向第二计算节点发送添加了第二VXLAN封装的数据报文。其中,第一VXLAN封装包括外层以太网头(英文:Outer Ethernet header)、外层网络之间互连的协议(Outer Internet Protocol,OuterIP)、外层用户数据报协议头(Outer User Datagram Protocol header,Outer UDPheader)和虚拟可扩展同域网头(英文:VXLAN header)这四个报文头。
通常,VXLAN网关通过内核协议栈剥离第一VXLAN封装,包括通过内核协议栈中的各层进行逐层依次剥离,即每层剥离第一VXLAN封装中的一个报文头。其中,内核协议栈中的各层剥离第一VXLAN封装的过程中涉及通过socket接口收发报文,而通过socket接口收发报文时会存在用户态数据与内核态数据的切换,导致数据切换时的开销问题,从而大大降低了VXLAN网关转发报文时的性能。
发明内容
为了解决相关技术中通过socket接口收发报文时存在用户态数据与内核态数据的切换而导致VXLAN网关转发报文时的性能较低的问题,本申请实施例提供了一种报文转发方法及VXLAN网关。所述技术方案如下:
第一方面,本申请实施例提供了一种报文转发方法,用于VXLAN处理模块中,该VXLAN处理模块是设置在网关节点中的模块,该方法包括:
从数据链路层获取第一虚拟机(Virtual Machine,VM)发送的第一报文;
将第一报文的第一报文头中的外层以太头、外层网络之间互连的协议IP头和外层用户数据报协议UDP头进行一次解封装处理,得到UDP有效载荷;
剥离UDP有效载荷的VXLAN头,得到内层报文;
对内层报文进行重新封装得到第二报文;
将第二报文发送至第二VM所在的第二计算节点。
在该实现方式中,通过VXLAN处理模块将第一报文的第一报文头中的外层以太头、外层IP头和外层UDP头进行一次解封装处理,得到UDP有效载荷,剥离UDP有效载荷的VXLAN头得到内层报文,对内层报文进行重新封装得到第二报文,避免了第一报文头中的外层以太头、外层IP头和外层UDP头这三个报文头通过内核协议栈进行逐层处理并剥离的情况,使得这三个报文头能够通过VXLAN处理模块直接进行一次解封装处理,缩短了解封装处理的时长,从而提高了VXLAN网关转发报文时的性能。
在第一方面的一种可能的实现方式中,所述将所述第一报文的第一报文头中的外层以太头、外层网络之间互连的协议IP头和外层用户数据报协议UDP头进行一次解封装处理,得到UDP有效载荷,包括:
将所述第一报文的第一报文头中的所述外层以太头、所述外层IP头和所述外层UDP头通过一次所述解封装处理进行全内核态的剥离,得到所述UDP有效载荷。
在该实现方式中,将这三个报文头通过一次解封装处理进行全内核态的剥离,避免了相关技术中在VXLAN网关转发报文时存在用户态数据与内核态数据的切换而导致数据切换时的开销问题,进一步提高了VXLAN网关转发报文时的性能。
在第一方面的另一种可能的实现方式中,对内层报文进行重新封装得到第二报文,包括:
根据内层报文中的目的媒体介入控制层(Media Access Control,MAC)地址,生成与目的MAC地址对应的第二报文头,目的MAC地址是第二VM的MAC地址;
根据第二报文头对内层报文进行封装,得到第二报文。
在第一方面的另一种可能的实现方式中,根据内层报文中的目的MAC地址,生成与目的MAC地址对应的第二报文头,包括:
根据内层报文中的目的MAC地址和流表,获取与目的MAC地址对应的隧道IP地址,隧道IP地址是第二VM所在的第二计算节点的IP地址;
根据隧道IP地址,从本地缓存表中确定与隧道IP地址对应的下一跳MAC地址,本地缓存表中存储有隧道IP地址和下一跳MAC地址之间的对应关系;
根据隧道IP地址和下一跳MAC地址生成第二报文头,第二报文头中的外层目的MAC地址为下一跳MAC地址,第二报文头中的外层目的IP地址为隧道IP地址。
在该实现方式中,通过根据内层报文中的目的MAC地址和流表,获取与目的MAC地址对应的隧道IP地址,根据隧道IP地址,从本地缓存表中确定与隧道IP地址对应的下一跳MAC地址,根据隧道IP地址和下一跳MAC地址生成第二报文头;由于VXLAN处理模块中的本地缓存表中存储有隧道IP地址和下一跳MAC地址之间的对应关系,避免了相关技术中需要依次通过路由表和地址解析协议(Address Resolution Protocol,ARP)表才能查找到下一跳MAC地址的情况,使得VXLAN处理模块能够通过内置的本地缓存表直接查找到下一跳MAC地址,大大缩短了查找时间,进而提高了VXLAN网关进行报文转发的效率。
在第一方面的另一种可能的实现方式中,根据隧道IP地址,从本地缓存表中确定与隧道IP地址对应的下一跳MAC地址,包括:
当尚未满足缓存表更新条件时,将查找次数加一;
根据隧道IP地址,从本地缓存表中查找到与隧道IP地址对应的下一跳MAC地址;
其中,缓存表更新条件包括查找次数小于预设查找次数,和/或,第一时刻与第二时刻的差值小于预设时间间隔,查找次数为当前累计的查找本地缓存表的次数,第一时刻为当前时刻,第二时刻为上一次查找路由表和ARP表的时刻。
在第一方面的另一种可能的实现方式中,该方法,还包括:
当从本地缓存表中未查找到与隧道IP地址对应的下一跳MAC地址时,从路由表查找到与隧道IP地址对应的下一跳IP地址;
根据下一跳IP地址,从ARP表中查找到与下一跳IP地址对应的下一跳MAC地址;
根据路由表和ARP表,对本地缓存表进行更新;
将第二时刻重置为当前时刻。
在第一方面的另一种可能的实现方式中,该方法,还包括:
当满足缓存表更新条件时,将查找次数重置为零;
根据隧道IP地址,从路由表查找到与隧道IP地址对应的下一跳IP地址;
根据下一跳IP地址,从ARP表中查找到与下一跳IP地址对应的下一跳MAC地址;
根据路由表和ARP表,对本地缓存表进行更新;
将第二时刻重置为当前时刻。
在该实现方式中,通过判断是否满足缓存表更新条件,若满足缓存表更新条件,则将查找次数重置为零,根据路由表和ARP表查找下一跳MAC地址,根据路由表和ARP表,对本地缓存表进行更新,由于该本地缓存表的表项均来源于路由表和ARP表,使得本地缓存表能够定期根据路由表和ARP表进行更新,及时同步路由表和ARP表的各个表项。
在第一方面的另一种可能的实现方式中,该方法,还包括:
根据隧道IP地址,从本地缓存表中确定与隧道IP地址对应的输出接口,本地缓存表中还存储有隧道IP地址和输出接口之间的对应关系;
将第二报文发送至第二VM所在的第二计算节点,包括:
将第二报文通过输出接口发送至第二计算节点。
在第一方面的另一种可能的实现方式中,将第二报文发送至第二VM所在的第二计算节点,包括:
获取第二报文对应的开始指针和指针数组,开始指针用于指向第一内存区域,指针数组包括n+1个指针,指针数组中的第i个指针用于指向第i个第二内存区域,n为正整数,i小于n的非负整数;
当第一内存区域小于第二报文的第二报文头所需的内存区域时,将指针数组中的第0个指针重新指向第一内存区域,并将指针数组中的第j个指针重新指向第j-1个第二内存区域,j为小于或者等于n的正整数;
为第二报文的第二报文头重新分配第三内存区域,第三内存区域是不同于第一内存区域和第二内存区域的区域;
将第二报文的第二报文头中的外层以太头、外层IP头和外层UDP头拷贝至第三内存区域;
将开始指针重新指向第三内存区域;
将第二报文发送至第二计算节点。
在该实现方式中,通过为第二报文的第二报文头分配新的内存区域,将第二报文头中的前三个报文头进行拷贝,并通过改变第二报文对应的各个指针所指向的内存区域的方式,实现对第二报文的零拷贝,避免了需要将整个第二报文进行拷贝而导致的开销问题,大大缩短了第二报文的拷贝时长,从而提高了第二网关节点转发报文的效率。
在第一方面的另一种可能的实现方式中,剥离UDP有效载荷的VXLAN头,得到内层报文,包括:
当UDP有效载荷中包括虚拟可扩展局域网网络标识VNI时,确定第一报文为VXLAN报文;
当检测到存在与VXLAN报文对应的VXLAN端口时,剥离UDP有效载荷的VXLAN头,得到内层报文。
第二方面,提供了一种VXLAN网关,包括VXLAN处理模块的网关节点,
接收模块,用于从数据链路层获取第一虚拟机VM发送的第一报文,将所述第一报文发送至所述VXLAN处理模块;
所述VXLAN处理模块,还用于将所述第一报文的第一报文头中的外层以太头、外层网络之间互连的协议IP头和外层用户数据报协议UDP头进行一次解封装处理,得到UDP有效载荷;
所述VXLAN处理模块,还用于剥离所述UDP有效载荷的VXLAN头,得到内层报文;
所述VXLAN处理模块,还用于对所述内层报文进行重新封装得到第二报文;
所述VXLAN处理模块,还用于将所述第二报文发送至发送模块;
所述发送模块,用于将接收到的所述第二报文发送至第二VM所在的第二计算节点。
在第二方面的一种可能的实现方式中,所述VXLAN处理模块,还用于将所述第一报文的第一报文头中的所述外层以太头、所述外层IP头和所述外层UDP头通过一次所述解封装处理进行全内核态的剥离,得到所述UDP有效载荷。
在第二方面的另一种可能的实现方式中,VXLAN处理模块,还用于根据内层报文中的目的MAC地址,生成与目的MAC地址对应的第二报文头,目的MAC地址是第二VM的MAC地址;根据第二报文头对内层报文进行封装,得到第二报文。
在第二方面的另一种可能的实现方式中,VXLAN处理模块,还用于根据内层报文中的目的MAC地址和流表,获取与目的MAC地址对应的隧道IP地址,隧道IP地址是第二VM所在的第二计算节点的IP地址;根据隧道IP地址,从本地缓存表中确定与隧道IP地址对应的下一跳MAC地址,本地缓存表中存储有隧道IP地址和下一跳MAC地址之间的对应关系;根据隧道IP地址和下一跳MAC地址生成第二报文头,第二报文头中的外层目的MAC地址为下一跳MAC地址,第二报文头中的外层目的IP地址为隧道IP地址。
在第二方面的另一种可能的实现方式中,VXLAN处理模块,还用于当尚未满足缓存表更新条件时,将查找次数加一;根据隧道IP地址,从本地缓存表中查找到与隧道IP地址对应的下一跳MAC地址;
其中,缓存表更新条件包括查找次数小于预设查找次数,和/或,第一时刻与第二时刻的差值小于预设时间间隔,查找次数为当前累计的查找本地缓存表的次数,第一时刻为当前时刻,第二时刻为上一次查找路由表和ARP表的时刻。
在第二方面的另一种可能的实现方式中,VXLAN处理模块,还用于当从本地缓存表中未查找到与隧道IP地址对应的下一跳MAC地址时,从路由表查找到与隧道IP地址对应的下一跳IP地址;根据下一跳IP地址,从ARP表中查找到与下一跳IP地址对应的下一跳MAC地址;根据路由表和ARP表,对本地缓存表进行更新;将第二时刻重置为当前时刻。
在第二方面的另一种可能的实现方式中,VXLAN处理模块,还用于当满足缓存表更新条件时,将查找次数重置为零;根据隧道IP地址,从路由表查找到与隧道IP地址对应的下一跳IP地址;根据下一跳IP地址,从ARP表中查找到与下一跳IP地址对应的下一跳MAC地址;根据路由表和ARP表,对本地缓存表进行更新;将第二时刻重置为当前时刻。
在第二方面的另一种可能的实现方式中,VXLAN处理模块,还用于根据隧道IP地址,从本地缓存表中确定与隧道IP地址对应的输出接口,本地缓存表中还存储有隧道IP地址和输出接口之间的对应关系;将第二报文通过输出接口发送至发送模块。
在第二方面的另一种可能的实现方式中,VXLAN处理模块,还用于获取第二报文对应的开始指针和指针数组,开始指针用于指向第一内存区域,指针数组包括n+1个指针,指针数组中的第i个指针用于指向第i个第二内存区域,n为正整数,i小于n的非负整数;
VXLAN处理模块,还用于当第一内存区域小于第二报文的第二报文头所需的内存区域时,将指针数组中的第0个指针重新指向第一内存区域,并将指针数组中的第j个指针重新指向第j-1个第二内存区域,j为小于或者等于n的正整数;
VXLAN处理模块,还用于为第二报文的第二报文头重新分配第三内存区域,第三内存区域是不同于第一内存区域和第二内存区域的区域;
VXLAN处理模块,还用于将第二报文的第二报文头中的外层以太头、外层IP头和外层UDP头拷贝至第三内存区域;
VXLAN处理模块,还用于将开始指针重新指向第三内存区域;
VXLAN处理模块,还用于将第二报文发送至发送模块。
在第二方面的另一种可能的实现方式中,VXLAN处理模块,还用于当UDP有效载荷中包括虚拟可扩展局域网网络标识VNI时,确定第一报文为VXLAN报文;当检测到存在与VXLAN报文对应的VXLAN端口时,剥离UDP有效载荷的VXLAN头,得到内层报文。
第三方面,提供了一种计算机可读存储介质,计算机可读存储介质中存储有至少一条指令,至少一条指令由处理器加载并执行以实现上述第一方面或第一方面中的任意一种可能的实现方式所提供的报文转发方法。
第四方面,提供了一种网络设备,网络设备包括处理器、存储器和通信接口,存储器中存储有至少一条指令,指令由处理器加载并执行以实现VXLAN处理模块,
所述通信接口,用于从数据链路层获取第一虚拟机VM发送的第一报文,将所述第一报文发送至所述处理器;
所述处理器,还用于将所述第一报文的第一报文头中的外层以太头、外层网络之间互连的协议IP头和外层用户数据报协议UDP头进行一次解封装处理,得到UDP有效载荷;
所述处理器,还用于剥离所述UDP有效载荷的VXLAN头,得到内层报文;
所述处理器,还用于对所述内层报文进行重新封装得到第二报文;
所述处理器,还用于将所述第二报文发送至通信接口;
所述通信接口,用于将接收到的所述第二报文发送至第二VM所在的第二计算节点。在第四方面的一种可能的实现方式中,所述处理器,还用于将所述第一报文的第一报文头中的所述外层以太头、所述外层IP头和所述外层UDP头通过一次所述解封装处理进行全内核态的剥离,得到所述UDP有效载荷。
在第四方面的另一种可能的实现方式中,处理器,还用于根据内层报文中的目的MAC地址,生成与目的MAC地址对应的第二报文头,目的MAC地址是第二VM的MAC地址;根据第二报文头对内层报文进行封装,得到第二报文。
在第四方面的另一种可能的实现方式中,处理器,还用于根据内层报文中的目的MAC地址和流表,获取与目的MAC地址对应的隧道IP地址,隧道IP地址是第二VM所在的第二计算节点的IP地址;根据隧道IP地址,从本地缓存表中确定与隧道IP地址对应的下一跳MAC地址,本地缓存表中存储有隧道IP地址和下一跳MAC地址之间的对应关系;根据隧道IP地址和下一跳MAC地址生成第二报文头,第二报文头中的外层目的MAC地址为下一跳MAC地址,第二报文头中的外层目的IP地址为隧道IP地址。
在第四方面的另一种可能的实现方式中,处理器,还用于当尚未满足缓存表更新条件时,将查找次数加一;根据隧道IP地址,从本地缓存表中查找到与隧道IP地址对应的下一跳MAC地址;
其中,缓存表更新条件包括查找次数小于预设查找次数,和/或,第一时刻与第二时刻的差值小于预设时间间隔,查找次数为当前累计的查找本地缓存表的次数,第一时刻为当前时刻,第二时刻为上一次查找路由表和ARP表的时刻。
在第四方面的另一种可能的实现方式中,处理器,还用于当从本地缓存表中未查找到与隧道IP地址对应的下一跳MAC地址时,从路由表查找到与隧道IP地址对应的下一跳IP地址;根据下一跳IP地址,从ARP表中查找到与下一跳IP地址对应的下一跳MAC地址;根据路由表和ARP表,对本地缓存表进行更新;将第二时刻重置为当前时刻。
在第四方面的另一种可能的实现方式中,处理器,还用于当满足缓存表更新条件时,将查找次数重置为零;根据隧道IP地址,从路由表查找到与隧道IP地址对应的下一跳IP地址;根据下一跳IP地址,从ARP表中查找到与下一跳IP地址对应的下一跳MAC地址;根据路由表和ARP表,对本地缓存表进行更新;将第二时刻重置为当前时刻。
在第四方面的另一种可能的实现方式中,处理器,还用于根据隧道IP地址,从本地缓存表中确定与隧道IP地址对应的输出接口,本地缓存表中还存储有隧道IP地址和输出接口之间的对应关系;将第二报文通过输出接口发送至通信接口。
在第四方面的另一种可能的实现方式中,处理器,还用于获取第二报文对应的开始指针和指针数组,开始指针用于指向第一内存区域,指针数组包括n+1个指针,指针数组中的第i个指针用于指向第i个第二内存区域,n为正整数,i小于n的非负整数;
处理器,还用于当第一内存区域小于第二报文的第二报文头所需的内存区域时,将指针数组中的第0个指针重新指向第一内存区域,并将指针数组中的第j个指针重新指向第j-1个第二内存区域,j为小于或者等于n的正整数;
处理器,还用于为第二报文的第二报文头重新分配第三内存区域,第三内存区域是不同于第一内存区域和第二内存区域的区域;
处理器,还用于将第二报文的第二报文头中的外层以太头、外层IP头和外层UDP头拷贝至第三内存区域;
处理器,还用于将开始指针重新指向第三内存区域;
处理器,还用于将第二报文发送至通信接口。
在第四方面的另一种可能的实现方式中,处理器,还用于当UDP有效载荷中包括虚拟可扩展局域网网络标识VNI时,确定第一报文为VXLAN报文;当检测到存在与VXLAN报文对应的VXLAN端口时,剥离UDP有效载荷的VXLAN头,得到内层报文。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是相关技术中VXLAN网关通过内核协议栈剥离该数据报文的第一VXLAN封装的方法流程图;
图2是本申请一个实施例提供的通信系统的示意图;
图3是本申请一个实施例提供的第二网关节点的示意图;
图4是本申请一个实施例提供的报文转发方法的流程图;
图5是本申请一个实施例提供的报文转发方法涉及到的第一报文头的示意图;
图6是本申请另一个实施例提供的报文转发方法的流程图;
图7是本申请另一个实施例提供的报文转发方法的原理示意图;
图8是本申请另一个实施例提供的报文转发方法涉及的第二报文的生成过程的原理示意图;
图9是本申请另一个实施例提供的报文转发方法涉及的本地缓存表更新过程的流程图;
图10是本申请另一个实施例提供的报文转发方法涉及的第二报文的拷贝过程的流程图;
图11是本申请另一个实施例提供的报文转发方法涉及的第二报文的拷贝过程的原理示意图;
图12是本申请一个实施例提供的VXLAN网关的结构框图;
图13是本申请一个实施例提供的网络设备的结构框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
相关技术中,如图1所示,内核协议栈包括数据链路层11、IP层12和UDP层13,VXLAN网关通过内核协议栈和应用层14剥离该数据报文的第一VXLAN封装的过程,包括:通过数据链路层11剥离该数据报文的外层以太网头,将剥离后的数据报文发送至IP层12,通过IP层12剥离该数据报文的外层IP头,再将剥离后的数据报文通过socket接口发送至UDP层13,通过UDP层13剥离该数据报文的外层UDP头,再将剥离后的数据报文通过socket接口发送至应用层14,通过应用层14剥离该数据报文的VXLAN头。
在上述方法中,VXLAN网关剥离第一VXLAN封装的方式是通过内核协议栈中的三层进行逐层依次剥离的,其中,IP层和UDP层之间是通过socket接口收发报文的,而通过socket接口收发报文时会存在用户态数据与内核态数据的切换,导致数据切换时的开销问题,从而大大降低了VXLAN网关转发报文时的性能。
为此,本申请实施例通过VXLAN处理模块将第一报文的第一报文头中的外层以太头、外层IP头和外层UDP头进行一次解封装处理,得到UDP有效载荷,避免了第一报文头中的外层以太头、外层IP头和外层UDP头这三个报文头通过内核协议栈进行逐层处理并剥离的情况,进而避免了IP层和UDP层之间通过socket接口收发报文的情况,使得这三个报文头能够通过VXLAN处理模块直接进行一次性的解封装处理,缩短了解封装处理的时长,从而提高了VXLAN网关转发报文时的性能。
请参考图2,其示出了本申请一个实施例提供的通信系统的示意图。
该通信系统包括第一数据中心220和第二数据中心240。第一数据中心220和第二数据中心240是两个不同的数据中心。
该第一数据中心220中包括第一计算节点222和第一网关节点224,该第二数据中心240中包括第二计算节点242和第二网关节点244。第一计算节点222通过第二网关节点244与第二计算节点242通信,第二计算节点242通过第一网关节点224与第一计算节点222通信。
可选的,第一网关节点224和第二网关节点244均为VXLAN网关节点。
其中,第一网关节点224分别与第一计算节点222和第二计算节点242建立隧道,第一网关节点224用于将第二计算节点242发送的报文转发至第一计算节点222。
第二网关节点244分别与第一计算节点222和第二计算节点242建立隧道,第二网关节点244用于将第一计算节点222发送的报文转发至第二计算节点242。
其中,隧道是一种叠加(英文:Over lay)技术,即通过在现有网络上叠加一个软件定义的逻辑网络,通过定义其上的逻辑网络,实现业务逻辑。即,隧道是将二层网络架构在三层/四层报文中进行传递的网络封装技术。可选的,隧道的应用形式为VXLAN。VXLAN使用MACin UDP(User Data Protocol,用户数据报协议)的方法对报文进行封装,提供了将二层网络叠加在四层网络上的能力。
可选的,该第一计算节点222中部署有第一VM226和第一虚拟交换机(图中未示出)。该第二计算节点242中部署有第二VM246和第二虚拟交换机(图中未示出)。
通常,第一VM226向第二VM246发送报文的过程包括:第一VM226将报文发送至第一虚拟交换机,对应的,第一虚拟交换机接收该报文,该第一虚拟交换机根据自身的转发关系表,确定下一跳设备为第二网关节点。第一虚拟交换机通过第一计算节点222与第二网关节点244之间的隧道,将该报文发送至第二网关节点244,对应的,第二网关节点244接收到该报文。第二网关节点244根据自身的转发关系表,确定下一跳设备为第二计算节点242,通过与第二计算节点242建立的隧道,将该报文发送至第二计算节点242。在该第二计算节点242上,第二虚拟交换机接收到报文,并将报文发送至第二VM246,对应的,第二VM246接收到该报文。
下面仅以第二网关节点244转发第一VM226向第二VM246发送的报文为例进行说明。第一网关节点224转发向第二VM246向第一VM226发送的报文的过程可类比参考相关描述,在此不再赘述。
基于图2提供的通信系统,请参考图3,其示出了本申请一个实施例提供的第二网关节点244的示意图。
该第二网关节点244中设置有VXLAN处理模块31和IP/TCP协议栈。
该IP/TCP协议栈采用多层结构,包括数据链路层32、IP层33和UDP层34。其中,UDP层34通过socket接口35与VXLAN端口36相连。
VXLAN处理模块31分别与数据链路层32和VXLAN端口36相连。该VXLAN处理模块31是独立于IP/TCP协议栈的自定义的网络模块。
VXLAN处理模块31包括VXLAN解封包单元和socket处理单元(图中未示出)。
VXLAN处理模块31用于通过VXLAN解封包单元从数据链路层32获取第一VM发送的第一报文,将第一报文的第一报文头中的外层以太头、外层网络之间互连的协议IP头和外层用户数据报协议UDP头进行一次解封装处理,得到UDP有效载荷,剥离UDP有效载荷的VXLAN头,得到内层报文,对内层报文进行重新封装得到第二报文。VXLAN处理模块31还用于通过socket处理单元将第二报文发送至VXLAN端口36,再由VXLAN端口36发送至第二VM所在的第二计算节点242。
可选的,VXLAN处理模块31还用于实现下面各个方法实施例所提供的报文转发方法。
请参考图4,其示出了本申请一个实施例提供的报文转发方法的流程图,该方法用于如图3所示的第二网关节点244中,该方法包括:
步骤401,VXLAN处理模块从数据链路层获取第一VM发送的第一报文。
第一VM通过第一虚拟交换机将第一报文发送至第二网关节点,对应的,第二网关节点中的数据链路层接收第一计算节点发送的第一报文。数据链路层将接收到的第一报文发送至VXLAN处理模块,对应的,VXLAN处理模块接收到该第一报文。
其中,第一报文是第一VM向第二VM发送的报文,第一VM和第二VM是部署在两个不同的计算节点上的VM。
第一报文包括第一报文头和内层报文,第一报文头包括四个报文头,分别为外层以太头、外层IP头、外层UDP头和VXLAN头。
示意性的,如图5所示,第一报文头中的外层以太头包括外层源MAC地址和外层目的MAC地址,外层IP头包括外层源IP地址和外层目的IP地址,VXLAN头包括四个部分,分别为VXLAN标记(8个比特)、VXLAN保留字段(24个比特)、虚拟可扩展局域网网络标识(VXLANNetwork Identifier,VNI)(24个比特)、VXLAN保留字段(8个比特)。
步骤402,VXLAN处理模块将第一报文的第一报文头中的外层以太头、外层IP头和外层UDP头进行一次解封装处理,得到UDP有效载荷。
可选的,VXLAN处理模块将第一报文的第一报文头中的外层以太头、外层IP头和外层UDP头通过一次解封装处理进行全内核态的剥离,得到UDP有效载荷。即前三个外层的报文头均是在VXLAN处理模块中被剥离的,也就是说,前三个外层的报文头在通过一次解封装处理时不涉及报文的收发过程,也不存在用户态数据与内核态数据切换的过程,不同于相关技术中通过内核协议栈的每层只剥离一个报文头的剥离方式。
可选的,通过VXLAN处理模块中的一个函数将前三个外层的报文头进行全内核态的剥离,即前三个外层的报文头是通过一个函数中的三个逻辑依次进行剥离的,不同于相关技术中需要通过三个函数(内核协议栈的三层各自对应一个用于剥离报文头的函数)依次进行剥离的过程。
其中,第一报文头的UDP有效载荷包括第一报文头的VXLAN头和内层报文。
步骤403,VXLAN处理模块剥离UDP有效载荷的VXLAN头,得到内层报文。
其中,内层报文是VM之间用于通信的报文,包括源VM的MAC地址、目的VM的MAC地址、源VM的IP地址、目的VM的IP地址。在本实施例中,源VM为第一VM,目的VM为第二VM。
步骤404,VXLAN处理模块对内层报文进行重新封装得到第二报文。
VXLAN处理模块通过预设封包策略对内层报文进行重新封装得到第二报文。预设封包策略可参考下面实施例中的相关描述,在此先不介绍。
该第二报文包括第二报文头和内层报文,第二报文的第二报文头与第一报文的第一报文头不同,第二报文的内层报文与第二报文的内层报文相同。
步骤405,VXLAN处理模块将第二报文发送至第二VM所在的第二计算节点。
VXLAN处理模块通过VXLAN端口将第二报文发送至第二VM所在的第二计算节点。
可选的,VXLAN处理模块将第二报文发送至与第二VM相连的第二虚拟交换机。
综上所述,本申请实施例通过VXLAN处理模块将第一报文的第一报文头中的外层以太头、外层IP头和外层UDP头进行一次解封装处理,得到UDP有效载荷,剥离UDP有效载荷的VXLAN头得到内层报文,对内层报文进行重新封装得到第二报文,避免了第一报文头中的外层以太头、外层IP头和外层UDP头这三个报文头通过内核协议栈进行逐层处理并剥离的情况,使得这三个报文头能够通过VXLAN处理模块直接进行一次解封装处理,缩短了解封装处理的时长,从而提高了VXLAN网关转发报文时的性能。
请参考图6,其示出了本申请另一个实施例提供的报文转发方法的流程图,该方法用于如图3所示的第二网关节点244中,该方法包括:
步骤601,从数据链路层获取第一VM发送的第一报文。
数据链路层接收到第一VM所在的第一计算节点发送的第一报文时,判断该第一报文是否为主机报文,若是主机报文,则将该第一报文发送至VXLAN处理模块,对应的,VXLAN处理模块接收该第一报文;若不是主机报文,则根据第一报文查找需要转发的连接,基于该连接将第一报文进行转发。其中,主机报文是指外层目的MAC地址为该第二网关节点的MAC地址的报文。
步骤602,将第一报文的第一报文头中的外层以太头、外层IP头和外层UDP头进行一次解封装处理,得到UDP有效载荷。
VXLAN处理模块将外层以太头、外层IP头和外层UDP头进行一次解封装处理后,得到UDP有效载荷,UDP有效载荷包括第一报文头的VXLAN头和内层报文。
步骤603,判断UDP有效载荷中是否包括VNI。
VXLAN处理模块判断UDP有效载荷中是否包括VNI,该VNI用于指示该第一报文为VXLAN报文。若UDP有效载荷中包括VNI,则执行步骤604,若UDP有效载荷中不包括VNI,则将该第一报文发送至内核协议栈,由内核协议栈处理该第一报文。
步骤604,当UDP有效载荷中包括VNI时,确定第一报文为VXLAN报文。
当UDP有效载荷中包括VNI时,VXLAN处理模块确定第一报文为VXLAN报文。
步骤605,检测是否存在与VXLAN报文对应的VXLAN端口。
VXLAN处理模块检测是否存在与VXLAN报文对应的VXLAN端口,若存在VXLAN端口,则执行步骤606;若不存在VXLAN端口,则丢弃该第一报文,即不发送该第一报文。
步骤606,当检测到存在与VXLAN报文对应的VXLAN端口时,剥离UDP有效载荷的VXLAN头,得到内层报文。
VXLAN处理模块在检测到VXLAN端口时,剥离UDP有效载荷的VXLAN头,得到内层报文。
步骤607,根据内层报文中的目的MAC地址,生成与目的MAC地址对应的第二报文头,目的MAC地址是第二VM的MAC地址。
VXLAN处理模块根据内层报文中的目的MAC地址和流表,获取与目的MAC地址对应的隧道IP地址,根据隧道IP地址,从本地缓存表中确定与隧道IP地址对应的下一跳MAC地址,根据隧道IP地址和下一跳MAC地址生成第二报文头,第二报文头中的外层目的MAC地址为下一跳MAC地址,第二报文头中的外层目的IP地址为隧道IP地址。
其中,隧道IP地址是第二VM所在的第二计算节点的IP地址。可选的,当第一VM与第二VM在用一个子网中时,隧道IP地址为下一跳IP地址。
可选的,VXLAN处理模块根据内层报文中的目的MAC地址和流表,获取与目的MAC地址对应的隧道IP地址,包括:根据内层报文中的目的MAC地址,从流表中确定与该目的MAC地址对应的隧道标识,对该隧道标识所标识的隧道口进行解析,得到该隧道口的隧道IP地址。其中,VXLAN处理模块中存储有流表,该流表中存储有目的MAC地址与隧道标识之间的对应关系,该隧道标识用于唯一标识隧道口。
在一种可能的实现方式中,该流表中存储的目的MAC地址与隧道标识之间的对应关系如表一所示。在表一中,目的MAC地址“MAC_1”对应的隧道标识为“SD1”,目的MAC地址“MAC_2”对应的隧道标识为“SD5”,目的MAC地址“MAC_3”对应的隧道标识为“SD8”。
表一
目的MAC地址 隧道口
MAC_1 SD1
MAC_2 SD5
MAC_3 SD8
VXLAN处理模块中存储有本地缓存表,该本地缓存表中存储有隧道IP地址和下一跳MAC地址之间的对应关系。
可选的,该本地缓存表的表项包括路由表和ARP表的表项,即该本地缓存表中存储隧道IP地址、下一跳IP地址、下一跳MAC地址和输出接口之间的对应关系。
在一种可能的实现方式中,该本地缓存表存储的隧道IP地址、下一跳IP地址、下一跳MAC地址和输出接口之间的对应关系如表二所示。在表二中,隧道IP地址“IP_S1”对应的下一跳IP地址为“IP_A,”下一跳MAC地址为“MAC_A,”输出接口为“Port1;”隧道IP地址“IP_S2”对应的下一跳IP地址为“IP_B,”下一跳MAC地址为“MAC_B,”输出接口为“Port3;”隧道IP地址“IP_S3”对应的下一跳IP地址为“IP_C,”下一跳MAC地址为“MAC_C,”输出接口为“Port6”。
表二
Figure BDA0001552153050000111
Figure BDA0001552153050000121
VXLAN处理模块在从本地缓存表中确定与隧道IP地址对应的下一跳MAC地址之后,将隧道IP地址确定为外层目的IP地址,将下一跳MAC地址确定为外层目的MAC地址,生成得到第二报文的第二报文头。
VXLAN处理模块根据隧道IP地址,从本地缓存表中确定与隧道IP地址对应的输出接口,该输出接口是第二网关节点中用于将第二报文发送至第二VM所在的第二计算节点的接口。
步骤608,根据第二报文头对内层报文进行封装,得到第二报文。
VXLAN处理模块生成得到第二报文头之后,根据第二报文头对内层报文进行封装,得到第二报文。
步骤609,将第二报文通过输出接口发送至第二计算节点。
VXLAN处理模块将第二报文进行socket处理,得到处理后的第二报文,将处理后的第二报文发送至VXLAN端口,VXLAN端口通过输出接口将该处理后的第二报文发送至第二VM所在的第二计算节点。
综上所述,本申请实施例通过根据内层报文中的目的MAC地址和流表,获取与目的MAC地址对应的隧道IP地址,根据隧道IP地址,从本地缓存表中确定与隧道IP地址对应的下一跳MAC地址,根据隧道IP地址和下一跳MAC地址生成第二报文头;由于VXLAN处理模块中的本地缓存表中存储有隧道IP地址和下一跳MAC地址之间的对应关系,避免了相关技术中需要依次通过路由表和ARP表才能查找到下一跳MAC地址的情况,使得VXLAN处理模块能够通过内置的本地缓存表直接查找到下一跳MAC地址,大大缩短了查找时间,进而提高了VXLAN网关进行报文转发的效率。
在一个示意性的例子中,如图7所示,第一VM为VM1,VM1的MAC地址为“MAC_1,”VM1的IP地址为“IP_1,”在第一计算节点上VM1与虚拟交换机A相连,虚拟交换机A的MAC地址为“MAC_A,”虚拟交换机A的IP地址为“IP_A”。第二VM为VM2,VM2的MAC地址为“MAC_2,”VM2的IP地址为“IP_2,”在第二计算节点上VM2与虚拟交换机B相连,虚拟交换机B的MAC地址为“MAC_B,”虚拟交换机B的IP地址为“IP_B”。第二网关节点为L2GW,L2GW分别与VM1所在的第一计算节点和VM2所在的第二计算节点相连。虚拟交换机A将来自于VM1的第一报文转发至L2GW,对应的,L2GW接收到第一报文,第一报文包括第一报文头和内层报文,第一报文头包括外层以太头、外层IP头、外层UDP头和VXLAN头,外层以太头中的外层源MAC地址为“MAC_A,”外层目的MAC地址为“MAC_L2GW,”外层IP头中的外层源IP地址为“IP_A,”外层目的IP地址为“IP_L2GW,”VXLAN头中的VNI为“5000;”内层报文包括源MAC地址、目的MAC地址、源IP地址和目的IP地址,其中,内层报文的源MAC地址为“MAC_1”、目的MAC地址为“MAC_2,”源IP地址为“IP_1”和目的IP地址为“IP_2”。L2GW通过VXLAN处理模块按照处理策略对第一报文进行处理,生成得到第二报文,该第二报文包括第二报文头和内层报文,第二报文头包括外层以太头、外层IP头、外层UDP头和VXLAN头,外层以太头中的外层源MAC地址更换为“MAC_L2GW,”外层目的MAC地址更换为“MAC_B,外层IP头中的外层源IP地址更换为“IP_L2GW,”外层目的IP地址更换为“隧道IP地址,”外层UDP头和VXLAN头保持不变。L2GW将生成的第二报文发送至第二计算节点,对应的,第二计算节点中的虚拟交换机B将接收到的第二报文转发至VM2。
基于图7所提供的例子,L2GW通过VXLAN处理模块按照处理策略对第一报文进行处理,生成得到第二报文的过程如图8所示,VXLAN处理模块将第一报文的第一报文头中的外层以太头、外层IP头和外层UDP头进行一次解封装处理,得到UDP有效载荷,VXLAN处理模块剥离UDP有效载荷的VXLAN头,得到内层报文;VXLAN处理模块根据内层报文中的目的MAC地址“MAC_2,”生成与目的MAC地址“MAC_2”对应的第二报文头,根据第二报文头对内层报文进行封装,得到第二报文。
需要说明的是,由于该本地缓存表的表项均来源于路由表和ARP表,因此,需要定期根据路由表和ARP表对本地缓存表进行更新。因此,上述步骤607中“根据隧道IP地址,从本地缓存表中确定与隧道IP地址对应的下一跳MAC地址”可以被替代实现成为如下几个步骤,如图9所示:
步骤901,判断是否满足缓存表更新条件。
其中,缓存表更新条件包括但不限于以下两种可能的更新条件。
一种可能的更新条件为:查找次数小于预设查找次数,查找次数为当前累计的查找本地缓存表的次数。
可选的,预设查找次数是预设的查找本地缓存表的最大次数。比如,预设查找次数为5次。本申请实施例对此不加以限定。
另一种可能的更新条件为:第一时刻与第二时刻的差值小于预设时间间隔,第一时刻为当前时刻,第二时刻为上一次查找路由表和ARP表的时刻。
可选的,第一时刻为判断是否满足缓存表更新条件的当前时刻,预设时间间隔是预设的查找路由表和ARP表的最大时间间隔。比如,预设时间间隔为30分钟。本申请实施例对此不加以限定。
需要说明的是,满足缓存表更新条件包括:满足上述两种可能的更新条件中的任意一种或者,同时满足上述两种可能的更新条件。本申请实施例对此不加以限定。
VXLAN处理模块判断是否满足缓存表更新条件,若尚未满足缓存表更新条件,则执行步骤902,若满足缓存表更新条件,则执行步骤903。
步骤902,若尚未满足缓存表更新条件,则将查找次数加一。
可选的,VXLAN处理模块在将查找次数加一后,执行步骤904。
步骤903,若满足缓存表更新条件,则将查找次数重置为零。
可选的,VXLAN处理模块在将查找次数重置为零后,执行步骤906。
步骤904,根据隧道IP地址,从本地缓存表中查找是否存在与隧道IP地址对应的下一跳MAC地址。
VXLAN处理模块根据隧道IP地址,从本地缓存表中查找是否存在与隧道IP地址对应的下一跳MAC地址,若存在则执行步骤905,若不存在,则执行步骤906。步骤905,若存在,则查找到下一跳MAC地址。
若存在,则VXLAN处理模块从本地缓存表中查找到与隧道IP地址对应的下一跳MAC地址。其中,从本地缓存表中查找到与隧道IP地址对应的下一跳MAC地址的过程可参考上述实施例中的相关描述,在此不再赘述。
步骤906,若不存在,则根据路由表和ARP表查找下一跳MAC地址。
当从本地缓存表中未查找到与隧道IP地址对应的下一跳MAC地址或者满足缓存表更新条件时,VXLAN处理模块从路由表查找到与隧道IP地址对应的下一跳IP地址;根据下一跳IP地址,从ARP表中查找到与下一跳IP地址对应的下一跳MAC地址。
可选的,路由表中存储有隧道IP地址、下一跳IP地址和输出接口之间的对应关系。在一个示意性的例子中,路由表如表三所示。
表三
隧道IP地址 下一跳IP地址 输出接口
IP_S1 IP_A Port1
IP_S2 IP_B Port3
IP_S3 IP_C Port6
IP_S4 IP_D Port4
IP_S5 IP_E Port8
可选的,ARP表中存储有下一跳IP地址和下一跳MAC地址之间的对应关系。在一个示意性的例子中,ARP表如表四所示。
表四
下一跳IP地址 下一跳MAC地址
IP_A MAC_A
IP_B MAC_B
IP_C MAC_C
IP_D MAC_D
IP_E MAC_E
基于上述表三提供的路由表和表四提供的ARP表,在一个示意性的例子中,当VXLAN处理模块从本地缓存表中未查找到与隧道IP地址“IP_S5”对应的下一跳MAC地址时,从路由表查找到与隧道IP地址“IP_S5”对应的下一跳IP地址“IP_E;”根据下一跳IP地址“IP_E,”从ARP表中查找到与下一跳IP地址“IP_E”对应的下一跳MAC地址“MAC_E”。
步骤907,根据路由表和ARP表,对本地缓存表进行更新。
对于同一个下一跳IP地址,VXLAN处理模块获取路由表中与该下一跳IP地址对应的隧道IP地址和输出接口,并获取ARP表中与该下一跳IP地址对应的下一跳MAC地址。VXLAN处理模块将本地缓存表中与下一跳IP地址对应的表项更新为获取到的各个数据。
步骤908,将第二时刻重置为当前时刻。
在VXLAN处理模块对本地缓存表更新后,将第二时刻重置为当前时刻。
综上所述,本申请实施例通过判断是否满足缓存表更新条件,若满足缓存表更新条件,则将查找次数重置为零,根据路由表和ARP表查找下一跳MAC地址,根据路由表和ARP表,对本地缓存表进行更新,由于该本地缓存表的表项均来源于路由表和ARP表,使得本地缓存表能够定期根据路由表和ARP表进行更新,及时同步路由表和ARP表的各个表项。
需要说明的是,在将第二报文发送至第二计算节点之前,若为第二报文的第二报文头分配的第一内存区域小于第二报文的第二报文头所需的内存区域,则VXLAN处理模块需要为该第二报文重新分配新的内存区域,并对第二报文进行拷贝并存储,第二报文的拷贝方法包括但不限于以下两种可能的拷贝方式:
在一种可能的拷贝方式中,为第二报文重新分配新的内存区域,将第二报文的第二报文头和内层报文整体拷贝至重新分配的内存区域中,在拷贝结束后,将将第二报文发送至第二计算节点。
但是,在该种拷贝方式中,需要为整个第二报文分配内存区域,并将整个第二报文进行拷贝,不仅会浪费较多的内存空间,而且会使得第二报文的拷贝过程较长,从而降低了第二网关节点转发报文的效率。
因此,本申请实施例提供了另一种可能的拷贝方式中,图6所提供的实施例中的步骤609可被替换实现成为如下几个步骤,如图10所示:
步骤1001,获取第二报文对应的开始指针和指针数组,开始指针用于指向第一内存区域,指针数组包括n+1个指针,指针数组中的第i个指针用于指向第i个第二内存区域,n为正整数,i小于n的非负整数。
VXLAN处理模块获取用于指示第二报文所在内存区域的开始指针和指针数组,该开始指针与指针数组存在一一对应的关系。
指针数组包括n+1个指针,指针数组中的第i个指针用于指向第i个第二内存区域,指针数组中的第n个指针为空值,即第n个指针用于指向无效地址。
比如,n的取值为2,指针数组包括3个指针,第0个指针用于指向第0个第二内存区域,第1个指针用于指向第1个第二内存区域,第2个指针用于指向无效地址。
可选的,第一内存区域用于存储第二报文的第二报文头,n+1个第二内存区域用于存储第二报文的载荷。
步骤1002,判断第一内存区域是否小于第二报文的第二报文头所需的内存区域。
VXLAN处理模块判断第一内存区域是否小于第二报文的第二报文头所需的内存区域,若第一内存区域小于第二报文的第二报文头所需的内存区域,则执行步骤1003;若第一内存区域大于或者等于第二报文的第二报文头所需的内存区域,则执行步骤1007。
步骤1003,若第一内存区域小于第二报文的第二报文头所需的内存区域,则将指针数组中的第0个指针重新指向第一内存区域,并将指针数组中的第j个指针重新指向第j-1个第二内存区域,j为小于或者等于n的正整数。
若第一内存区域小于第二报文的第二报文头所需的内存区域,则VXLAN处理模块将第一内存区域和n+1个第二内存区域全部后移一个元素,即将指针数组中的第0个指针所指向的第0个第二内存区域更换为第一内存区域,并将指针数组中的第j个指针所指向的位置更换为第j-1个第二内存区域。
比如,n的取值为2,j的取值为1或2,VXLAN处理模块将指针数组中的第0个指针重新指向第一内存区域,并将指针数组中的第1个指针重新指向第0个第二内存区域,将指针数组中的第2个指针重新指向第1个第二内存区域。
步骤1004,为第二报文的第二报文头重新分配第三内存区域,第三内存区域是不同于第一内存区域和第二内存区域的区域。
VXLAN处理模块为第二报文的报文头重新分配第三内存区域,第三内存区域大于第一内存区域。
步骤1005,将第二报文的第二报文头中的外层以太头、外层IP头和外层UDP头拷贝至第三内存区域。
可选的,VXLAN处理模块将第二报文的第二报文头中的外层以太头、外层IP头和外层UDP头拷贝至第三内存区域的同时,删除第一内存区域中存储的第二报文头中的外层以太头、外层IP头和外层UDP头,即此时第一内存区域中存储有第二报文头的VXLAN头。
步骤1006,将开始指针重新指向第三内存区域。
VXLAN处理模块将开始指针所指向的第一内存区域更换为第三内存区域,即将第三内存区域的地址赋值给开始指针。
步骤1007,将第二报文发送至第二计算节点。
在VXLAN处理模块进行重新指向后,将第二报文发送至第二计算节点。
在一个示意性的例子中,如图11所示,VXLAN处理模块第二报文对应的开始指针data和指针数组“frags数组,”开始指针data用于指示第一内存区域buf1,该frags数组包括三个指针,分别为第0个指针frags[0]、第1个指针frags[1]和第2个指针frags[2],frags[0]用于指向第0个第二内存区域buf2,frags[1]用于指向第1个第二内存区域buf3,frags[2]用于指向无效区域,若第一内存区域buf1小于第二报文的第二报文头所需的内存区域,则将frags[0]重新指向第一内存区域buf1,并将frags[1重新指向第二内存区域buf2,将frags[2]重新指向第二内存区域buf3,为第二报文的第二报文头重新分配第三内存区域buf25,将第二报文的第二报文头中的外层以太头、外层IP头和外层UDP头拷贝至第三内存区域buf25中,将开始指针重新指向第三内存区域buf25。
综上所述,本申请实施例通过为第二报文的第二报文头分配新的内存区域,将第二报文头中的前三个报文头进行拷贝,并通过改变第二报文对应的各个指针所指向的内存区域的方式,实现对第二报文的零拷贝,避免了需要将整个第二报文进行拷贝而导致的开销问题,大大缩短了第二报文的拷贝时长,从而提高了第二网关节点转发报文的效率。
以下为本申请的装置实施例,对于装置实施例中未详细阐述的部分,可以参考上述方法实施例中的细节。
请参考图12,其示出了本申请一个实施例提供的VXLAN网关的结构框图。
该VXLAN网关包括接收模块1210、VXLAN处理模块1220和发送模块1230。
接收模块1210,用于从数据链路层获取第一虚拟机VM发送的第一报文,将第一报文发送至VXLAN处理模块;
VXLAN处理模块1220,还用于将第一报文的第一报文头中的外层以太头、外层网络之间互连的协议IP头和外层用户数据报协议UDP头进行一次解封装处理,得到UDP有效载荷;
VXLAN处理模块1220,还用于剥离UDP有效载荷的VXLAN头,得到内层报文;
VXLAN处理模块1220,还用于对内层报文进行重新封装得到第二报文;
VXLAN处理模块1220,还用于将第二报文发送至发送模块;
发送模块1230,用于将接收到的第二报文发送至第二VM所在的第二计算节点。
相关细节可结合参考图4至图11所示的方法实施例。其中,接收模块1210还用于实现上述方法实施例中其他任意隐含或公开的与接收步骤相关的功能;VXLAN处理模块1220还用于实现上述方法实施例中其他任意隐含或公开的与获取步骤相关的功能;发送模块1230还用于实现上述方法实施例中其他任意隐含或公开的与处理步骤相关的功能。
请参考图13,其示出了本申请一个实施例提供的网络设备的结构框图。该网络设备包括:处理器1310、存储器1320和通信接口1330。
存储器1320中存储有至少一条指令,指令由处理器1310加载并执行以实现上述图12提供的VXLAN处理模块1220,该VXLAN处理模块1220用于执行上述各个方法实施例中的报文转发方法。处理器1310通过总线分别与存储器1320和通信接口1330相连。
通信接口1330用于与实现其它网元之间的通信。可选的,通信接口1330包括上述图12提供的接收模块1210和发送模块1230。
处理器1310包括一个或一个以上处理核心。处理器1310通过运行操作系统或应用程序模块,以实现上述各个方法实施例中VXLAN处理模块的功能。
可选的,存储器1320可存储操作系统1322、至少一个功能所需的应用程序模块1324。可选的,应用程序模块1324包括:接收单元1324a、处理单元1324b和发送单元1324c。其中,接收单元1324a用于实现有关接收的步骤;处理单元1324b用于实现有关上述方法实施例中VXLAN处理模块所执行的步骤;发送单元1324c用于实现有关发送的步骤。
此外,存储器1320可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
本领域技术人员可以理解,图13中所示出的结构并不构成上述源无线网关的限定,可以包括比图示更多或更少的部件或组合某些部件,或者不同的部件布置。
需要说明的是,本申请实施例还提供了一种VXLAN网关,该VXLAN网关包括芯片和至少一个通信接口,芯片包括可编程逻辑电路和/或程序指令,当芯片运行时用于实现上述各个方法实施例所提供的报文转发方法。
本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条指令,至少一条指令由处理器加载并执行以实现上述各个方法实施例所提供的报文转发方法。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (22)

1.一种报文转发方法,其特征在于,用于VXLAN处理模块中,所述VXLAN处理模块是设置在网关节点中的模块,所述方法包括:
从数据链路层获取第一虚拟机VM发送的第一报文;
通过一个函数将所述第一报文的第一报文头中的外层以太头、外层网络之间互连的协议IP头和外层用户数据报协议UDP头进行一次解封装处理,得到UDP有效载荷;
剥离所述UDP有效载荷的VXLAN头,得到内层报文;
对所述内层报文进行重新封装得到第二报文;
将所述第二报文发送至第二VM所在的第二计算节点。
2.根据权利要求1所述的方法,其特征在于,所述将所述第一报文的第一报文头中的外层以太头、外层网络之间互连的协议IP头和外层用户数据报协议UDP头进行一次解封装处理,得到UDP有效载荷,包括:
将所述第一报文的第一报文头中的所述外层以太头、所述外层IP头和所述外层UDP头通过一次所述解封装处理进行全内核态的剥离,得到所述UDP有效载荷。
3.根据权利要求1所述的方法,其特征在于,所述对所述内层报文进行重新封装得到第二报文,包括:
根据所述内层报文中的目的MAC地址,生成与所述目的MAC地址对应的第二报文头,所述目的MAC地址是所述第二VM的MAC地址;
根据所述第二报文头对所述内层报文进行封装,得到所述第二报文。
4.根据权利要求3所述的方法,其特征在于,所述根据所述内层报文中的目的MAC地址,生成与所述目的MAC地址对应的第二报文头,包括:
根据所述内层报文中的目的MAC地址和流表,获取与所述目的MAC地址对应的隧道IP地址,所述隧道IP地址是所述第二VM所在的第二计算节点的IP地址;
根据所述隧道IP地址,从本地缓存表中确定与所述隧道IP地址对应的下一跳MAC地址,所述本地缓存表中存储有所述隧道IP地址和所述下一跳MAC地址之间的对应关系;
根据所述隧道IP地址和所述下一跳MAC地址生成所述第二报文头,所述第二报文头中的外层目的MAC地址为所述下一跳MAC地址,所述第二报文头中的外层目的IP地址为所述隧道IP地址。
5.根据权利要求4所述的方法,其特征在于,所述根据所述隧道IP地址,从本地缓存表中确定与所述隧道IP地址对应的下一跳MAC地址,包括:
当尚未满足缓存表更新条件时,根据所述隧道IP地址,从所述本地缓存表中查找到与所述隧道IP地址对应的所述下一跳MAC地址;
其中,所述缓存表更新条件包括第一时刻与第二时刻的差值小于预设时间间隔,所述第一时刻为当前时刻,所述第二时刻为上一次查找路由表和ARP表的时刻。
6.根据权利要求5所述的方法,其特征在于,所述方法,还包括:
当从所述本地缓存表中未查找到与所述隧道IP地址对应的所述下一跳MAC地址时,从所述路由表查找到与所述隧道IP地址对应的下一跳IP地址;
根据所述下一跳IP地址,从所述ARP表中查找到与所述下一跳IP地址对应的所述下一跳MAC地址;
根据所述路由表和所述ARP表,对所述本地缓存表进行更新;
将所述第二时刻重置为所述当前时刻。
7.根据权利要求5所述的方法,其特征在于,所述方法,还包括:
当满足所述缓存表更新条件时,根据所述隧道IP地址,从所述路由表查找到与所述隧道IP地址对应的下一跳IP地址;
根据所述下一跳IP地址,从所述ARP表中查找到与所述下一跳IP地址对应的所述下一跳MAC地址;
根据所述路由表和所述ARP表,对所述本地缓存表进行更新;
将所述第二时刻重置为所述当前时刻。
8.根据权利要求4所述的方法,其特征在于,所述方法,还包括:
根据所述隧道IP地址,从所述本地缓存表中确定与所述隧道IP地址对应的输出接口,所述本地缓存表中还存储有所述隧道IP地址和所述输出接口之间的对应关系;
所述将所述第二报文发送至所述第二VM所在的所述第二计算节点,包括:
将所述第二报文通过所述输出接口发送至所述第二计算节点。
9.根据权利要求1至8任一所述的方法,其特征在于,所述将所述第二报文发送至第二VM所在的第二计算节点,包括:
获取所述第二报文对应的开始指针和指针数组,所述开始指针用于指向第一内存区域,所述指针数组包括n+1个指针,所述指针数组中的第i个指针用于指向第i个第二内存区域,所述n为正整数,所述i为小于n的非负整数;
当所述第一内存区域小于所述第二报文的第二报文头所需的内存区域时,将所述指针数组中的第0个指针重新指向所述第一内存区域,并将所述指针数组中的第j个指针重新指向第j-1个所述第二内存区域,所述j为小于或者等于n的正整数;
为所述第二报文的第二报文头重新分配第三内存区域,所述第三内存区域是不同于所述第一内存区域和所述第二内存区域的区域;
将所述第二报文的第二报文头中的外层以太头、外层IP头和外层UDP头拷贝至所述第三内存区域;
将所述开始指针重新指向所述第三内存区域;
将所述第二报文发送至所述第二计算节点。
10.根据权利要求1至8任一所述的方法,其特征在于,所述剥离所述UDP有效载荷的VXLAN头,得到内层报文,包括:
当所述UDP有效载荷中包括虚拟可扩展局域网网络标识VNI时,确定所述第一报文为VXLAN报文;
当检测到存在与所述VXLAN报文对应的VXLAN端口时,剥离所述UDP有效载荷的V XLAN头,得到所述内层报文。
11.一种VXLAN网关,其特征在于,包括VXLAN处理模块的网关节点,
接收模块,用于从数据链路层获取第一虚拟机VM发送的第一报文,将所述第一报文发送至所述VXLAN处理模块;
所述VXLAN处理模块,还用于通过一个函数将所述第一报文的第一报文头中的外层以太头、外层网络之间互连的协议IP头和外层用户数据报协议UDP头进行一次解封装处理,得到UDP有效载荷;
所述VXLAN处理模块,还用于剥离所述UDP有效载荷的VXLAN头,得到内层报文;
所述VXLAN处理模块,还用于对所述内层报文进行重新封装得到第二报文;
所述VXLAN处理模块,还用于将所述第二报文发送至发送模块;
所述发送模块,用于将接收到的所述第二报文发送至第二VM所在的第二计算节点。
12.根据权利要求11所述的VXLAN网关,其特征在于,
所述VXLAN处理模块,还用于将所述第一报文的第一报文头中的所述外层以太头、所述外层IP头和所述外层UDP头通过一次所述解封装处理进行全内核态的剥离,得到所述UDP有效载荷。
13.根据权利要求11所述的VXLAN网关,其特征在于,
所述VXLAN处理模块,还用于根据所述内层报文中的目的MAC地址,生成与所述目的MAC地址对应的第二报文头,所述目的MAC地址是所述第二VM的MAC地址;根据所述第二报文头对所述内层报文进行封装,得到所述第二报文。
14.根据权利要求13所述的VXLAN网关,其特征在于,
所述VXLAN处理模块,还用于根据所述内层报文中的目的MAC地址和流表,获取与所述目的MAC地址对应的隧道IP地址,所述隧道IP地址是所述第二VM所在的第二计算节点的IP地址;根据所述隧道IP地址,从本地缓存表中确定与所述隧道IP地址对应的下一跳MAC地址,所述本地缓存表中存储有所述隧道IP地址和所述下一跳MAC地址之间的对应关系;根据所述隧道IP地址和所述下一跳MAC地址生成所述第二报文头,所述第二报文头中的外层目的MAC地址为所述下一跳MAC地址,所述第二报文头中的外层目的IP地址为所述隧道IP地址。
15.根据权利要求14所述的VXLAN网关,其特征在于,
所述VXLAN处理模块,还用于当尚未满足缓存表更新条件时,根据所述隧道IP地址,从所述本地缓存表中查找到与所述隧道IP地址对应的所述下一跳MAC地址;
其中,所述缓存表更新条件包括第一时刻与第二时刻的差值小于预设时间间隔,所述第一时刻为当前时刻,所述第二时刻为上一次查找路由表和ARP表的时刻。
16.根据权利要求15所述的VXLAN网关,其特征在于,
所述VXLAN处理模块,还用于当从所述本地缓存表中未查找到与所述隧道IP地址对应的所述下一跳MAC地址时,从所述路由表查找到与所述隧道IP地址对应的下一跳IP地址;根据所述下一跳IP地址,从所述ARP表中查找到与所述下一跳IP地址对应的所述下一跳M AC地址;根据所述路由表和所述ARP表,对所述本地缓存表进行更新;将所述第二时刻重置为所述当前时刻。
17.根据权利要求15所述的VXLAN网关,其特征在于,
所述VXLAN处理模块,还用于当满足所述缓存表更新条件时,根据所述隧道IP地址,从所述路由表查找到与所述隧道IP地址对应的下一跳IP地址;根据所述下一跳IP地址,从所述ARP表中查找到与所述下一跳IP地址对应的所述下一跳MAC地址;根据所述路由表和所述ARP表,对所述本地缓存表进行更新;将所述第二时刻重置为所述当前时刻。
18.根据权利要求14所述的VXLAN网关,其特征在于,
所述VXLAN处理模块,还用于根据所述隧道IP地址,从所述本地缓存表中确定与所述隧道IP地址对应的输出接口,所述本地缓存表中还存储有所述隧道IP地址和所述输出接口之间的对应关系;将所述第二报文发送至所述发送模块。
19.根据权利要求11至18任一所述的VXLAN网关,其特征在于,
所述VXLAN处理模块,还用于获取所述第二报文对应的开始指针和指针数组,所述开始指针用于指向第一内存区域,所述指针数组包括n+1个指针,所述指针数组中的第i个指针用于指向第i个第二内存区域,所述n为正整数,所述i为小于n的非负整数;
所述VXLAN处理模块,还用于当所述第一内存区域小于所述第二报文的第二报文头所需的内存区域时,将所述指针数组中的第0个指针重新指向所述第一内存区域,并将所述指针数组中的第j个指针重新指向第j-1个所述第二内存区域,所述j为小于或者等于n的正整数;
所述VXLAN处理模块,还用于为所述第二报文的第二报文头重新分配第三内存区域,所述第三内存区域是不同于所述第一内存区域和所述第二内存区域的区域;
所述VXLAN处理模块,还用于将所述第二报文的第二报文头中的外层以太头、外层IP头和外层UDP头拷贝至所述第三内存区域;
所述VXLAN处理模块,还用于将所述开始指针重新指向所述第三内存区域;
所述VXLAN处理模块,还用于将所述第二报文发送至所述发送模块。
20.根据权利要求11至18任一所述的VXLAN网关,其特征在于,所述VXLAN处理模块,还用于当所述UDP有效载荷中包括虚拟可扩展局域网网络标识VNI时,确定所述第一报文为VXLAN报文;当检测到存在与所述VXLAN报文对应的VXLAN端口时,剥离所述UDP有效载荷的VXLAN头,得到所述内层报文。
21.一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条指令,至少一条指令由处理器加载并执行以实现权利要求1至10任一所述的报文转发方法。
22.一种网络设备,其特征在于,所述网络设备包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现VXLAN处理模块,所述VXL AN处理模块用于执行权利要求1至10任一所述的报文转发方法。
CN201810050254.2A 2018-01-18 2018-01-18 报文转发方法及vxlan网关 Active CN108183919B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810050254.2A CN108183919B (zh) 2018-01-18 2018-01-18 报文转发方法及vxlan网关

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810050254.2A CN108183919B (zh) 2018-01-18 2018-01-18 报文转发方法及vxlan网关

Publications (2)

Publication Number Publication Date
CN108183919A CN108183919A (zh) 2018-06-19
CN108183919B true CN108183919B (zh) 2020-09-08

Family

ID=62550982

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810050254.2A Active CN108183919B (zh) 2018-01-18 2018-01-18 报文转发方法及vxlan网关

Country Status (1)

Country Link
CN (1) CN108183919B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109194558B (zh) * 2018-07-25 2021-03-05 东软集团股份有限公司 隧道报文认证转发方法及系统
CN112055094B (zh) * 2019-06-06 2022-04-29 烽火通信科技股份有限公司 一种arp查找与arpmiss处理的实现方法及系统
CN111404843A (zh) * 2020-03-05 2020-07-10 广东睿江云计算股份有限公司 一种iass网络平台下处理arp数据包的优化方法及其系统
CN111585863B (zh) * 2020-06-11 2022-03-01 国家计算机网络与信息安全管理中心 虚拟可扩展局域网报文处理设备及其数据处理方法
CN113328921B (zh) * 2021-05-10 2022-07-26 联想(北京)有限公司 一种虚拟网络的数据链路层通信方法及装置
CN113872833B (zh) * 2021-09-30 2023-11-07 新华三信息安全技术有限公司 一种检测路径可达的方法、系统及设备
CN115766063B (zh) * 2022-09-26 2024-09-27 中国电子科技集团公司第三十研究所 数据传输方法、装置、设备及介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103200085A (zh) * 2013-04-16 2013-07-10 中航网信(北京)科技有限公司 一种实现vxlan报文线速收发的方法及系统
CN104350714A (zh) * 2014-05-29 2015-02-11 华为技术有限公司 一种报文转发方法和VxLAN网关
CN106330649A (zh) * 2015-06-18 2017-01-11 杭州华三通信技术有限公司 一种跨软件定义网络的数据报文转发方法和装置
US9736211B2 (en) * 2012-08-27 2017-08-15 Vmware, Inc. Method and system for enabling multi-core processing of VXLAN traffic

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10355930B2 (en) * 2013-03-14 2019-07-16 Fortinet, Inc. System and method of subnetting a virtual network identifier
US9374323B2 (en) * 2013-07-08 2016-06-21 Futurewei Technologies, Inc. Communication between endpoints in different VXLAN networks
EP2928123B1 (en) * 2014-04-02 2019-11-06 6Wind Method for processing VXLAN data units
CN104486196A (zh) * 2014-12-23 2015-04-01 上海市共进通信技术有限公司 实现对pppoe封装的组播协议报文处理的方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9736211B2 (en) * 2012-08-27 2017-08-15 Vmware, Inc. Method and system for enabling multi-core processing of VXLAN traffic
CN103200085A (zh) * 2013-04-16 2013-07-10 中航网信(北京)科技有限公司 一种实现vxlan报文线速收发的方法及系统
CN104350714A (zh) * 2014-05-29 2015-02-11 华为技术有限公司 一种报文转发方法和VxLAN网关
CN106330649A (zh) * 2015-06-18 2017-01-11 杭州华三通信技术有限公司 一种跨软件定义网络的数据报文转发方法和装置

Also Published As

Publication number Publication date
CN108183919A (zh) 2018-06-19

Similar Documents

Publication Publication Date Title
CN108183919B (zh) 报文转发方法及vxlan网关
US10237177B2 (en) Transfer device and transfer system
CN112787921B (zh) 报文传输方法、代理节点及存储介质
CN113411243B (zh) 数据传输方法及装置
EP4113919A1 (en) Method for forwarding message in srv6 service function chain, sff and sf device
EP4040743B1 (en) Message transmission method and proxy node
US20150358232A1 (en) Packet Forwarding Method and VXLAN Gateway
US10461958B2 (en) Packet transmission method and apparatus
CN108718269B (zh) 报文处理方法及装置
US20170085479A1 (en) Network control method, network system, apparatus, and program
US20230137778A1 (en) Packet Sending Method and Apparatus, Network Device, System, and Storage Medium
EP3223476A1 (en) Method, system, and apparatus for preventing tromboning in inter-subnet traffic within data center architectures
CN113132202B (zh) 一种报文传输方法及相关设备
CN110311860B (zh) Vxlan下多链路负载均衡方法及装置
CN107645433B (zh) 报文转发方法及装置
US11310081B2 (en) Packet transmission method and apparatus
CN112134776B (zh) 生成组播转发表项的方法和接入网关
CN112532563B (zh) 报文的发送方法和装置
KR20220047854A (ko) Sr 네트워크에서의 패킷 포워딩 방법, 장치 및 시스템
US11621915B2 (en) Packet forwarding method, route sending and receiving method, and apparatus
CN115426305A (zh) 报文处理方法、装置及系统
US11611508B2 (en) Packet forwarding method and network device
CN113055268A (zh) 隧道流量负载均衡的方法、装置、设备及介质
US12126533B2 (en) Packet transmission method, proxy node, and storage medium
CN116668375B (zh) 一种报文分流方法、装置、网络设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20220211

Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province

Patentee after: Huawei Cloud Computing Technologies Co.,Ltd.

Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd.

TR01 Transfer of patent right