VXLAN与VLAN相比能够提供更好的扩展性和灵活性,主要有以下特点:
应用灵活部署: 通过VXLAN封装后的2层以太网帧可以跨3层网络边界,让组网以及应用部署变得更加灵活,同时解决多租户网络环境中IP地址冲突问题。
更好的扩展性: 传统 VLANID字段为12-bit,VLAN数量最大为4096;VXLAN使用24-bit VNID (VXLAN network identifier),最大支持 16,000,000 逻辑网络。
提高网络利用率: 传统以太网使用 STP预防环路, STP导致网络冗余路径处于阻塞状态, VXLAN报文基于 3层 IP报头传输,能有效利用网络路径,支持 ECMP(equal-cost multipath )和链路聚合协议。
VXLAN
Tunnel Endpoint (VTEP)。VXLAN使用VTEP设备对VXLAN报文进行封装与解封装,包括ARP请求报文和正常的VXLAN数据报文,VTEP将原始以太网帧通过VXLAN封装后发送至对端 VTEP设备,对端VTEP接收到 VXLAN报文后解封装然后根据原始 MAC进行转发,VTEP可以是物理交换机、物理服务器或者其他支持 VXLAN的硬件设备或软件来实现。
Virtual Network ID ( VNI), VNI封装在 VXLAN头部,共 24-bit ,最大支持16,000,000 逻辑网络。
VXLAN网关用于连接 VXLAN网络和传统 VLAN网络,VXLAN网关实现 VNI和VLAN ID 之间的映射, VXLAN 网关实际上也是一台 VTEP设备。
VTEP设备要加入相同的组播组,主要用于控制平面地址学习。
VXLAN使用 UDP封装完整的以太网帧 (MAC-in-UDP),共 50 字节的封装报文头。具体的报文格式如下:
Inner MAC,内层 MAC是原始以太网帧的 MAC地址。
共 8 个字节,目前使用的是 Flags 中的一个 8bit 的标识位和 24bit 的VNI(Vxlan Network identifier) ,其余部分没有定义,但是在使用的时候必须设置为 0x0000。
共8个字节,IANA分配的标准目的端口使用 4798,但是各厂商可以根据需要进行修改,同时UDP的校验和必须设置成全 0。
共20个字节,目的IP地址可以是单播地址,也可以是多播地址。单播情况下,目的IP地址是目的VTEP的 IP地址;当用于VXLAN控制平面时会使用多播地址。
Outer IP: 外层IP地址是经过VTEP封装后的3层IP地址,源IP是本端VTEP设备IP,用于控制平面时目的 IP 可以是多播地址,用于转发平面时目的 IP是远端 VTEP设备 IP。
共计14个字节,外层以太网帧头部。Outer MAC,外层 MAC是经过 VTEP封装后的二层 MAC,源 MAC是本端 VTEP设备MAC,目的 MAC可以是远端 VTEP设备MAC或者传输路径中间 3 层网络设备 MAC。
在 VXLAN的实现中, 当通过组播实现控制平面路径发现时, VTEP设备之间使用无状态 tunnel ,VTEP设备之间不会维持状态化的长连接。VXLAN需要通过控制平面学习远端设备地址信息, 在本地构建控制平面表项。控制平面表项由 VNI、Inner Source MAC 、Outer Source IP 三元组组成。
控制平面学习地址映射信息后, 转发平面负责实际数据的转发。VTEP为原始数据帧增加 UDP报头,新的报头到达目的 VTEP后才会被去掉,中间路径的网络设备只会根据外层包头内的目的地址进行数据转发。
如上图所示,终端设备 A需要和终端设备 B通信, ARP请求过程如下:
1、终端设备 A 发送 ARP请求,请求终端设备 B 的 MAC地址;
2、VTEP-1收到终端设备 A发送的 ARP请求,此时 VTEP-1还没有终端设备 B对应的地址映射表项, VTEP-1将 ARP请求进行 VXLAN封装, VNI 设置为10,outer-src-ip 是 VTEP-1的 IP ,outer-dst-ip 是加入的组播组地址,封装完成后转发至 VXLAN组播组;
3、VTEP-2、VTEP3加入相同的组播组,所有组成员都会收到 VTEP-1发送的组播报文,解封装后检查 VNI 与本地 VNI 是否匹配,如匹配将 ARP请求发送至本地网络,同时记录 VNI、inner MAC、outer IP 的对应关系,构建控制平面地址映射表项。如 VNI 不匹配则丢弃数据包。
4、终端设备 B 收到 ARP请求后以单播方式发送 ARP响应;
5、VTEP-2收到终端设备 B 的 ARP响应后进行 VXLAN封装,此时 VTEP-2已经构建控制平面地址映射表项,通过 VXLAN封装后以单播方式发送。
Outer-src-ip 是 VTEP-2的 IP 地址,outer-dst-ip 是 VTEP-1的 IP 地址;
6、VTEP-1收到封装后的 ARP响应后,解封装比对 VNI,如匹配将 ARP响应发送至终端设备 A,同时记录 VNI、inner MAC、 outer IP 的对应关系,构建控制平面表项;
7、 此时 VTEP-1、VTEP-2均已成功构建控制平面地址映射信息,后续 VXLAN数据使用单播在 VTEP-1和 VTEP-2之间传输。
4 VXLAN 数据传输
1、ARP请求完成后,终端设备 A 向终端设备 B 发送数据, VTEP-1收到数据中查找地址映射表项,将原始数据进行 VXLAN封装后转发至 VTEP-2;
2、VTEP-2收到 VXLAN数据包后检查 VNI 是否与本地 VNI 匹配, 如匹配则解封装后将原始以太网帧转发至终端设备 B。
1、在进行 ARP处理时,为了将广播通过多播进行传输,必须要设置VNI 到多播组的映射,这种映射属于管理层,用于建立VTEP之间的管理通道。未知的目的 MAC(unknown MAC destination )同样会进行组播封装,处理方式和广播相同。
2、VXLAN报文不能进行分片处理,中间的设备可能会将 VXLAN报文分片,但是VTEP会将分片后的报文丢弃,为了确保 VXLAN报文不被分片处理,需要修改沿途所以设备的 MTU。RFC文档没有阐述为什么 VTEP必须丢弃分片后的报文。
3、在封装和解封装时 VLAN TAG信息都会被剥离,除非另有特殊配置。
以上,就是今日为你带来的Vxlan理论讲解,希望对你能有所启发, 如果你想做一名优秀的网络工程师,也想拥有思科认证!可以私聊,一起交流哦~
VXLAN是一种将二层报文用三层协议进行封装的技术,可以对二层网络在三层范围进行扩展。每个覆盖域被称为VXLAN segment,它的ID是由位于VXLAN数据包头中的VNI标识来区分的。VNI字段包含24bits,故segments最大数量为2的24次方,并且只有在相同的VXLAN segments才能通信。
它是一种在UDP中封装MAC的简单机制,可以创建跨多个物理IP子网的虚拟2层子网(也就是在三层子网中跑2层)
其实EtherIP和GRE也可以实现在IP中封装MAC,但是它们都无法做到VLAN逻辑标记
根据VXLAN的封包模式,也可以将它看作一种隧道模式的网络覆盖技术,这种隧道是无状态的。隧道端点VTEP一般位于拥有虚机的hypervisor宿主机中,因此VNI和VXLAN隧道只有VTEP可见,对于虚机来说是透明的。那么不同的VXLAN segments就可以有相同的MAC地址的虚机。并且VTEP也可以位于物理交换机或物理主机中,甚至可以用软件来定义
VTEP之间完全是通过L3协议交互的,也就意味着VTEP之间可以由Router相连,而非类似于GRE封装模式的固定端到端隧道连接。
实例:
VM1要向VM2发送数据前,必须要知道VM2的MAC地址,其获取过程如下:
1、VM1发送ARP请求包,请求192.168.0.101[VM2_IP]的MAC地址;
2、ARP请求包被VTEP1封装成多播包,发给VNI=864的多播组;
3、所有的VTEP接收此多播包,并添加(VNI–VTEP1–VM1_MAC Address)映射关系到自己的VXLAN表中;
4、目的主机上的VTEP2接收到多播包后将其解开,并向本主机上VNI=864的所有虚拟机发送广播包;
5、VM2看到了ARP包后,回应了自己的MAC地址;
6、VTEP2再次封装回应的单播包,通过路由发给VTEP1;
7、VTEP1解包,并将包传给VM1,则最终获取了VM2的MAC地址;
8、VTEP1将(VNI–VTEP2–VM2_MAC Address)映射关系添加到自己的VXLAN表中;
VM1获知VM2的MAC地址后,发送数据包,过程如下:
1、 VM1发送IP数据包到VM2,即192.168.0.100 到 192.168.0.101;
2、 VTEP1查找自己的VXLAN表知道要发给VTEP2,然后依次封装以下数据包头;
a)VXLAN包头,VNI=864;
b)标准UDP包头,校验和checksum为0x0000,目标端口号4789;
c)标准IP包头,目标地址为VTEP2的IP地址,协议号设为0x11表面为UDP包。
d)标准MAC数据包,目标地址为下一跳设备的MAC地址00:10:11:FE:D8:D2,可路由到目标隧道端VTEP2。
3、 VTEP2接收数据包,根据UDP的destination端口找到VXLAN数据包。接着查找所有所在VXLAN的VNI为864的端口组,找到VM2的
4、 VM2接收并处理数据包,拿到Payload数据。
VXLAN的特点是将L2的以太帧封装到UDP报文(即L2 over L4)中,并在L3网络中传输。本质上是一种隧道技术,在源网络设备与目的网络设备之间的IP网络上,建立一条逻辑隧道,将用户侧报文经过特定的封装后通过这条隧道转发。从用户的角度来看,接入网络的服务器就像是连接到了一个虚拟的二层交换机的不同端口上(可把蓝色虚框表示的数据中心VXLAN网络看成一个二层虚拟交换机),可以方便地通信。
VXLAN完美地弥补了VLAN的上述不足,一方面通过VXLAN中的24比特VNI字段,提供多达16M租户的标识能力,远大于VLAN的4000;另一方面,VXLAN本质上在两台交换机之间构建了一条穿越数据中心基础IP网络的虚拟隧道,将数据中心网络虚拟成一个巨型“二层交换机”,满足虚拟机大范围动态迁移的需求。
如上图所示,VTEP对VM发送的原始以太帧(Original L2 Frame)进行了以下“包装”:
VXLAN Header
增加VXLAN头(8字节),其中包含24比特的VNI字段,用来定义VXLAN网络中不同的租户。此外,还包含VXLAN Flags(8比特,取值为00001000)和两个保留字段(分别为24比特和8比特)。
UDP Header
VXLAN头和原始以太帧一起作为UDP的数据。UDP头中,目的端口号(VXLAN Port)固定为4789,源端口号(UDP Src. Port)是原始以太帧通过哈希算法计算后的值。
Outer IP Header
封装外层IP头。其中,源IP地址(Outer Src. IP)为源VM所属VTEP的IP地址,目的IP地址(Outer Dst. IP)为目的VM所属VTEP的IP地址。
Outer MAC Header
封装外层以太头。其中,源MAC地址(Src. MAC Addr.)为源VM所属VTEP的MAC地址,目的MAC地址(Dst. MAC Addr.)为到达目的VTEP的路径中下一跳设备的MAC地址。
VXLAN在两台TOR交换机之间建立了一条隧道,将服务器发出的原始数据帧加以“包装”,好让原始报文可以在承载网络(比如IP网络)上传输。当到达目的服务器所连接的TOR交换机后,离开VXLAN隧道,并将原始数据帧恢复出来,继续转发给目的服务器。
VTEP(VXLAN Tunnel Endpoints,VXLAN隧道端点)是VXLAN网络的边缘设备,是VXLAN隧道的起点和终点,VXLAN对用户原始数据帧的封装和解封装均在VTEP上进行。
VTEP是VXLAN网络中绝对的主角,VTEP既可以是一台独立的网络设备,也可以是在服务器中的虚拟交换机。源服务器发出的原始数据帧,在VTEP上被封装成VXLAN格式的报文,并在IP网络中传递到另外一个VTEP上,并经过解封转还原出原始的数据帧,最后转发给目的服务器。
以太网数据帧中VLAN只占了12比特的空间,这使得VLAN的隔离能力在数据中心网络中力不从心。而VNI的出现,就是专门解决这个问题的。
VNI(VXLAN Network Identifier,VXLAN 网络标识符),VNI是一种类似于VLAN ID的用户标识,一个VNI代表了一个租户,属于不同VNI的虚拟机之间不能直接进行二层通信。VXLAN报文封装时,给VNI分配了24比特的长度空间,使其可以支持海量租户的隔离。
另外,在 分布式网关 部署场景下,VNI还可分为二层VNI和三层VNI,它们的作用不同。
二层VNI是普通的VNI,以1:1方式映射到广播域BD,实现VXLAN报文同子网的转发。
每个租户VRF实例映射到网络中的唯一第3层VNI。此映射需要在网络中的所有VTEP上保持一致。所有VXLAN间的路由流量使用VXLAN报头中的第3层VNI封装,并为接收的VTEP提供VRF实例。接收的VTEP使用此VNI确定转发内部IP数据包时需要处于的VRF实例。此VNI为在数据平面中实施第3层分段提供基准。
如图所示,在将数据包从 VNI A 发送到 VNI B 时,入口 VTEP 将数据包路由到第 3 层 VNI。它会将内部目标MAC 地址改写为出口 VTEP 的路由器 MAC 地址,并将 VXLAN 报头中的第 3 层 VNI 编码。在出口 VTEP 接收封装的 VXLAN 数据包后,它首先通过删除 VXLAN 报头解封数据包。然后它查看内部数据包报头。由于内部数据包报头中的目标 MAC 地址是其自己的 MAC 地址,因此它执行第 3 层路由查找。VXLAN 报头中的第 3 层 VNI 提供执行此路由查找时所处的 VRF 实例。
当 EVPN VTEP 为它从其本地终端主机接收的数据包执行转发查找和 VXLAN 封装时,它使用第 2 层 VNI 或 VXLAN报头中的第 3 层 VNI,具体取决于是需要桥接还是路由数据包。
如果原始数据包报头中的目标 MAC 地址不属于本地VTEP,则本地 VTEP 执行第 2 层查找并将数据包桥接到与源主机位于同一第 2 层 VNI 的目标终端主机。本地VTEP 在 VXLAN 报头中嵌入此 第 2 层 VNI。在这种情况下,源和目标主机位于同一第 2 层广播域。
如果目标 MAC地址属于本地 VTEP 交换机,换句话说,如果本地 VTEP 是源主机的 IP 网关,并且源主机和目标主机位于不同的IP 子网,则数据包将由本地 VTEP 进行路由。在这种情况下,它执行第 3 层路由查找。然后它使用 VXLAN 报头中的第 3 层 VNI 封装数据包,并将内部目标 MAC 地址改写为远程 VTEP 的路由器 MAC 地址。在接收封装的 VXLAN数据包后,远程 VTEP 会根据内部 IP 报头执行另一个路由查找,因为接收的数据包中的内部目标 MAC 地址属于远程 VTEP 本身。
VXLAN中的“同一大二层域”,就类似于传统网络中VLAN(虚拟局域网)的概念,叫做Bridge-Domain,简称BD。BD域用于桥接不同的二层网络,不同的BD是通过VNI来区分的,BD与VNI是1:1的映射关系。
BD与VNI是绑定关系,将交换机上不同的二层接口划分到BD域下,就能确定报文要经过的VXLAN隧道。
如图所示,将不同的二层接口(Vlan)划分到不同的BD下,实现VM通过进入不同的Vxlan隧道。
手工配置
自动方式建立VXLAN隧道
使用EVPN
最初的VXLAN方案(RFC7348)中没有定义控制平面,是手工配置VXLAN隧道,然后通过流量泛洪的方式进行主机地址的学习。这种方式实现上较为简单,但是会导致网络中存在很多泛洪流量、网络扩展起来困难。
在VXLAN中引入了EVPN作为VXLAN的控制平面,EVPN借用了MP-BGP的机制,在L2VPN地址族下定义了新的子地址族——EVPN地址族,在这个地址族下又新增了一种NLRI,即EVPN NLRI。EVPN NLRI定义了几种BGP EVPN路由类型,这些路由可以携带主机IP、MAC、VNI、VRF等信息。这样,当一个VTEP学习到下挂的主机的IP、MAC地址信息后,就可以通过MP-BGP路由将这些信息发送给其他的VTEP,从而在控制平面实现主机IP、MAC地址的学习,抑制了数据平面的泛洪。
采用EVPN作为VXLAN的控制平面具有以下优势:
Type2 路由
EVPN Type2路由,也就是MAC/IP路由,主要用于VTEP之间相互通告主机IP、MAC信息。
Type3 路由
EVPN Type3路由主要用于在VTEP之间相互通告二层VNI、VTEP IP信息,以建立头端复制列表,即用于VTEP的自动发现和VXLAN隧道的动态建立:如果对端VTEP IP地址是三层路由可达的,则建立一条到对端的VXLAN隧道。同时,如果对端VNI与本端相同,则创建一个头端复制表,用于后续BUM报文转发。
Type3路由的NLRI是由“前缀”和“PMSI”属性组成。其中VTEP IP信息体现在NLRI的 Originating Router's IP Address 字段中,二层VNI信息则体现在PMSI属性的 MPLS Label 中。
Type5 路由
EVPN Type5路由又称IP前缀路由,主要用于传递网段路由。不同于Type2路由只传递32(IPv4)/128(IPv6)位的主机路由,Type5路由可传递0~32/0~128掩码长度的网段路由。
应用说明:
该类型路由的IP Prefix Length和IP Prefix字段既可以携带主机IP地址,也可以携带网段地址:
在为 VNI 启用 ARP 抑制后,其 VTEP 各保存已知 IP 主机的一个 ARP 抑制缓存表及其在 VNI 网段中的关联 MAC地址。当 VNI 中的一台终端主机为另一终端主机 IP 地址发送 ARP 请求时,其本地 VTEP 会截取ARP 请求并在其 ARP 抑制缓存表中检查经过 ARP 处理的 IP 地址。如果它找到匹配项,则本地 VTEP 会代表远程终端主机发送一个 ARP 响应。本地主机在 ARP 响应中学习远程主机的 MAC 地址。如果本地 VTEP 未在其 ARP 抑制表中包含经过 ARP 处理的 IP 地址,则它会使 ARP 请求涌入到 VNI 中的其他 VTEP。对于发送给网络中的静默主机的初始 ARP 请求,此 ARP 泛洪可能发生。网络中的 VTEP 看不到来自静默主机的任何流量,直到另一台主机为其 IP 地址发送 ARP 请求,并且它发回 ARP 响应。在本地 VTEP 学习静默主机的 MAC 和 IP 地址后,信息通过MP-BGP EVPN 控制平面分发给所有其他 VTEP。任何后续的 ARP 请求均不需要泛洪。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)