主线:报文结构。VLAN 改帧头(+4B)→ VXLAN 改整包(+50B)→ VXLAN-GPE 通用化载荷(+50B/+36B)。
1. 网络虚拟化
- 虚拟节点间不靠物理线缆,而靠虚拟化链路相连
- 对网络资源(端口、带宽、IP)进行抽象,按租户/应用动态分配
- 分类:网络设备侧虚拟化、服务器/网卡侧虚拟化、网络虚拟化协议

2. VLAN(802.1Q)
- 特点:多用户共用物理网络,不同用户 VM 各用一个 VLAN,一台物理机服务多用户
- 限制:VID 仅 12 bit(4094 个)、隔离能力有限、受二层域约束无法自定义网络
2.1 报文结构
在 SMAC 之后、Type 之前插入 4 字节 Tag,帧长 64~1518 → 68~1522。
|<- 6B ->|<- 6B ->|<- 4B ->|<- 2B ->|<-- 46~1500B -->|<- 4B ->|
+--------+--------+--------+--------+----------------+---------+
| DMAC | SMAC |VLAN Tag| Type | Payload | FCS |
+--------+--------+--------+--------+----------------+---------+
Tag = TPID(2B) + TCI(2B)
+-------------------+-------+------+-------------------+
| TPID = 0x8100 | PRI | DEI | VID (1~4094) |
+-------------------+-------+------+-------------------+
|<--- TPID 16bit -->|<----- TCI 16bit ---------------->|
| 字段 | 长度 | 含义/取值 |
|---|---|---|
| TPID | 16 bit | 0x8100(QinQ 外层 S-Tag 为 0x88A8/0x9100),不支持的设备丢弃 |
| PRI | 3 bit | 802.1p 优先级,0~7 |
| DEI/CFI | 1 bit | 以太网恒为 0 |
| VID | 12 bit | VLAN ID,1~4094(0、4095 保留) |
要点:只改帧头不动 IP 层,MTU 仍为 1500;FCS 需重算;主机收发 Untagged,交换机接口负责打/剥标签。
字节示例(VID=100):... SMAC | 81 00 | 00 64 | 08 00 ...(TCI=0x0064 → PRI=0, DEI=0, VID=100)

2.2 QinQ(802.1ad)
+--------+--------+--------+--------+--------+----------------+---------+
| DMAC | SMAC | S-Tag | C-Tag | Type | Payload | FCS |
+--------+--------+--------+--------+--------+----------------+---------+
0x88A8 0x8100
双层 Tag 共 8 字节(帧长上限 1526),用叠 Tag 突破隔离数,但层次受限。
3. VXLAN(RFC 7348)
MAC-in-UDP:整个二层帧作载荷,外层套 Eth + IP + UDP + VXLAN,跨三层组大二层,24 bit VNI(16M 租户)。
3.1 报文结构
|<--------------- 新增开销 50 字节 -------------->|<- 原二层帧(透传) ->|<- 4B ->|
+----------+------------+----------+----------+-------------------------+--------+
|Outer Eth | Outer IPv4 | Outer UDP| VXLAN | Inner Ethernet Frame | FCS |
| 14B | 20B | 8B | 8B | DMAC|SMAC|[VLAN]|Payload| 新算 |
+----------+------------+----------+----------+-------------------------+--------+
| 层次 | 长度 | 关键字段 |
|---|---|---|
| 外层以太 | 14 B(带 VLAN 18 B) | 下一跳与源 VTEP 的 MAC |
| 外层 IP | 20 B | SIP/DIP = 源/目的 VTEP IP,Protocol = 17 |
| 外层 UDP | 8 B | 目的端口 4789(早期 8472);源端口 = 内层 Hash,用于 ECMP |
| VXLAN 头 | 8 B | 24 bit VNI |
| 内层帧 | 原长 | DMAC/SMAC/Type/Payload 原样透传,原 FCS 剥除 |
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|R|R|R|I|R|R|R| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| VXLAN Network Identifier (VNI) | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Flags 8b Reserved 24b VNI 24b Reserved 8b
- I 位(bit 4,掩码
0x08)必须为 1,否则丢弃;其余保留位置 0、接收忽略 - VNI:1~16777215,等价于 VLAN ID
- UDP 校验和:IPv4 下建议置 0(接收不校验),非 0 则必须校验
- 源端口建议取 49152~65535 的 Hash 值,否则 ECMP 跑不满

