一文带你搞懂VXLAN报文格式,网工先收藏!

网络东西不好懂 2024-09-19 21:46:36

VXLAN通过在以太网帧外添加UDP封装和VXLAN头部,实现了网络的可扩展性和灵活性,支持多租户环境下的大规模二层网络扩展。本文将详细介绍VXLAN的报文格式、各个字段的具体含义。

VXLAN基于MAC-in-UDP的封装机制,即将原始以太网帧封装在UDP报文中,并通过IP网络进行传输。VXLAN报文的发送和接收由VTEP(VXLAN Tunnel Endpoint)完成。VTEP负责在物理网络和虚拟网络之间进行封装和解封装操作。VXLAN通过IP网络建立隧道,实现跨物理网络的二层网络扩展。

VXLAN报文格式

VXLAN报文格式是在传统以太网帧的基础上,通过添加额外的VXLAN头部、UDP头部、IP头部和外层以太网头部来实现的。

VXLAN报文结构+------------------------+| Outer Ethernet Header |+------------------------+| Outer IP Header |+------------------------+| Outer UDP Header |+------------------------+| VXLAN Header |+------------------------+| Inner Ethernet Frame |+------------------------+

如上图所示,VXLAN报文主要由五个部分组成:外层以太网头部、外层IP头部、外层UDP头部、VXLAN头部以及内层以太网帧。每个部分都有其特定的功能,以下分别进行详细说明。

外层以太网头部(Outer Ethernet Header)

外层以太网头部是VXLAN报文的最外层封装,用于在物理网络中传输报文。其结构与传统以太网帧头部相同,主要包含以下字段:

目的MAC地址(Destination MAC Address,MAC DA):这是报文的目标MAC地址,通常是下一跳设备(如交换机或路由器)的MAC地址。在VTEP之间传输时,目的MAC地址指向远端VTEP的MAC地址。源MAC地址(Source MAC Address,MAC SA):这是报文的源MAC地址,通常是当前VTEP设备的MAC地址。802.1Q标签(802.1Q Tag):这是一个可选字段,用于在报文中携带VLAN Tag信息。VLAN Tag用于在多租户环境中实现网络隔离。以太网类型(Ethernet Type):该字段指示帧的上层协议类型,例如IPv4、IPv6等。

外层以太网头部的主要作用是确保VXLAN报文能够在物理网络中被正常传输和路由。

外层IP头部(Outer IP Header)

外层IP头部是用于在IP网络中传输VXLAN报文的封装部分。其结构与传统的IP头部相同,主要包括以下字段:

版本(Version):指定IP协议的版本,通常为IPv4(值为4)或IPv6(值为6)。头部长度(Header Length):指示IP头部的长度。服务类型(Type of Service,ToS):用于指示报文的服务质量。总长度(Total Length):表示整个IP报文的长度,包括IP头部和数据部分。标识(Identification):用于标识IP分片。标志(Flags):控制和指示IP分片。片偏移(Fragment Offset):指示分片的位置。生存时间(Time to Live,TTL):该字段指定报文在网络中可以存在的最大跳数。每经过一个网络设备,TTL值减1,当TTL值为0时,报文将被丢弃。协议类型(Protocol Type):该字段指定上层协议类型,对于VXLAN报文,该值通常为17,表示UDP协议。头部校验和(Header Checksum):用于检测IP头部在传输过程中是否发生了错误。源IP地址(Source IP Address,IP SA):这是报文的源IP地址,通常是VTEP的IP地址。目的IP地址(Destination IP Address,IP DA):这是报文的目标IP地址,通常是远端VTEP的IP地址。

外层IP头部的主要作用是通过IP网络对VXLAN报文进行路由和转发。

外层UDP头部(Outer UDP Header)

外层UDP头部用于封装VXLAN头部和内层以太网帧。其结构与传统的UDP头部相同,主要包括以下字段:

