为什么需要VxLAN
随着虚拟化和云计算的发展,数据中心规模的越来越大,因此虚拟机的数量越来越多。而传统的VLAN ID只有12 bit,导致最大只能有4096个虚拟2层网络;
虚拟机的增加以及由此带来的东西向流量的增加,导致ToR交换机的MAC表项耗尽;
为了数据中心的虚拟计算得到灵活的调配,需要在虚拟机在不改变IP的情况下,能支持跨主机,跨2层网络,甚至跨数据中心的虚拟机的迁移。
核心机制
VxLAN (Virtual eXtensible Local Area Network),顾名思义,可扩展的VLAN。它主要的核心工作机制在于2个方面:
1)VXLAN Network Identifier(VNI), 由24bit长,可以划分出1600万个相互隔离的虚拟2层网络,足以支持大2层网络的用户隔离。
2)使用MAC In UDP的封装方式。从源主机发出的数据包会在VTEP中进行VXLAN帧头的封装,在完成封装后会被自动的封装在UDP数据包中,然后就是使用在最外层使用当前网络的IP或者MAC作为外层的封装,之后就在当前的网络中进行正常的传输。其本质就是将需要传输的以太网数据帧当成被传输的数据,封装在UDP中进行数据的传输。这样在目的端的VTEP设备会类似于解析TCP/IP数据包一样,逐层的解封装,不过在解析到VXLAN header时,会根据类似VLAN的转发规则一样进行数据的转发,这样整个的数据转发都是在控制平面的,都是进行有规则的转发。
报文格式
1) vxlan header
共计8个字节,目前使用的是Flags中的一个8bit的标识位和24bit的VNI (Vxlan Network identifier),其余部分没有定义,但是在使用的时候必须设置为0x0000。
(2) 外层的UDP报头 (Outer UDP Header)
目的端口使用4798,但是可以根据需要进行修改。同事UDP的校验和必须设置成全0。
(3) 外层的IP报文头 (Outer IP Header)
目的IP地址可以是单播地址,也可以是多播地址。单播情况下,目的IP地址是Vxlan Tunnel End Point (VTEP) 的IP地址。在多播情况下引入VXLAN管理层,利用VNI和IP多播组的映射来确定VTEPs。
protocol:设置值为0x11,显示说明这是UDP数据包
Source ip: 源vTEP_IP;
Destination ip: 目的VTEP IP。
(4) 外层的Ethernet报文头 (Outer Ethernet Header)
Destination Address:目的VTEP的Mac 地址,即为本地下一跳的地址(通常是网关Mac 地址);
VLAN: VLAN Type被设置为0x8100, 并可以设置Vlan Id tag(这就是vxlan的vlan 标签)。
Ethertype:设置值为0x8000,指明数据包为IPv4的。