3.2 封装 / 解封装
- 入向 VTEP 收原始帧 → 查表定 VNI → 依次加 VXLAN 头(8) + UDP(8, dport 4789) + 外层 IP(20, proto 17) + 外层以太(14) → 重算 FCS 发出
- Underlay 只按外层 IP/UDP 转发,不感知内层 MAC 与 VNI
- 出向 VTEP 匹配 DIP + 4789 → 校验和/I 位检查 → 剥外层头,取 VNI 与内层帧 → 按 (VNI, DMAC) 查表发给 VM
3.3 抓包示例(VNI=100)
外层以太: 00 1c 73 xx xx xx 00 1c 73 yy yy yy 08 00
外层 IPv4: 45 00 00 xx xx xx 40 00 40 11 ... 0a 0a 01 01 0a 0a 02 02 <- 0x11 = 17(UDP)
外层 UDP: c0 3f 12 b5 00 xx 00 00 <- 0x12b5 = 4789,校验和 0
VXLAN 头: 08 00 00 00 00 00 64 00 <- I=1,VNI=0x000064=100
内层帧: aa bb cc dd ee ff 11 22 33 44 55 66 08 00 ...
tcpdump -i eth0 -nn -vvv -X 'udp port 4789' # VXLAN
tcpdump -i eth0 -nn -e -X 'vlan 100' # VLAN
tcpdump -i eth0 -nn -vvv 'ip proto 47' # GRE