源端口号(Source Port):这是UDP报文的源端口号,通常通过哈希算法计算得到。源端口号用于实现负载均衡和多路径传输。目的端口号(Destination Port):这是UDP报文的目标端口号,对于VXLAN报文,该端口号固定为4789,这是VXLAN的标准端口。长度(Length):该字段表示整个UDP报文的长度,包括头部和数据部分。校验和(Checksum):该字段用于检测UDP报文在传输过程中是否发生了错误。

外层UDP头部的主要作用是将VXLAN头部和内层以太网帧封装为UDP数据,并通过IP网络进行传输。

VXLAN头部(VXLAN Header)

VXLAN头部是VXLAN报文的核心部分,用于标识和区分不同的VXLAN网络。VXLAN头部结构如下:

+----------------------+----------------------+----------------------+----------------------+| 8-bit Flags | Reserved (24 bits) | VXLAN Network Identifier (VNI) (24 bits) | Reserved (8 bits) |+----------------------+----------------------+----------------------+----------------------+VXLAN标志位(VXLAN Flags):该字段占8位,表示VXLAN的标志。当前仅使用第3位,固定为1,其余位设置为0。VNI(VXLAN Network Identifier):VNI是24位的VXLAN网络标识符,用于区分不同的VXLAN网络。通过VNI,VTEP可以将来自不同虚拟网络的流量进行隔离和标识。保留字段(Reserved):其余的32位均为保留字段,必须设置为0,以备将来扩展使用。

VXLAN头部的主要作用是通过VNI标识不同的虚拟网络,实现大规模网络虚拟化和多租户隔离。

内层以太网帧(Inner Ethernet Frame)

内层以太网帧是来自虚拟机或物理机的原始以太网帧,其结构与传统以太网帧相同,主要包括以下字段:

目的MAC地址(Destination MAC Address,MAC DA):目标设备的MAC地址。源MAC地址(Source MAC Address,MAC SA):源设备的MAC地址。VLAN标签(VLAN Tag):可选字段,用于在虚拟网络中携带VLAN信息。以太网类型(Ethernet Type):指示上层协议类型,如IPv4、IPv6等。数据字段(Data Field):包括上层协议数据,如IP报文、TCP/UDP数据等。

内层以太网帧在VXLAN报文中的作用是携带实际的用户数据,通过VTEP之间的隧道进行传输。

VXLAN报文传输流程

在VXLAN网络中,报文的传输主要依赖于VTEP的封装和解封装操作。下面我们详细介绍VXLAN报文的传输流程。

报文发送过程

当虚拟机(VM)发送数据时,报文首先生成内层以太网帧。然后,位于虚拟机所在主机上的VTEP会对该帧进行VXLAN封装,具体过程如下:

封装内层以太网帧:VTEP接收到虚拟机发送的内层以太网帧,并确定该帧应通过VXLAN隧道传输。添加VXLAN头部:VTEP根据虚拟机所在的虚拟网络,为内层以太网帧添加VXLAN头部。具体操作包括设置VXLAN Flags、分配或检索VNI,并将其填充到VXLAN头部中。添加UDP头部:在VXLAN头部前添加UDP头部。源端口号通过哈希算法计算得到,以支持负载均衡和多路径传输;目的端口号固定为4789,即VXLAN的标准端口。添加IP头部:在UDP头部前添加IP头部。源IP地址为本地VTEP的IP地址,目的IP地址为目标VTEP的IP地址。IP头部还包括TTL值、协议类型等信息。添加外层以太网头部:最后,在IP头部前添加外层以太网头部。源MAC地址为本地VTEP的MAC地址,目的MAC地址为目标VTEP的MAC地址。如果需要,802.1Q VLAN标签也会被添加到外层以太网头部中。发送报文:封装完成后,报文通过物理网络传输到目标VTEP。报文接收过程

目标VTEP收到封装后的VXLAN报文后,会对其进行解封装,具体过程如下:

