一、什么是VxLAN?
VxLAN 全称是虚拟扩展本地局域网,是一个VLAN的扩展协议。VxLAN本质上是一种隧道封装技术。它使用TCP/IP协议栈的惯用手法——封装/解封装技术,将L2的以太网帧封装成L4的UDP数据报,然后在L3的网络中传输,效果就像L2的以太网帧在一个广播域中传输一样,实际上是跨越了L3网络,但却感知不到L3网络的存在。
二、为什么需要VxLAN技术:
一台服务器可虚拟多台虚拟机,而一台虚拟机相当于一台主机。主机的数量发生了数量级的变化,这也为虚拟网络带来了如下问题:
1. 虚拟机规模受网络规格限制
在传统二层网络环境下,数据报文是通过查询MAC地址表进行二层转发,而MAC地址表的容量限制了虚拟机的数量。
2. 网络隔离能力限制
当前主流的网络隔离技术是VLAN,在大规模的虚拟化网络中部署存在如下限制:
① 由于IEEE 802.1Q中定义的VLAN Tag域只有12比特,仅能表示4096个VLAN,无法满足大二层网络中标识大量租户或租户群的需求。
② 传统二层网络中的VLAN无法满足网络动态调整的需求。
3. 虚拟机迁移范围受网络架构限制
虚拟机启动后,可能由于服务器资源等问题(如CPU过高,内存不够等),需要将虚拟机迁移到新的服务器上。为了保证虚拟机迁移过程中业务不中断,则需要保证虚拟机的IP地址保持不变,这就要求业务网络是一个二层网络,且要求网络本身具备多路径的冗余备份和可靠性。
三、VxLAN是如何解决的:
1. 针对虚拟机规模受网络规格限制
VXLAN将虚拟机发出的数据包封装在UDP中,并使用物理网络的IP、MAC地址作为外层头进行封装,对网络只表现为封装后的参数。因此,极大降低了大二层网络对MAC地址规格的需求。
2. 针对网络隔离能力限制
VXLAN引入了类似VLAN ID的用户标识,称为VXLAN网络标识VNI(VXLAN Network Identifier),由24比特组成,支持多达16M的VXLAN段,从而满足了大量的用户标识。
3. 针对虚拟机迁移范围受网络架构限制
VXLAN通过采用MAC in UDP封装来延伸二层网络,将以太报文封装在IP报文之上,通过路由在网络中传输,无需关注虚拟机的MAC地址。且路由网络无网络结构限制,具备大规模扩展能力、故障自愈能力、负载均衡能力。通过路由网络,虚拟机迁移不受网络架构限制。
四、VxLAN隧道的建立:
VXLAN在两台交换机之间建立了一条隧道,将服务器发出的原始数据帧加以“包装”,好让原始报文可以在承载网络(比如IP网络)上传输。当到达目的服务器所连接的交换机后,离开VXLAN隧道,并将原始数据帧恢复出来,继续转发给目的服务器。
VxLAN VTEP
VTEP是VXLAN网络的边缘设备,是VXLAN隧道的起点和终点,VXLAN对用户原始数据帧的封装和解封装均在VTEP上进行。VTEP是VXLAN网络中绝对的主角,VTEP既可以是一台独立的网络设备,也可以是在服务器中的虚拟交换机也可以是路由器。源服务器发出的原始数据帧,在VTEP上被封装成VXLAN格式的报文,并在IP网络中传递到另外一个VTEP上,并经过解封转还原出原始的数据帧,最后转发给目的服务器。
VxLAN VNI
以太网数据帧中VLAN只占了12比特的空间,这使得VLAN的隔离能力在数据中心网络中力不从心。而VNI的出现,就是专门解决这个问题的。VNI(VXLAN 网络标识符),VNI是一种类似于VLAN ID的用户标识,一个VNI代表了一个租户,属于不同VNI的虚拟机之间不能直接进行二层通信。VXLAN报文封装时,给VNI分配了24比特的长度空间,使其可以支持海量租户的隔离。
在分布式网关部署场景下,VNI还可分为二层VNI和三层VNI,它们的作用不同:
① 二层VNI是普通的VNI,以1:1方式映射到广播域BD,实现VXLAN报文同子网的转发。
② 三层VNI和VPN实例进行关联,用于VXLAN报文跨子网的转发。
五、不同网段的两台主机之间的通信过程:
- 虚拟机A(10.0.0.2)想要与虚拟机B(20.0.0.2)进行通信。
- 虚拟机A生成一个数据包,并将目标IP设置为虚拟机B的IP地址(20.0.0.2)。
- VTEP设备A捕获到虚拟机A发出的数据包,并将其封装成VXLAN数据报文。
- VTEP设备A会在数据包外部添加一个新的UDP头,源端口为动态分配的值,目的端口为4789(VXLAN的默认端口)。
- 在VXLAN头中,VTEP设备A会填写虚拟网络标识符(VNI)以及源VTEP的IP地址和MAC地址。
- VTEP设备A将封装好的VXLAN数据报文发送到物理网络中。
- VTEP设备B接收到VXLAN数据报文,并进行解析。
- VTEP设备B会从UDP头中提取出VXLAN数据报文。
- 根据VXLAN头中的VNI,VTEP设备B知道这个数据包属于网段B。
- VTEP设备B根据VXLAN头中的目的VTEP IP地址,将数据包转发给虚拟机B所在的主机。
- 虚拟机B接收到数据包,并进行解封装,获取原始数据。
- 虚拟机B生成响应数据包,并将源IP设置为自身的IP地址(20.0.0.2),目标IP设置为虚拟机A的IP地址(10.0.0.2)。
- 类似地,VTEP设备B将响应数据包封装成VXLAN数据报文,并通过物理网络发送到VTEP设备A。
- VTEP设备A接收到VXLAN数据报文后解析,并将数据包转发给虚拟机A。
- 虚拟机A接收到响应数据包,完成通信过程。