4. VXLAN-GPE(draft-ietf-nvo3-vxlan-gpe)
4.1 解决什么问题
| 标准 VXLAN 的局限 | GPE 的解法 |
|---|---|
| 只能封装以太帧 | 新增 Next Protocol (8 bit) 声明载荷类型 |
| 三层场景被迫伪造 14B 以太头 | Next Protocol = 0x1/0x2 直接封裸 IP,省 14 B |
| 无法做服务链 SFC | Next Protocol = 0x4 携带 NSH(RFC 8300,SPI/SI + 元数据) |
| 无运维报文标识 | 新增 O 位标记 OAM 报文 |
| Reserved 全 0 无法演进 | 复用 Reserved 前 8 bit 作 Next Protocol,头仍 8 B |
注意:仍是草案;UDP 端口 4790,与标准 VXLAN 不互通;带 NSH 开销升至 74 B。
4.2 报文格式
+----------+------------+----------+-------------+--------+------------------+------+
|Outer Eth | Outer IPv4 | Outer UDP| VXLAN-GPE | NSH | Inner Payload | FCS |
| 14B | 20B | 8B | 8B | 8/24B | IPv4/IPv6/Eth/.. | |
+----------+------------+----------+-------------+--------+------------------+------+
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|R|R|R|I|P|R|O| Reserved | Next Protocol |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| VXLAN Network Identifier (VNI) | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 位/字段 | 含义 |
|---|---|
I (0x08) |
VNI 有效,必须置 1 |
P (0x04) |
Next Protocol 字段有效(GPE 关键新增) |
O (0x01) |
OAM 报文标志 |
| Next Protocol | 0x1 IPv4 / 0x2 IPv6 / 0x3 Ethernet / 0x4 NSH(其余保留) |
示例(VNI=100,载荷 Ethernet):0c 00 00 03 00 00 64 00
(Flags=0x0c=I+P,NextProto=0x03,VNI=0x000064)
5. 封装开销汇总
基准:以太帧上限 1518 B;剥内层 FCS、加新头、重算外层 FCS,帧长增量 = 新增头部字节数。
| 协议 | 新增头部 | 新增字节 | 帧长上限 | Overlay MTU(Underlay 1500) |
|---|---|---|---|---|
| VLAN 802.1Q | Tag 4 |
+4 B | 1522 | 1500(不变) |
| QinQ 802.1ad | S-Tag 4 + C-Tag 4 |
+8 B | 1526 | 1500(不变) |
| GRE | Eth 14 + IP 20 + GRE 4 |
+38 B(IP+GRE 24 B) | 1556 | 1476(内层 IP)/1462(内层以太帧) |
| VXLAN | Eth 14 + IP 20 + UDP 8 + VXLAN 8 |
+50 B | 1568 | 1450 |
| VXLAN + 外层 VLAN | 50 + Tag 4 |
+54 B | 1572 | 1446 |
| VXLAN-GPE(内层 Ethernet) | Eth 14 + IP 20 + UDP 8 + GPE 8 |
+50 B | 1568 | 1450 |
| VXLAN-GPE(内层 IPv4/IPv6) | 同上,内层无以太头(省 14 B) | +36 B | — | 1464 |
| VXLAN-GPE + NSH(MD2) | 50 + NSH 24 |
+74 B | 1592 | 1426 |
| Geneve(RFC 8926) | Eth 14 + IP 20 + UDP 8 + Geneve 8~260 |
+50~302 B | — | 1450 起递减 |
原始以太帧 1518 B
├─ +4 B ─▶ VLAN [Eth][Tag][Type][Payload][FCS] → 1522
├─ +8 B ─▶ QinQ [Eth][S-Tag][C-Tag][Type][Payload][FCS] → 1526
├─+38 B ─▶ GRE [Eth][IP][GRE][Inner Frame][FCS] → 1556
├─+50 B ─▶ VXLAN [Eth][IP][UDP][VXLAN][Inner Frame][FCS] → 1568
└─+74 B ─▶ GPE+NSH [Eth][IP][UDP][GPE][NSH][Payload][FCS] → 1592
MTU 速算(Underlay 1500):
VXLAN = 1500 - 20(IP) - 8(UDP) - 8(VXLAN) - 14(以太头) = 1450
GPE(IP) = 1500 - 20(IP) - 8(UDP) - 8(GPE) = 1464
GPE+NSH = 1500 - 20 - 8 - 8 - 24(NSH) - 14 = 1426
巨帧方案 = 9000 - 50 = 8950
Underlay MTU 建议 ≥ 1550,或直接开巨帧 9001,避免外层 IP 分片。
6. 对比
| 对比项 | VLAN | VXLAN | VXLAN-GPE |
|---|---|---|---|
| 封装方式 | 帧内插 4B Tag | 整帧外套 Eth+IP+UDP+VXLAN |
同 VXLAN,头结构微调 |
| 标识 | VID 12 bit(4094) | VNI 24 bit(16M) | VNI 24 bit(16M) |
| 开销 | +4 B | +50 B(带 VLAN +54) | +50 B(内层 IP +36,NSH +74) |
| 可封装载荷 | 以太帧 | 仅以太帧 | 以太/IPv4/IPv6/NSH/OAM |
| 工作层次 | L2 | L2 over L3 | L2/L3 over L3 |
| 网络要求 | 二层域内,交换机支持 802.1Q | Underlay IP 可达,可跨机房 | 同 VXLAN |
| 封装点 | 交换机端口 Access/Trunk/Hybrid | VTEP(交换机/OVS/网卡) | 支持 GPE 的 VTEP |
| 识别字段 | TPID 0x8100 |
IP proto 17 + UDP 4789 |
IP proto 17 + UDP 4790 |
| MTU | 1500 不变 | 1450 | 1450 / 1464 / 1426 |
| 场景 | 园区网、小规模二层隔离 | 云数据中心大二层、多租户、热迁移 | 服务链 SFC、OAM、VPP/FD.io |
- VLAN:改帧头,+4B,便宜但只有 4094 个、跨不了三层
- VXLAN:改整包,+50B,换 24 bit VNI 与跨三层大二层
- VXLAN-GPE:同样 8B 头,用 Next Protocol 通用化载荷,服务链与三层隧道场景