接收外层以太网报文:目标VTEP首先接收到外层以太网报文,解析出外层以太网头部、IP头部和UDP头部。解析IP头部:目标VTEP解析IP头部,验证目标IP地址是否与本地VTEP匹配,并检查TTL值。解析UDP头部:目标VTEP解析UDP头部,验证目的端口号是否为4789,以确保报文是VXLAN报文。解析VXLAN头部:目标VTEP解析VXLAN头部,提取VNI,确定报文所属的虚拟网络。提取内层以太网帧:根据VXLAN头部中的VNI,目标VTEP将内层以太网帧提取出来,并根据内层以太网帧的目的MAC地址,将其转发到目标虚拟机或物理机。转发内层报文:内层以太网帧被送到目标虚拟机或物理机,完成数据的传输。VXLAN各字段详细解析

为了深入理解VXLAN报文格式,下面将对各个字段进行更详细的解析,解释其具体作用和配置要求。

VXLAN头部详细解析

VXLAN头部在整个报文中起到核心作用,它的设计使得VXLAN能够有效地支持大规模的虚拟网络。VXLAN头部由以下几个部分组成:

VXLAN Flags字段大小:8位描述:VXLAN Flags用于指示VXLAN报文的特定特性。当前,只有第3位(最低位从0开始编号)被定义,用于表示该报文是否包含有效的VNI信息。其余位目前未定义,必须设置为0。取值:第3位设置为1:表示VXLAN报文包含有效的VNI信息。其余位设置为0。作用:通过VXLAN Flags,VTEP可以快速识别报文是否为VXLAN封装的报文,并根据标志位决定是否解析VNI字段。VXLAN Network Identifier (VNI)字段大小:24位描述:VNI是VXLAN网络标识符,用于区分不同的VXLAN段或虚拟网络。通过VNI,VTEP能够将来自不同虚拟网络的流量进行隔离和标识。取值范围:0 到 16,777,215(2^24 - 1)作用:VNI允许在同一物理网络上创建多达16,777,216个逻辑隔离的虚拟网络,极大地扩展了传统VLAN的限制(4096个VLAN)。配置要求:每个VXLAN段需要唯一的VNI。VTEP之间需要共享相同的VNI映射关系,确保正确的流量隔离和转发。Reserved字段字段大小:32位(包括24位和8位)描述:这部分字段目前未被定义,必须设置为0,保留以备将来使用。作用:保留字段为将来VXLAN协议的扩展提供了空间,确保当前协议的向后兼容性。外层UDP头部详细解析

外层UDP头部在VXLAN报文中起到将VXLAN报文封装在UDP报文中的作用,使其能够通过现有的IP网络进行传输。下面对UDP头部的各个字段进行详细解析:

源端口号(Source Port)字段大小:16位描述:源端口号由发送VTEP根据特定的哈希算法计算得到。该端口号用于支持负载均衡和多路径传输。取值范围:0 到 65535作用:不同的源端口号可以用于区分不同的VXLAN隧道,增强流量的分散性。源端口号的变化有助于在物理网络中实现负载均衡,通过不同的路径分发流量,提高网络的带宽利用率。配置要求:发送VTEP需要实现一种策略来动态分配和管理源端口号,以确保不同隧道的端口号分布均匀。目的端口号(Destination Port)字段大小:16位描述:目的端口号固定为4789,这是VXLAN的标准端口号,用于标识VXLAN报文。作用:通过固定的目的端口号,网络设备能够快速识别并处理VXLAN报文。保证了VXLAN报文的一致性和可预测性,方便VTEP之间的互操作。取值:4789配置要求:网络设备(如防火墙、路由器)需要允许目的端口号为4789的UDP流量通过,以确保VXLAN报文能够正常传输。长度(Length)字段大小:16位描述:该字段表示整个UDP报文的长度,包括UDP头部和数据部分。取值范围:8 到 65535作用:确保接收端能够正确解析整个UDP报文的长度,避免报文截断或溢出。支持不同大小的VXLAN报文,提高协议的灵活性。配置要求:在发送和接收端,确保UDP报文长度的正确性,防止由于长度字段错误导致的报文处理问题。校验和(Checksum)字段大小:16位描述:校验和用于检测UDP报文在传输过程中是否发生了错误。取值范围:0 到 65535作用:提供基本的数据完整性检查,确保UDP报文在传输过程中未被篡改或损坏。增强了报文传输的可靠性。配置要求:校验和必须被正确计算和验证,以确保数据的完整性。在某些情况下,校验和可以被禁用(值为0),但这会降低报文传输的可靠性。外层IP头部详细解析

