Vxlan基本概念 简介 Vxlan是一种基于IP网络采用Mac in UDP封装形式的二层点对点的隧道技术 (基于IP的封装,封装的对象始终是以太网数据帧) Vxlan是一种无控制平面的隧道技术(可以理解无法动态的建立隧道) 例如:IPSec可以利用IKE动态建立隧道、MPLS可以利用LDP/BGP建立隧道等 不过Vxlan可以利用evn(华为私有技术)或Evpn协议来充当它的控制平面,动态建立隧道 可以实现二层互访、三层互访、与传统以太网结合组网部署 Vxlan虚拟化 Vxlan将网络做了两次虚拟化 1.Vxlan将IP网络先抽象成一台拥有无限端口的交换机 2.通过VNI(虚拟网络标识符)来实现广播域隔离(每一个Vni代表vxlan网络中的一个广播域,类似Vlan id) Vxlan隧道建立方式 静态方式:手动指定Vxlan的源、目地址,建立静态隧道 动态方式:建立BGP EVPN邻居关系,通过BGP EVPN协议动态建立隧道 Vxlan基本术语概念 NVE VTEP VNI BD VBDIF NVE接口 NVE(Network Virtualization Edge) 网络虚拟边界 网络虚拟边缘节点,运行了Vxlan的物理设备称为NVE,是实现网络虚拟化功能的实体 根据NVE部署位置不同分为: 硬件模式:NVE部署在支持NVE的设备上,报文封装、解封装都在设备进行 软件模式:NVE部署在vSwitch上,报文解、封装都在vSwitch上进行 混合模式:两个都有 VTEP(Vxlan Tunnel Endpoints) Vxlan隧道端点,用于Vxlan报文的封装与解封装。 在NVE接口中配置的隧道源地址就是VTEP地址。 用于区分不同的Vxlan隧道,2个(一对)VTEP地址就唯一确定一个Vxlan隧道 VNI(Vxlan Network Identifier) Vxlan虚拟网络标识符,具有全局意义。 主要区分Vxlan中不同的广播域(子网),每个VNI就代表Vxlan网络中的一个广播域 同一VNI的网络可以直接Vxlan二层通信,不同VNI的网络就要Vxlan三层通信 BD(Bridge Domain) 桥接域,只具有本地意义 (出交换机之后就无意义) 用于在一台Vtep上区分不同的广播域(子网),每个BD域都需要分配一个本地唯一的VNI 注意:一个物理接口下不同子接口只能绑定一个BD域 Default子接口独占物理接口,即有Default子接口,就不允许配置其它子接口 Vbdif接口(配置的就是Vxlan隧道的网关地址) 接口的编号需要与BD的编号一致,是基于BD域创建的三层逻辑接口 用于不同VNI之间的Vxlan、以及Vxlan和非Vxlan之间的通信 NVE接口 用来指定Vxlan隧道的源目地址,进行数据封装 VXLAN报文格式 Vxlan头部 Vxlan Flags: 固定取值为0000 1000 VNI: Vxlan网络标识符,区分不同的Vxlan隧道 UDP头部 Sport: 通过原始帧的SMAC+DMAC 然后hash计算后出来的值 (模拟器上面有时候源端口也会显示为4789端口) Dport: 4789端口 但是华为模拟器上:UDP的S/Dport都是4789,阉割了Hash的功能 为什么要添加封装UDP 1. 在遇到多下一跳时可以较好的负载分担 因为IP设备主流的负载分担算法是基于五元组的(S/D IP、S/D Port、Protosal) 2.没有UDP的话,源目IP、协议号都是相同的,一直走同一条路,无法负载 有了UDP,就有了端口号,目的端口固定4789,源端口会变化,所以能达到负载分担的效果 3.使用UDP不适用TCP是因为UDP连接建立简单 如何选择哪些报文进入Vxlan隧道 通过二层子接口接入Vxlan 通过在二层子接口上配置不同的流封装类型实现不同数据进入各自对应的Vxlan隧道 主要有4种流封装模式:dot1q、untag、default、qinq 注意事项: 1、当采用Dot1q时,二层子接口封装的vid不能与二层主接口允许通过的Vlan相同 即:同一Vlan,走Vxlan隧道的话就不能走Vlan 2、当采用Dot1q时,同一主接口下的二层子接口Vlan ID不能重叠。 即:同一Vlan,只可以选择一个Vxlan隧道 一个主接口下仅允许创建一个Default类型的子接口,并且创建后不允许再创建其它类型的二层子上;接口 一个主接口下仅允许创建一个Untag类型的子接口,创建后允许创建除Default外的其它类型的二层子接口 通过Vlan直接接入Vxlan隧道 在二层主接口放行Vlan,然后在对应的Vlan下绑定BD信息,可以将对应的Vlan接入对应的Vxlan隧道 Vxlan隧道如何确定隧道目的地址 在隧道接口(NVE接口)中,通过配置头端复制列表(head-end peer-list)确定隧道的目的地址,转发BUM数据帧(BUM-------B:广播帧 U:未知目的MAC的单播帧 M:组播帧) 例如:vni 10 head-end peer-list 1.1.1.1 对应vni为10的Vxlan隧道封装的目的地址为1.1.1.1 ARP如何解析所需的MAC地址 1.AA发送ARP请求,并广播,经过LSW1打上VLAN Tag标签 2.VTEP_1生成AA的MAC地址表项,并对ARP进行Vxlan封装 1、ARP到达VTEP_1后, 由于G1/0/1.1接口配置的流封装模式dot1q指定vlan包含tag10,所以此Arp就进入到G1/0/1.1子接口,发现此子接口关联的BD为1,生成对应的MAC地址表项 2、之后将此ARP广播发送出去并封装Vxlan,根据dot1q将tag10剔除,然后封装BD1对应的VNI10,封装UDP,根据头端复制列表封装对应VNI的目的地址(有多个目的地址就复制多个报文),最后封装VTEP地址为源IP地址。发往VTEP_2和3 3.VTEP_2和3对报文进行Vxlan解封装,生成AA的MAC地址表项 VTEP_2和3根据ARP请求中的sip、vni对应本地的BD、smac生成相应的mac表项 4.VTEP_2和3对解封装后的ARP请求报文进行广播 VTEP2和3对ARP请求进行Vxlan解封装,然后从与相应BD关联的子接口中泛洪出去,由于子接口采用dot1q的流封装模式,所以将报文打上指定tag后再广播出去 5.CC收到后不回应,BB收到后回应AA的ARP请求 1.BB收到AA的ARP请求后,得到AA的MAC和IP地址对应关系,根据此关系发送对应的ARP应答 2.ARP应答经过LSW2打上相应的Vlan tag 20 6.VTEP_3根据报文生成对应BB的MAC表项,并对ARP应答报文进行Vxlan封装 1、根据ARP应答报文的sip、vni对应的bd、smac生成关于相应的NAC表项 2、根据报文的源、目MAC,找到对应的MAC地址表项,找到封装的目的地址为VTEP_1,封装源IP为自己的VTEP3地址。发往VTEP_1 7.VTEP_1对Vxlan报文解封装,生成对应BB的MAC表项 根据ARP应答报文的sip、vni对应的bd、smac生成关于BB的MAC地址表项 8.VTEP_1发送解封装后的ARP应答报文 1、VTEP_1根据mac地址对应表,将ARP应答报文发往相应的子接口 2、根据子接口上配置的dot1q,打上指定的vlan tag标签 9.AA根据应答报文得到BB的IP与MAC对应关系 原文作者链接:https://blog.csdn.net/m0_49864110/article/details/125265373