2、VXLAN报文封装:VXLAN头部结构、VTEP设备角色、VNI的作用与范围
好,咱们直接进入正题。VXLAN这东西,说白了就是给二层网络加了个“隧道”。你想想看,传统VLAN只有12位,最多4096个,大云平台里根本不够用。VXLAN把这个问题解决了,怎么解决的?靠的就是报文封装。
2.1 VXLAN头部结构:拆开看看里面长啥样
我刚开始学VXLAN的时候,最头疼的就是那一堆头部。其实没那么复杂,咱们一层层剥开来看。
一个完整的VXLAN报文,从外到内是这样的:
+-------------------------------+
| 外层MAC头部 (14字节) |
+-------------------------------+
| 外层IP头部 (20字节) |
+-------------------------------+
| 外层UDP头部 (8字节) |
| 目的端口: 4789 (IANA分配) |
+-------------------------------+
| VXLAN头部 (8字节) |
| Flags(8bit) | Reserved(24bit)|
| VNI(24bit) | Reserved(8bit) |
+-------------------------------+
| 原始二层帧 (内层报文) |
+-------------------------------+
嗯,这里要注意几个关键点。
外层UDP端口号4789。我记得早期有些厂商用别的端口,后来IANA统一分配了4789。我在项目里遇到过,如果防火墙没放通这个端口,隧道死活建不起来。排查了半天,最后发现是安全策略的问题。
VXLAN头部那8个字节,真正有用的就两个地方:
- Flags字段:第5位必须置1,表示这是一个合法的VXLAN帧。其他位保留,填0就行。
- VNI字段:24位,这是核心。后面我会详细讲。
剩下的24位Reserved和8位Reserved,标准里说填0。但我见过有些厂商拿这些位做私有的QoS标记,跨厂商互通时就会出问题。所以我的建议是:别碰保留位,老老实实填0。
2.2 VTEP设备角色:隧道的两端是谁
VTEP,全称VXLAN Tunnel End Point。你把它想象成隧道的入口和出口就行。
每个VTEP设备有两个关键角色:
- 封装/解封装引擎:收到虚拟机发出的原始二层帧,VTEP负责给它套上VXLAN头部、UDP头部、IP头部、MAC头部,扔到物理网络里。对端VTEP收到后,再一层层剥掉,还原出原始帧。
- 转发表维护者:VTEP内部维护着一张映射表,记录着“虚拟机MAC地址 → 对端VTEP的IP地址”。这张表怎么来的?可以通过静态配置、多播学习,或者控制协议(比如BGP EVPN)。
我个人习惯把VTEP分为两类:
| 类型 | 典型设备 | 特点 |
|---|---|---|
| 软件VTEP | Open vSwitch、Linux Bridge | 部署在宿主机上,灵活,性能依赖CPU |
| 硬件VTEP | TOR交换机、路由器 | 硬件卸载,性能高,但成本也高 |
我在实际项目中,大部分场景用的是软件VTEP。为什么?因为便宜、灵活。你想想看,一台服务器上跑几十台虚拟机,每台虚拟机都可能属于不同的VXLAN网络。用OVS做VTEP,配置起来非常方便。
2.3 VNI的作用与范围:24位能干啥
VNI,VXLAN Network Identifier,24位。这意味着什么?2的24次方,约1677万个。
对比一下VLAN的12位(4096个),差距一目了然。说白了,VXLAN就是冲着“大二层”来的。云平台里租户成千上万,每个租户都需要独立的二层网络。VLAN那点数量根本不够分,VXLAN就解决了这个痛点。
VNI的作用很简单:标识一个唯一的二层广播域。
同一个VNI内的虚拟机,可以直接通过二层通信。不同VNI之间的通信,必须经过三层网关。这和VLAN的逻辑一模一样,只是数量级不同。
我遇到过一个问题,这里分享给你:
VNI的范围怎么规划? 我一般这样建议:
- 小规模(< 100个网络):直接用VLAN ID映射到VNI。比如VLAN 100对应VNI 100。简单,好记。
- 中大规模(100-10000个网络):按租户ID分配。比如租户A的VNI范围是1000-1999,租户B是2000-2999。方便管理。
- 超大规模(> 10000个网络):用自动化工具分配,别手动配了。我见过有人用Excel管理VNI,结果配错了导致网络不通,排查了三天。
最后说一句,VNI只是标识,它本身不包含任何路由信息。真正让VXLAN网络互通的是VTEP之间的隧道和路由。下一章我会讲VXLAN隧道怎么建立,以及多播和单播模式的区别。
嗯,今天就到这儿。记住:VXLAN头部结构、VTEP角色、VNI的作用,这三个概念是基础中的基础。搞懂了它们,后面的内容就顺了。