外层IP头部用于将VXLAN报文在IP网络中进行路由和转发。以下是对外层IP头部各字段的详细解析:

版本(Version)字段大小:4位描述:指定IP协议的版本,通常为IPv4(值为4)或IPv6(值为6)。取值:4:IPv46:IPv6作用:确定IP头部的格式和解析方式。影响后续IP报文处理的步骤和方法。配置要求:VTEP需要根据网络环境选择合适的IP版本,确保与网络中的其他设备兼容。头部长度(Header Length)字段大小:4位描述:指示IP头部的长度,以4字节为单位。取值范围:最小值为5(20字节),最大值取决于IP版本。作用:确定IP头部的实际长度,帮助接收端正确解析IP报文。配置要求:确保IP头部长度字段正确反映实际的头部长度,防止报文解析错误。服务类型(Type of Service,ToS)字段大小:8位描述:用于指示报文的服务质量,包括优先级和延迟敏感性等。作用:影响IP报文在网络中的转发优先级。支持不同类型流量的服务质量管理。配置要求:网络设备可以根据ToS字段实现流量分类和优先级调度。总长度(Total Length)字段大小:16位描述:表示整个IP报文的长度,包括IP头部和数据部分。取值范围:20(IPv4最小)到 65535 字节作用:确保接收端能够正确解析整个IP报文的长度,避免报文截断或溢出。配置要求:确保发送端和接收端对报文长度的处理一致,避免因长度字段错误导致的报文处理问题。标识(Identification)字段大小:16位描述:用于标识IP分片,帮助接收端将分片重新组装。作用:在报文被分片传输时,确保分片能够被正确识别和组装。配置要求:在分片传输场景下,确保标识字段的一致性,以避免分片重组错误。标志(Flags)字段大小:3位描述:控制和指示IP分片。作用:控制报文是否可以被分片。指示是否存在更多的分片。配置要求:根据网络需求和MTU配置,适当设置标志字段,优化报文传输效率。片偏移(Fragment Offset)字段大小:13位描述:指示分片的位置,用于帮助接收端重新组装报文。作用:确保分片报文能够被正确排序和组装。配置要求:在分片传输场景下,确保片偏移字段的准确性,以避免分片重组错误。生存时间(Time to Live,TTL)字段大小:8位描述:指定报文在网络中可以存在的最大跳数。每经过一个网络设备,TTL值减1,当TTL值为0时,报文将被丢弃。作用:防止报文在网络中无限循环。控制报文在网络中的生命周期。配置要求:根据网络拓扑和需求,合理设置TTL值,平衡报文到达目的地的概率和网络资源的消耗。协议类型(Protocol Type)字段大小:8位描述:指定上层协议类型,对于VXLAN报文,该值通常为17,表示UDP协议。作用:确保接收端能够正确解析和处理上层协议数据。支持多种上层协议的传输和解析。配置要求:VTEP需要正确设置协议类型,以确保UDP报文能够被正确识别和处理。头部校验和(Header Checksum)字段大小:16位描述:用于检测IP头部在传输过程中是否发生了错误。作用:提供IP头部的基本数据完整性检查。确保报文在传输过程中未被篡改或损坏。配置要求:确保发送端和接收端正确计算和验证校验和,以提高报文传输的可靠性。源IP地址(Source IP Address,IP SA)字段大小:IPv4:32位IPv6:128位描述:这是报文的源IP地址,通常是VTEP的IP地址。作用:标识报文的发送端,支持路由和转发。支持源IP地址过滤和安全策略的实施。配置要求:确保源IP地址的准确性和唯一性,避免地址冲突和路由错误。目的IP地址(Destination IP Address,IP DA)字段大小:IPv4:32位IPv6:128位描述:这是报文的目标IP地址,通常是远端VTEP的IP地址。作用:确保报文能够正确路由到目标VTEP。支持目标IP地址过滤和安全策略的实施。配置要求:确保目的IP地址的准确性,避免报文传输到错误的目标。外层以太网头部详细解析

