网络虚拟化中的VLAN及VXLAN

主线:报文结构。VLAN 改帧头(+4B)→ VXLAN 改整包(+50B)→ VXLAN-GPE 通用化载荷(+50B/+36B)。

1. 网络虚拟化

  • 虚拟节点间不靠物理线缆,而靠虚拟化链路相连
  • 对网络资源(端口、带宽、IP)进行抽象,按租户/应用动态分配
  • 分类:网络设备侧虚拟化、服务器/网卡侧虚拟化、网络虚拟化协议

VLAN和VXLAN区别

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)

VLAN报文

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 跑不满

VXLAN报文

3.2 封装 / 解封装

  1. 入向 VTEP 收原始帧 → 查表定 VNI → 依次加 VXLAN 头(8) + UDP(8, dport 4789) + 外层 IP(20, proto 17) + 外层以太(14) → 重算 FCS 发出
  2. Underlay 只按外层 IP/UDP 转发,不感知内层 MAC 与 VNI
  3. 出向 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

VXLAN基本原理

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 通用化载荷,服务链与三层隧道场景

7. 参考

发表评论

邮箱地址不会被公开。 必填项已用*标注