[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

posted on 2017-04-26 15:49  kramer  阅读(797)  评论(0编辑  收藏  举报

导航