外层以太网头部用于在物理网络中传输VXLAN报文,其结构与传统以太网帧头部相同,但在VXLAN环境下具有特定的配置和作用。

目的MAC地址(Destination MAC Address,MAC DA)字段大小:48位描述:这是报文的目标MAC地址,通常是下一跳设备(如交换机或路由器)的MAC地址。在VTEP之间传输时,目的MAC地址指向远端VTEP的MAC地址。作用:确保报文能够在物理网络中被正确路由到目标VTEP。支持基于MAC地址的转发和过滤。配置要求:确保目的MAC地址的准确性,避免报文传输到错误的设备。在多路径和负载均衡场景下,可能需要动态更新目的MAC地址。源MAC地址(Source MAC Address,MAC SA)字段大小:48位描述:这是报文的源MAC地址,通常是当前VTEP设备的MAC地址。作用:标识报文的发送端,支持源MAC地址过滤和安全策略的实施。影响基于MAC地址的流量统计和监控。配置要求:确保源MAC地址的准确性和唯一性,避免地址冲突和网络冲突。802.1Q标签(802.1Q Tag)字段大小:32位(可选)描述:这是一个可选字段,用于在报文中携带VLAN Tag信息。VLAN Tag用于在多租户环境中实现网络隔离。作用:支持多租户环境中的VLAN隔离,确保不同租户的流量互不干扰。允许在物理网络中通过VLAN进行流量分类和管理。配置要求:在需要VLAN隔离的场景下,启用802.1Q标签。确保VLAN ID的一致性和正确性,避免跨租户的流量泄漏。以太网类型(Ethernet Type)字段大小:16位描述:该字段指示帧的上层协议类型,例如IPv4、IPv6等。取值示例:0x0800:IPv40x86DD:IPv60x0806:ARP作用:确保报文能够被正确解析和处理。支持多种上层协议的传输和解析。配置要求:根据实际应用场景,正确设置以太网类型字段,以确保上层协议能够被正确识别和处理。内层以太网帧详细解析

内层以太网帧是VXLAN报文中的实际用户数据,其结构与传统以太网帧相同,但在VXLAN环境下,内层以太网帧的处理和传输具有特定的要求和优化。

目的MAC地址(Destination MAC Address,MAC DA)字段大小:48位描述:目标设备的MAC地址,指向接收端的设备。作用:确保内层以太网帧能够被正确转发到目标设备。支持基于MAC地址的流量分类和安全策略。配置要求:确保目标MAC地址的准确性,避免流量传输错误。在多租户和大规模环境下,动态管理MAC地址表,防止地址冲突和资源浪费。源MAC地址(Source MAC Address,MAC SA)字段大小:48位描述:源设备的MAC地址,指向发送端的设备。作用:标识内层以太网帧的发送端,支持源MAC地址过滤和安全策略的实施。影响基于MAC地址的流量统计和监控。配置要求:确保源MAC地址的准确性和唯一性,避免地址冲突和网络冲突。VLAN标签(VLAN Tag)字段大小:32位(可选)描述:可选字段,用于在内层以太网帧中携带VLAN信息,支持网络的逻辑隔离。作用:支持多租户环境中的VLAN隔离,确保不同租户的流量互不干扰。允许在虚拟网络中通过VLAN进行流量分类和管理。配置要求:在需要VLAN隔离的场景下,启用内层VLAN标签。确保VLAN ID的一致性和正确性,避免跨租户的流量泄漏。以太网类型(Ethernet Type)字段大小:16位描述:指示内层以太网帧的上层协议类型,如IPv4、IPv6等。取值示例:0x0800:IPv40x86DD:IPv60x0806:ARP作用:确保内层以太网帧的上层协议能够被正确解析和处理。支持多种上层协议的传输和解析。配置要求:根据实际应用场景,正确设置内层以太网类型字段,以确保上层协议能够被正确识别和处理。数据字段(Data Field)字段大小:46到1500字节(可变)描述:包括上层协议数据,如IP报文、TCP/UDP数据等,是内层以太网帧的实际用户数据。作用:传输实际的应用数据和网络流量。支持多种协议和应用场景。配置要求:确保数据字段的完整性和准确性,避免数据损坏和传输错误。根据网络需求,优化数据字段的大小和分段,以提高传输效率和性能。VXLAN报文封装和解封装流程

