[vxlan] 二 什么是VXLAN
VXLAN是一种mac in UDP的技术。简单讲就是传统的二层帧被封装到了UDP的package中。通过UDP的IP网络发送到目的地然后再解封装。 VXLAN 跟VLAN对比,最重要的一个概念就是VNI。 VLAN中一个VLAN tag对应一个广播域, VXLAN中一个VNI对应一个广播域。
传统VLAN中一次二层通信是这样的
1. VM 发送 ARP-req 到交换机
2. 交换机在VM对应的VLAN 端口内广播ARP-req, 同时记住 src_mac: switch_interface的映射
3. dest VM 收到ARP-req,发送ARP-res
4. 交换机收到ARP-res,记住 dst_mac:switch_interface,并发送ARP-res给 src VM
5. src VM 和 dst VM接下来通过交换机记住的mac表来做交换
而VXLAN中的一次二层通信是这样的
首先看一下 拓扑
src_vm - src_vtep - ... - dst_vtep - dst_vm
1. src_VM 发送ARP-req 请求,首先到src_VTEP,
2. src_VTEP
2.1 封装其为VXLAN包
2.2 因为src_vtep 不知道 dst_vtep 的ip,所以封装后的dst_ip为一个组播地址。所有的vtep都应该加入该组播地址。(这里还有一种做法应该也合理,就是并非所有VTEP都属于同一个组播地址,而是部分VNI映射到同一个组播地址,这样ARP查询就不用发送给所有的VTEP)
3. dst_vtep
3.1 收到ARP包,解封装后,学习 src_mac : src_vtep_ip的映射
3.2 发现其VNI在自己的管理范围内,于是进一步解封装转换成普通二层包,并在该二层内广播,ARP查询。
4. dst_vm 发送ARP-res 到 dst_vtep
5. dst_vtep 封装arp response,因为之前学习过src_mac:src_vtep_ip的映射,所以此时通过unicast的形式发送给src_vtep
6. src_vtep
6.1 学习dst_mac: dst_vtep_ip
6.2 解封装发现VNI在自己管理范围内,于是交给src_vm
7. src_vm收到arp response
在overlay的网络上,也就是寻找dst_vtep的时候,是组播。但是当dst_vtep收到vxlan包,解封装继续ARP查询的过程中。首先是根据vni转换成普通的二层包,然后在该二层内做广播查询。所以可见,vni是vxlan中的二层broadcast domain.
上文提到了VTEP。 可以理解VTEP负担着两项工作
1. 封装和解封装 VXLAN包
2. 寻找目标vtep
在VTEP 外,系统是不知道VXLAN的。
上面是VXLAN在寻找目标VM的一次data flow。 下面看一下 vm to vm的unicast data flow
拓扑还是如下:
src_vm - src_vtep ... dst_vtep - dst_vm
此时,src_vm 和 dst_vm 已经完成了ARP流程
1. src_vm 发送二层帧到 src_vtep
2. src_vtep
2.1 封装成vni
2.2 查看dst_mac:dst_vtep_ip 的映射
3.3 转发给 dst_vtep
3. dst_vtep
解封装
发送给vm
4. vm收到 src 发送的二层帧
到了这里,我们已经看了vxlan的单播和组播学习过程。其实现在可以回答之前的两个问题:
为什么vxlan可以减少TOR负担
之前 TOR中记录的信息如下:
vm_mac1: interface1
vm_mac2: interface2
...
现在的TOR,要看vtep在哪里。如果 vtep在TOR上面,那么TOR还是会记录很多信息,但如果 VTEP是在机柜的每一台服务器上,那么TOR仅需要记录
vtep_mac1: interface
vtep_mac2: interface
vtep 很显然会比vm少很多。
为什么VXLAN中的vm可以跨dc
因为vxlan的下面是ip网络。ip网络当然可以跨dc