VxLAN概念
VxLAN术语
VNI(VXLAN Network Identifier ):用于区分VXLAN段,不同VXLAN段的租户不能直接进行二层通信。一个租户可以有一个或多个VNI,VNI由24比特组成,支持多达16M的租户。
BD(Bridge Domain): 类似传统 络中采用VLAN划分广播域方法,在VXLAN 络中通过BD划分广播域。在VXLAN 络中,将VNI以1:1方式映射到广播域BD,一个BD就表示着一个广播域,同一个BD内的主机就可以进行二层互通。
VTEP(Vxlan Tunnel End Point):VXLAN Tunnel Endpoints 对VXLAN 文进行封装和解封装。VXLAN 文中源IP地址为源端VTEP的IP地址,目的IP地址为目的端VTEP的IP地址。一对VTEP地址就对应着一条VXLAN隧道。在源端封装 文后通过隧道向目的端VTEP发送封装 文,目的端VTEP对接收到的封装 文进行解封装。VTEP可以是服务器也可以是 络交换设备。
VAP(Virtual Access Point): 是VXLAN业务接入点,可以基于VLAN或 文流封装类型接入业务:
1、 基于VLAN接入业务
2、 基于 文流封装类型接入业务
NVE(Network Virtrualization Edge 络虚拟边缘节点): 是实现 络虚拟化功能的 络实体。 文经过NVE封装转换后,NVE间就可基于三层基础 络建立二层虚拟化 络。
二层 关:类似传统 络的二层接入设备,在VXLAN 络中通过二层 关解决租户接入VXLAN虚拟 络,也可用于同一VXLAN虚拟 络的子 通信。
VxLAN出现的原因
一项新技术的兴起和发展肯定是有原因的,为了解决当下的哪些问题?
数据中心中虚拟机迁移是常态工作
VxLAN 文
(MAC in UDP也即L2 over L4),二层 文用三层协议进行封装,可实现二层 络在三层范围
VxLAN是基于IP 络之上,它采用的是MAC in UDP技术,其实它与GRE/IPSEC等tunnel技术类似,这种封装技术对中间 络没有特殊要求,只要可以识别IP 文就可以传送。
VTEP对VM发送的原始以太帧进行“封装”,从上至下封装如下所示:
增加VXLAN头(8字节),其中包含24比特的VNI字段,用来定义VXLAN 络中不同的租户。此外,还包含VXLAN Flags(8比特,取值为00001000)和两个保留字段(分别为24比特和8比特),增强可扩展性。
VXLAN头和原始以太帧一起作为UDP的数据部分。UDP头的目的端口 (VXLAN Port)固定为4789(可以修改),源端口 (UDP Src. Port)是原始以太帧通过哈希算法计算后的值。
封装外层IP头,其中的源IP地址(Outer Src. IP)为源VM所属VTEP的IP地址,目的IP地址(Outer Dst. IP)为目的VM所属VTEP的IP地址。
封装外层以太帧头。其中的源MAC地址(Src. MAC Addr)为源VM所属VTEP的MAC地址,目的MAC地址(Dst. MAC Addr)为到达目的VTEP的路径上下一跳设备的MAC地址。
1.目标IP被替换成与源虚拟机具有相同VNI的多播组IP地址;
2. 所有VTEP端都接收该多播 文,VTEP查找所在主机上的全部虚拟机来匹配源虚拟机的Inner 目的MAC。
3. 目标VTEP的虚拟机会回应该多播包,从而获得目标VTEP的IP地址。
4. 发送端VTEP添加VNI-VTEP-虚拟机MAC的映射关系到自己的VXLAN表中,以避免再次组播学习。
VxLAN的部署
对于CE系列交换机而言,BD与VNI是1:1的映射关系,这种映射关系是通过在VTEP上配置命令行建立起来的。配置如下:
#
bridge-domain 20 //表示创建一个“大二层广播域”BD,其编 为20
vxlan vni 2000 //表示在BD 20下指定与之关联的VNI为2000
#
VTEP会根据以上配置生成BD与VNI的映射关系表,该映射表可以通过命令行查看,如下所示:
<HUAWEI> display vxlan vni
Number of vxlan vni : 1
VNI BD-ID State
———————————-
5000 10 up
有了映射表后,进入VTEP的 文就可以根据自己所属的BD来确定 文封装时该添加哪个VNI。那么, 文根据什么来确定自己属于哪个BD呢?
二层子接口或者物理接口根据配置来检查哪些 文需要进入VXLAN隧道,同时对检查通过的 文做怎样的处理。
以华为的交换机为例:
default类型允许所有 文进入VXLAN隧道,dot1q和untag类型的只允许某一类 文进入。
- 经过同一物理接口的 文既有带VLAN Tag的,又有不带VLAN Tag的,并且他们各自要进入不同的VXLAN隧道,则可以在该物理接口上同时创建dot1q和untag类型的二层子接口。
- default类型(应用于均需要走同一条VXLAN隧道的场景,下挂的VM全部属于同一BD)的子接口允许所有 文进入VXLAN隧道,dot1q和untag类型的子接口只允许某一类 文进入。也即意味着前者不可与后者在同一子接口。(不然 文到了接口之后如何判断要进入哪个二层子接口)
对于CE系列交换机,以上配置是在NVE(Network Virtualization Edge)接口下完成的。配置过程如下:
#
interface Nve1 //创建逻辑接口NVE 1
source 1.1.1.1 //配置源VTEP的IP地址(推荐使用Loopback接口的IP地址)
vni 5000 head-end peer-list 2.2.2.2
vni 5000 head-end peer-list 2.2.2.3 //表示属于VNI 5000的对端VTEP有两个,IP地址分别为2.2.2.2和2.2.2.3
<HUAWEI> display vxlan vni 5000 verbose
BD ID : 10
State : up
NVE : 288
Source : 1.1.1.1
UDP Port : 4789
BUM Mode : head-end
Group Address : –
Peer List : 2.2.2.2 2.2.2.3 //同一大二层广播域的范围,属于同一个BD 10域的范围。
//当VTEP收到BUM(Broadcast&Unknown-unicast&Multicast,广播&未知单播&组播) 文时,会将 文复制并发送给Peer List中所列的所有对端VTEP(这就好比广播 文在VLAN内广播)。
//这张表也被称为“头端复制列表”。当VTEP收到已知单播 文时,会根据VTEP上的MAC表来确定 文要从哪条VXLAN隧道走。而此时Peer List中所列的对端,则充当了MAC表中“出接口”的角色。
IP_A、IP_B与IP_C属于同一子 需要互通。
1、同子 VM互通组 图
ARP请求 文转发流程
ARP广播去获取对端MAC信息
ARP应答 文转发流程
arp应答
2、不同子 互通(借助三层 关, 关不在一个设备还得进行路由)
这里三层 关在一台设备上。
不同子 VM互通 文转发流程:
封装外层MAC及外层IP包头
1、VM_A先将数据 文发送给 关。 文的源MAC为MAC_A,目的MAC为 关BDIF 10的MAC_10,源IP地址为IP_A,目的IP为IP_B。
2、VTEP_1收到数据 文后,识别此 文所属的VNI(VNI 5000),并根据MAC表项对 文进行封装。可以看到,这里封装的外层源IP地址为本地VTEP的IP地址(IP_1),外层目的IP地址为对端VTEP的IP地址(IP_3);外层源MAC地址为本地VTEP的MAC地址(MAC_1),而外层目的MAC地址为去往目的IP的 络中下一跳设备的MAC地址。封装后的 文,根据外层MAC和IP信息,在IP 络中进行传输,直至到达对端VTEP。
3、 文进入VTEP_3,VTEP_3对 文进行解封装,得到VM_A发送的原始 文。
4、VTEP_3发现该 文的目的MAC为本机BDIF 10接口的MAC,而目的IP地址为IP_B(10.1.20.1),所以会根据路由表查找到IP_B的下一跳。
5、发现下一跳为10.1.20.10,出接口为BDIF 20。此时VTEP_3查询ARP表项,并将原始 文的源MAC修改为BDIF 20接口的MAC(MAC_20),将目的MAC修改为VM_B的MAC(MAC_B)。
6、 文到BDIF 20接口时,识别到需要进入VXLAN隧道(VNI 6000),所以根据MAC表对 文进行封装。这里封装的外层源IP地址为本地VTEP的IP地址(IP_3),外层目的IP地址为对端VTEP的IP地址(IP_2);外层源MAC地址为本地VTEP的MAC地址(MAC_3),而外层目的MAC地址为去往目的IP的 络中下一跳设备的MAC地址。封装后的 文,根据外层MAC和IP信息,在IP 络中进行传输,直至到达对端VTEP。
7、 文到达VTEP_2后,VTEP_2对 文进行解封装,得到内层的数据 文,并将其发送给VM_B。
同理VM_B回应VM_A的流程与上述过程类似。
VXLAN 络与非VXLAN 络之间的互通,当然也得借助于三层 关(SVI接口)。实现与上图的不同之处在于: 文在VXLAN 络侧会进行封装,而在非VXLAN 络侧不需要进行封装。 文从VXLAN侧进入 关并解封装后,就按照普通的单播 文发送方式进行转发。
常见的组 方式:
用户希望同一部门VM之间、不同部门VM之间,VM与Internet之间均可相互访问。
此时Spine只作为VXLAN 文的转发节点,不感知VXLAN隧道的存在,可以是任意的三层 络设备。
集中式:
Leaf1、2通过与Spine建立VxLAN隧道实现不同BD的互通。
分布式:转发不经过Spine,缩减Spine的转发压力(在Leaf下挂大量VM的情况下建议使用分布式转发)
Leaf1和Leaf2作为VXLAN 络的VTEP,均部署VXLAN三层 关。三层 关之间跑比如BGP动态协议来建立VxLAN隧道
Leaf1和Leaf2作为VXLAN 络的VTEP,在Leaf1和Leaf2上部署VXLAN三层 关。两个VXLAN三层 关之间通过BGP动态建立VXLAN隧道,并通过BGP的remote-nexthop属性发布本 关下挂的主机路由信息给其他BGP邻居,从而实现跨Leaf节点不同部门VM之间的相互通信。
Leaf作为VXLAN三层 关时,只学习其下挂终端租户的表项,而不必像集中式三层 关一样,需要学习 络中所有终端租户的表项,从而解决了集中式三层 关带来表项瓶颈问题。
VxLAN组 的冗余可靠性组 拓扑
整体组 可靠性拓扑如下:
确保不出现单点故障,链路冗余,设备冗余。
核心层:通过分别与Spine建立双隧道,保障上行的隧道的冗余性
采用交换机堆叠(华三称为IRF)技术保证接入的冗余性
随着SDN(软件定义 络)及NFV( 络功能虚拟化)技术的成熟,我们的VxLAN部署可以进行控制器方式来部署,比如华为的SNC控制器方式和AC控制器方式:
以上是关于VxLAN技术的全部内容,作为 络工程师应该多了解 络前沿技术(比如VxLAN、vBRAS、SD-WAN、Segment-routing等)。不积跬步无以至千里,大家一起努力。
对 络前沿技术感兴趣的可加关注或者评论区留言讨论。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!