一, VXLAN 概述
1. 什么是 VXLAN
VXLAN(Virtual Extensible LAN) 虚拟可扩展局域网, 是一种 overlay 网络技术, 将原始 2 层以太网帧进行 UDP 封装 (Mac-in-UDP), 增加 8 字节 VXLAN 头部, 8 字节 UDP 头部, 20 字节 IP 头部和 14 字节以太网头部, 共 50 字节.
2. VXLAN 优点
VXLAN 与 VLAN 相比能够提供更好的扩展性和灵活性, 主要有以下特点:
应用灵活部署: 通过 VXLAN 封装后的 2 层以太网帧可以跨 3 层网络边界, 让组网以及应用部署变得更加灵活, 同时解决多租户网络环境中 IP 地址冲突问题.
更好的扩展性: 传统 VLANID 字段为 12-bit,VLAN 数量最大为 4096;VXLAN 使用 24-bit VNID (VXLAN network identifier), 最大支持 16,000,000 逻辑网络.
提高网络利用率: 传统以太网使用 STP 预防环路, STP 导致网络冗余路径处于阻塞状态, VXLAN 报文基于 3 层 IP 报头传输, 能有效利用网络路径, 支持 ECMP(equal-cost multipath ) 和链路聚合协议.
(1) 应用灵活部署
如图 1-1 所示, 在 VXLAN 环境中应用部署不受物理位置和 3 层网络边界限制, 例如某应用的地址段为 192.168.1.0/24, 在传统网络中所有该应用服务器或者虚拟机必须在同一 3 层网络内部署, 否则会产生路由或者地址冲突问题.
(2) 更好的扩展性
传统网络通过 VLAN 将客户网络逻辑隔离, VLAN ID 字段为 12-bit ,VLAN 数量最大为 4096;VXLAN 使用 24-bit VNID ( VXLAN network identifier ), 最大支持 16,000,000 逻辑网络, 扩展性得到极大增强.
(3) 提高网络利用率
图 1-3 使用 VXLAN 后使用三层接口互联消除生成树阻塞端口
传统以太网帧无法穿越三层网络, 部署 VXLAN 后, VTEP 之间数据基于三层寻址, 网络互联接口不再是二层接口, 可以将交换机之间互联接口部署为三层模式, 消除生成树阻塞端口, 提高网络利用率, 支持 ECMP(equal-cost multipath ) 和链路聚合协议.
二, VXLAN 术语
1. VTEP
VXLAN
Tunnel Endpoint (VTEP).VXLAN 使用 VTEP 设备对 VXLAN 报文进行封装与解封装, 包括 ARP 请求报文和正常的 VXLAN 数据报文, VTEP 将原始以太网帧通过 VXLAN 封装后发送至对端 VTEP 设备, 对端 VTEP 接收到 VXLAN 报文后解封装然后根据原始 Mac 进行转发, VTEP 可以是物理交换机, 物理服务器或者其他支持 VXLAN 的硬件设备或软件来实现.
2. VNI
Virtual Network ID ( VNI), VNI 封装在 VXLAN 头部, 共 24-bit , 最大支持 16,000,000 逻辑网络.
3. VXLAN 网关
VXLAN 网关用于连接 VXLAN 网络和传统 VLAN 网络, VXLAN 网关实现 VNI 和 VLAN ID 之间的映射, VXLAN 网关实际上也是一台 VTEP 设备.
4. 组播组
VTEP 设备要加入相同的组播组, 主要用于控制平面地址学习.
三, VXLAN 封装
VXLAN 使用 UDP 封装完整的以太网帧 (Mac-in-UDP), 共 50 字节的封装报文头. 具体的报文格式如下:
1. Inner Mac
Inner Mac, 内层 Mac 是原始以太网帧的 Mac 地址.
2. VXLAN Header
共 8 个字节, 目前使用的是 Flags 中的一个 8bit 的标识位和 24bit 的 VNI(Vxlan Network identifier) , 其余部分没有定义, 但是在使用的时候必须设置为 0x0000.
3. Outer UDP Header
共 8 个字节, IANA 分配的标准目的端口使用 4798, 但是各厂商可以根据需要进行修改, 同时 UDP 的校验和必须设置成全 0.
4. Outer IP Header
共 20 个字节, 目的 IP 地址可以是单播地址, 也可以是多播地址. 单播情况下, 目的 IP 地址是目的 VTEP 的 IP 地址; 当用于 VXLAN 控制平面时会使用多播地址.
Outer IP: 外层 IP 地址是经过 VTEP 封装后的 3 层 IP 地址, 源 IP 是本端 VTEP 设备 IP, 用于控制平面时目的 IP 可以是多播地址, 用于转发平面时目的 IP 是远端 VTEP 设备 IP.
5. Outer Ethernet Header
共计 14 个字节, 外层以太网帧头部. Outer Mac, 外层 Mac 是经过 VTEP 封装后的二层 Mac, 源 Mac 是本端 VTEP 设备 Mac, 目的 Mac 可以是远端 VTEP 设备 Mac 或者传输路径中间 3 层网络设备 Mac.
四, VXLAN 数据转发
1. 控制平面
在 VXLAN 的实现中, 当通过组播实现控制平面路径发现时, VTEP 设备之间使用无状态 tunnel ,VTEP 设备之间不会维持状态化的长连接. VXLAN 需要通过控制平面学习远端设备地址信息, 在本地构建控制平面表项. 控制平面表项由 VNI,Inner Source Mac ,Outer Source IP 三元组组成.
2. 转发平面
控制平面学习地址映射信息后, 转发平面负责实际数据的转发. VTEP 为原始数据帧增加 UDP 报头, 新的报头到达目的 VTEP 后才会被去掉, 中间路径的网络设备只会根据外层包头内的目的地址进行数据转发.
3. VXLAN ARP 请求
如上图所示, 终端设备 A 需要和终端设备 B 通信, ARP 请求过程如下:
终端设备 A 发送 ARP 请求, 请求终端设备 B 的 Mac 地址;
VTEP-1 收到终端设备 A 发送的 ARP 请求, 此时 VTEP-1 还没有终端设备 B 对应的地址映射表项, VTEP-1 将 ARP 请求进行 VXLAN 封装, VNI 设置为 10,outer-src-ip 是 VTEP-1 的 IP ,outer-dst-ip 是加入的组播组地址, 封装完成后转发至 VXLAN 组播组;
VTEP-2,VTEP3 加入相同的组播组, 所有组成员都会收到 VTEP-1 发送的组播报文, 解封装后检查 VNI 与本地 VNI 是否匹配, 如匹配将 ARP 请求发送至本地网络, 同时记录 VNI,inner Mac,outer IP 的对应关系, 构建控制平面地址映射表项. 如 VNI 不匹配则丢弃数据包.
终端设备 B 收到 ARP 请求后以单播方式发送 ARP 响应;
VTEP-2 收到终端设备 B 的 ARP 响应后进行 VXLAN 封装, 此时 VTEP-2 已经构建控制平面地址映射表项, 通过 VXLAN 封装后以单播方式发送. Outer-src-ip 是 VTEP-2 的 IP 地址, outer-dst-ip 是 VTEP-1 的 IP 地址;
VTEP-1 收到封装后的 ARP 响应后, 解封装比对 VNI, 如匹配将 ARP 响应发送至终端设备 A, 同时记录 VNI,inner Mac, outer IP 的对应关系, 构建控制平面表项;
此时 VTEP-1,VTEP-2 均已成功构建控制平面地址映射信息, 后续 VXLAN 数据使用单播在 VTEP-1 和 VTEP-2 之间传输.
4. VXLAN 数据传输
ARP 请求完成后, 终端设备 A 向终端设备 B 发送数据, VTEP-1 收到数据中查找地址映射表项, 将原始数据进行 VXLAN 封装后转发至 VTEP-2;
VTEP-2 收到 VXLAN 数据包后检查 VNI 是否与本地 VNI 匹配, 如匹配则解封装后将原始以太网帧转发至终端设备 B.
五, VXLAN 部署
六, 补充:
在进行 ARP 处理时, 为了将广播通过多播进行传输, 必须要设置 VNI 到多播组的映射, 这种映射属于管理层, 用于建立 VTEP 之间的管理通道. 未知的目的 Mac(unknown Mac destination ) 同样会进行组播封装, 处理方式和广播相同.
VXLAN 报文不能进行分片处理, 中间的设备可能会将 VXLAN 报文分片, 但是 VTEP 会将分片后的报文丢弃, 为了确保 VXLAN 报文不被分片处理, 需要修改沿途所以设备的 MTU.RFC 文档没有阐述为什么 VTEP 必须丢弃分片后的报文.
在封装和解封装时 VLAN TAG 信息都会被剥离, 除非另有特殊配置.
来源: http://network.51cto.com/art/201810/585567.htm