为了更好地理解VXLAN报文格式,下面将详细介绍VXLAN报文的封装和解封装流程,说明各个字段在实际操作中的作用和配置要求。

报文封装流程

当虚拟机(VM)发送数据时,VTEP需要对内层以太网帧进行封装,以便通过物理网络传输到目标VTEP。具体的封装流程如下:

接收内层以太网帧:VTEP从虚拟机接收到内层以太网帧,包含源MAC地址、目的MAC地址、VLAN标签(如果有)和数据字段。添加VXLAN头部:设置VXLAN Flags字段的第3位为1,其余位为0。分配或检索VNI,以标识该帧所属的VXLAN网络。填充保留字段为0。将VXLAN头部添加到内层以太网帧之前。添加UDP头部:计算源端口号,通常通过哈希算法基于源IP地址、目的IP地址、源端口号等信息生成。设置目的端口号为4789。计算UDP校验和,确保报文的完整性。将UDP头部添加到VXLAN头部之前。添加IP头部:设置源IP地址为本地VTEP的IP地址。设置目的IP地址为目标VTEP的IP地址。设置TTL值,根据网络拓扑选择合适的值(例如64)。设置协议类型为17,表示UDP。计算IP校验和,确保报文的完整性。将IP头部添加到UDP头部之前。添加外层以太网头部:设置源MAC地址为本地VTEP的MAC地址。设置目的MAC地址为目标VTEP的MAC地址,通过查找路由表或MAC地址表获得。如需,添加802.1Q VLAN标签以支持多租户隔离。设置以太网类型字段为0x0800(IPv4)或0x86DD(IPv6),根据IP版本选择。将外层以太网头部添加到IP头部之前。发送报文:封装完成后,VTEP通过物理网络将报文发送到目标VTEP。报文解封装流程

目标VTEP接收到封装后的VXLAN报文后,需要对其进行解封装,以提取内层以太网帧并将其转发到目标虚拟机或物理机。具体的解封装流程如下:

接收外层以太网报文:目标VTEP从物理网络接收到外层以太网报文,包含外层以太网头部、IP头部、UDP头部、VXLAN头部和内层以太网帧。解析外层以太网头部:检查目的MAC地址是否匹配本地VTEP的MAC地址。如需,解析802.1Q VLAN标签以支持多租户隔离。验证以太网类型字段,确保报文为IP协议(0x0800或0x86DD)。解析IP头部:验证目的IP地址是否匹配本地VTEP的IP地址。检查TTL值,确保报文未超出允许的跳数。验证协议类型字段为17,表示UDP协议。解析UDP头部:验证目的端口号为4789,确保报文为VXLAN报文。校验UDP校验和,确保报文在传输过程中未被篡改或损坏。解析VXLAN头部:检查VXLAN Flags字段的第3位是否为1,确认VNI字段有效。提取VNI,确定报文所属的VXLAN网络。验证保留字段为0,确保报文格式正确。提取内层以太网帧:根据VNI,将内层以太网帧提取出来,准备转发到目标虚拟机或物理机。如有必要,移除内层VLAN标签,确保内层以太网帧的正确性。转发内层报文:将提取的内层以太网帧发送到目标虚拟机或物理机,完成数据传输。
0 阅读:0

网络东西不好懂

简介:感谢大家的关注