2. VXLAN封装与报文转发机制
VXLAN(Virtual eXtensible LAN)之所以能在数据中心里把二层网络“拉大”,核心在于它把原始以太网帧整体塞进一个UDP报文里,再交给底层IP网络转发。理解这一节,关键要抓住三件事:VXLAN头部长什么样、VTEP是谁、VNI和VLAN怎么对应。只要这三件事清楚,内外层封装与解封装流程就顺理成章。
一、VXLAN头部格式:8字节的“身份证”
VXLAN的封装结构是:外层以太网头 + 外层IP头 + 外层UDP头 + VXLAN头 + 原始以太网帧。其中VXLAN头固定8字节,字段如下:
- Flags(8位):最高位I位为1时表示VNI字段有效,通常取0x08。
- Reserved(24位):保留字段,发送时置0,接收时忽略。
- VNI(24位):VXLAN网络标识符,取值1~16777215,用于区分不同的VXLAN段。
- Reserved(8位):保留字段,置0。
外层UDP目的端口默认使用4789(早期部分实现使用8472),源端口由内层帧的哈希计算得出,用于ECMP负载分担。外层IP头中,源IP是本端VTEP地址,目的IP是对端VTEP地址,协议号为17(UDP)。
二、VTEP:VXLAN的“出入口”
VTEP(VXLAN Tunnel Endpoint)是VXLAN隧道的端点,负责封装和解封装。它可以是物理交换机、路由器,也可以是支持VXLAN的虚拟交换机(如Linux bridge、OVS)。每个VTEP至少有一个用于建立隧道的IP地址,称为VTEP IP,通常使用Loopback接口地址,以保证稳定性。
VTEP的核心职责有三项:
- 识别本地哪些VLAN或子网需要映射到某个VNI;
- 维护“目的MAC → 远端VTEP IP”的映射表,即VXLAN转发表;
- 对出方向报文加封装,对入方向报文解封装。
在EVPN场景下,VTEP之间的映射关系不再依赖泛洪学习,而是由BGP EVPN路由(Type 2 MAC/IP通告、Type 3 IMET路由)动态下发,这也是VXLAN EVPN相比传统VXLAN Flood-and-Learn的最大区别。
三、VNI与VLAN映射:本地标识与全局标识的转换
VLAN是本地概念,只有12位,最多4094个;VNI是全局概念,24位,可支持约1600万个段。二者映射关系通常配置在VTEP的接入侧接口或子接口上。例如:
interface nve1
source 10.0.0.1
member vni 10010
ingress-replication protocol bgp
!
interface Ethernet1/1.100
encapsulation dot1q 100
vlan-mapping vni 10010
这段配置的含义是:接入接口收到VLAN 100的帧后,查表映射到VNI 10010;出方向则把VNI 10010的帧还原为VLAN 100。映射关系必须两端一致,否则会出现“同VNI不同VLAN”导致转发异常。
四、内外层封装与解封装流程
下面以主机A(VLAN 100,VNI 10010)访问主机B为例,说明完整转发过程。假设A所在VTEP为VTEP1(10.0.0.1),B所在VTEP为VTEP2(10.0.0.2)。
出方向(封装):
- 主机A发出原始以太网帧,目的MAC为B的MAC,VLAN Tag为100。
- VTEP1接入接口收到帧,根据VLAN 100映射到VNI 10010。
- VTEP1查VXLAN转发表,找到目的MAC对应的远端VTEP IP为10.0.0.2。
- VTEP1添加VXLAN头,VNI=10010;再添加UDP头(目的端口4789)、外层IP头(源10.0.0.1,目的10.0.0.2)、外层以太网头。
- 封装后的报文在底层IP网络中转发。
入方向(解封装):
- VTEP2收到UDP报文,目的端口为4789,识别为VXLAN报文。
- 检查VXLAN头中VNI=10010,确认本地存在该VNI。
- 剥离外层以太网头、IP头、UDP头和VXLAN头,取出内层原始以太网帧。
- 根据VNI 10010映射回VLAN 100,从对应接口转发给主机B。
整个过程对主机A和B完全透明,它们感知不到底层IP网络的存在。
五、关键判断与常见问题
在实际排障中,判断VXLAN转发是否正常,可以按以下顺序检查:
- VNI是否一致:两端VTEP的VNI必须相同,否则解封装后无法映射回正确VLAN。
- VTEP IP是否可达:底层IP网络必须能ping通对端VTEP IP,且UDP 4789未被ACL拦截。
- 转发表是否有表项:EVPN场景下检查BGP EVPN邻居是否Up,Type 2路由是否收到;Flood-and-Learn场景下检查是否有泛洪学习到的MAC表项。
- MTU是否足够:VXLAN封装增加约50字节(外层以太网14 + IP 20 + UDP 8 + VXLAN 8),底层网络MTU建议至少1600,否则大包会被分片或丢弃。
掌握以上内容后,VXLAN就不再是“黑盒”。封装时关注VNI、VTEP IP和UDP端口;解封装时关注VNI映射和转发表命中。把这两条路径走通,后续EVPN路由通告和分布式网关的学习就会水到渠成。