VxLAN学习

news2024/11/23 4:39:26

目录

什么是VXLAN

为什么需要VXLAN

虚拟机动态迁移,要求提供一个无障碍接入的网络

什么是服务器虚拟化技术?

什么是虚拟机动态迁移?

VXLAN如何满足虚拟机动态迁移时对网络的要求?

数据中心租户数量激增,要求提供一个可隔离海量租户的网络

VXLAN与VLAN之间有何不同

VXLAN隧道是如何建立的

什么是VXLAN中的VTEP和VNI

什么是VXLAN VTEP

什么是VXLAN VNI

哪些VTEP之间需要建立VXLAN隧道

什么是“同一大二层域”

如何确定报文属于哪个BD

哪些报文要进入VXLAN隧道?

将二层子接口加入BD

VXLAN隧道是怎么建立的

手工方式建立VXLAN隧道

自动方式建立VXLAN隧道

如何确定报文要进哪条隧道?

VXLAN网关有哪些种类

VXLAN二层网关与三层网关

VXLAN集中式网关与分布式网关

VXLAN分布式网关

VXLAN网络中报文是如何转发的

集中式VXLAN中同子网互通流程

ARP请求报文转发流程

ARP应答报文转发流程

集中式VXLAN中不同子网互通流程

如何配置VXLAN

什么是BGP EVPN


什么是VXLAN

VXLAN(Virtual eXtensible Local Area Network,虚拟扩展局域网),是由IETF定义的NVO3(Network Virtualization over Layer 3)标准技术之一,是对传统VLAN协议的一种扩展。VXLAN的特点是将L2的以太帧封装到UDP报文(即L2 over L4)中,并在L3网络中传输。

如下图所示,VXLAN本质上是一种隧道技术,在源网络设备与目的网络设备之间的IP网络上,建立一条逻辑隧道,将用户侧报文经过特定的封装后通过这条隧道转发。从用户的角度来看,接入网络的服务器就像是连接到了一个虚拟的二层交换机的不同端口上(可把蓝色虚框表示的数据中心VXLAN网络看成一个二层虚拟交换机),可以方便地通信。

VXLAN已经成为当前构建数据中心的主流技术,是因为它能很好地满足数据中心里虚拟机动态迁移和多租户等需求。

为什么需要VXLAN

为什么需要VXLAN呢?这和数据中心服务器侧的虚拟化趋势紧密相关,一方面服务器虚拟化后出现了虚拟机动态迁移,要求提供一个无障碍接入的网络;另一方面,数据中心规模越发庞大,租户数量激增,需要网络提供隔离海量租户的能力。采用VXLAN可以满足上述两个关键需求。

虚拟机动态迁移,要求提供一个无障碍接入的网络

什么是服务器虚拟化技术?

传统的数据中心物理服务器利用率太低,平均只有10%~15%,浪费了大量的电力能源和机房资源,所以出现了服务器虚拟化技术。如下图所示,服务器虚拟化技术是把一台物理服务器虚拟化成多台逻辑服务器,这种逻辑服务器被称为虚拟机(VM)。每个VM都可以独立运行,有自己的操作系统、APP,当然也有自己独立的MAC地址和IP地址,它们通过服务器内部的虚拟交换机(vSwitch)与外部实体网络连接。

通过服务器虚拟化,可以有效地提高服务器的利用率,降低能源消耗,降低数据中心的运营成本,所以虚拟化技术目前得到了广泛的应用。

什么是虚拟机动态迁移?

所谓虚拟机动态迁移,就是在保证虚拟机上服务正常运行的同时,将一个虚拟机系统从一个物理服务器移动到另一个物理服务器的过程。该过程对于最终用户来说是无感知的,从而使得管理员能够在不影响用户正常使用的情况下,灵活调配服务器资源,或者对物理服务器进行维修和升级。

在服务器虚拟化后,虚拟机动态迁移变得常态化,为了保证迁移时业务不中断,就要求在虚拟机迁移时,不仅虚拟机的IP地址不变,而且虚拟机的运行状态也必须保持原状(例如TCP会话状态),所以虚拟机的动态迁移只能在同一个二层域中进行,而不能跨二层域迁移。

如下图所示,传统的二三层网络架构限制了虚拟机的动态迁移范围,迁移只能在一个较小的局部范围内进行,应用受到了极大的限制。

为了打破这种限制,实现虚拟机的大范围甚至跨地域的动态迁移,就要求把VM迁移可能涉及的所有服务器都纳入同一个二层网络域,这样才能实现VM的大范围无障碍迁移。

VXLAN如何满足虚拟机动态迁移时对网络的要求?

众所周知,同一台二层交换机可以实现下挂服务器之间的二层通信,而且服务器从该二层交换机的一个端口迁移到另一个端口时,IP地址是可以保持不变的。这样就可以满足虚拟机动态迁移的需求了。VXLAN的设计理念和目标正是由此而来的。

从上一个小节我们可以知道,VXLAN本质上是一种隧道技术,当源和目的之间有通信需求时,便在数据中心IP网络之上创建一条虚拟的隧道,透明转发用户数据。而数据中心内相互通信的需求众多,这种隧道的建立方式几乎是全互联形态才能满足通信需求。

VXLAN可以提供一套方法论,在数据中心IP网络基础上,构建一张全互联的二层隧道虚拟网络,保证任意两点之间都能通过VXLAN隧道来通信,并忽略底层网络的结构和细节。从服务器的角度看,VXLAN为它们将整个数据中心基础网络虚拟成了一台巨大的“二层交换机”,所有服务器都连接在这台虚拟二层交换机上。而基础网络之内如何转发都是这台“巨大交换机”内部的事情,服务器完全无需关心。

如下图所示将整个数据中心基础网络虚拟成了一台巨大的“二层交换机”

基于这种“二层交换机”的模型,就很容易理解为什么VXLAN可以实现VM动态迁移了:将虚拟机从“二层交换机”的一个端口换到另一个端口,完全无需变更IP地址。

使用这种理念的技术协议,除了VXLAN外,还有NVGRE、STT等,本文仅对VXLAN进行说明。

数据中心租户数量激增,要求提供一个可隔离海量租户的网络

众所周知,在传统的VLAN网络中,标准定义所支持的可用VLAN数量只有4000个左右。服务器虚拟化后,一台物理服务器中承载了多台虚拟机,每个虚拟机都有独立的IP地址和MAC地址,相当于接入数据中心的服务器成倍扩大了。另外,公有云或其它大型虚拟化云数据中心动辄需容纳上万甚至更多租户,VLAN的能力显然已经力不从心。

VXLAN如何来解决上述问题呢?VXLAN在VXLAN帧头中引入了类似VLAN ID的网络标识,称为VXLAN网络标识VNI(VXLAN Network ID),由24比特组成,理论上可支持多达16M的VXLAN段,从而满足了大规模不同网络之间的标识、隔离需求。下文我们会介绍VNI的详细作用。

VXLAN与VLAN之间有何不同

VLAN作为传统的网络隔离技术,在标准定义中VLAN的数量只有4000个左右,无法满足大型数据中心的租户间隔离需求。另外,VLAN的二层范围一般较小且固定,无法支持虚拟机大范围的动态迁移。

VXLAN完美地弥补了VLAN的上述不足,一方面通过VXLAN中的24比特VNI字段(如下图所示),提供多达16M租户的标识能力,远大于VLAN的4000;另一方面,VXLAN本质上在两台交换机之间构建了一条穿越数据中心基础IP网络的虚拟隧道,将数据中心网络虚拟成一个巨型“二层交换机”,满足虚拟机大范围动态迁移的需求。

虽然从名字上看,VXLAN是VLAN的一种扩展协议,但VXLAN构建虚拟隧道的本领已经与VLAN迥然不同了。

下面就让我们来看下,VXLAN报文到底长啥样。

如下图所示的VXLAN报文格式(以外层IP头为IPv4格式为例)

如上图所示,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隧道是如何建立的

本节将为您介绍VXLAN隧道的建立过程,并在这个过程中更好地理解VXLAN的工作原理。

什么是VXLAN中的VTEP和VNI

下面让我们来进一步了解VXLAN的网络模型以及一些常见的概念。如下图所示,两台服务器之间通过VXLAN网络进行通信。其中VTEP的全称为VXLAN Tunnel Endpoint;VNI的全称为VXLAN Network Identifier。

VXLAN网络模型示意图

从上图中可以发现,VXLAN在两台TOR交换机(以TOR架构安装的交换机称为TOR交换机)之间建立了一条隧道,将服务器发出的原始数据帧加以“包装”,好让原始报文可以在承载网络(比如IP网络)上传输。当到达目的服务器所连接的TOR交换机后,离开VXLAN隧道,并将原始数据帧恢复出来,继续转发给目的服务器。

另外,VXLAN网络中出现了一些传统数据中心网络中没有的新元素,如VTEP、VNI等,它们的作用是什么呢?下面将向您介绍这几个新元素。

什么是VXLAN VTEP

如上图所示,VTEP(VXLAN Tunnel Endpoints,VXLAN隧道端点)是VXLAN网络的边缘设备,是VXLAN隧道的起点和终点,VXLAN对用户原始数据帧的封装和解封装均在VTEP上进行。

VTEP是VXLAN网络中绝对的主角,VTEP既可以是一台独立的网络设备(比如华为的CloudEngine系列交换机),也可以是在服务器中的虚拟交换机。源服务器发出的原始数据帧,在VTEP上被封装成VXLAN格式的报文,并在IP网络中传递到另外一个VTEP上,并经过解封转还原出原始的数据帧,最后转发给目的服务器。

VTEP在VXLAN隧道的建立和转发过程中的详细工作,可以参见下文的VXLAN隧道是如何建立的

什么是VXLAN VNI

前文提到,以太网数据帧中VLAN只占了12比特的空间,这使得VLAN的隔离能力在数据中心网络中力不从心。而VNI的出现,就是专门解决这个问题的。

如上图所示,VNI(VXLAN Network Identifier,VXLAN 网络标识符),VNI是一种类似于VLAN ID的用户标识,一个VNI代表了一个租户,属于不同VNI的虚拟机之间不能直接进行二层通信。如前面所示,VXLAN报文封装时,给VNI分配了24比特的长度空间,使其可以支持海量租户的隔离。

VNI在VXLAN隧道的建立和转发过程中的详细工作,可以参见下文的VXLAN隧道是如何建立的

另外,在分布式网关部署场景下,VNI还可分为二层VNI和三层VNI,它们的作用不同:

  • 二层VNI是普通的VNI,以1:1方式映射到广播域BD,实现VXLAN报文同子网的转发(详情可参见下文的什么是“同一大二层域”)。

  • 三层VNI和VPN实例进行关联,用于VXLAN报文跨子网的转发(三层VNI的工作详情将在另外一篇EVPN相关的文档中展开描述)。

哪些VTEP之间需要建立VXLAN隧道

一条VXLAN隧道是由两个VTEP来确定建立的。数据中心网络中存在很多个VTEP,如下图所示,那么哪些VTEP间需要建立VXLAN隧道呢?

建立VXLAN隧道示意图

如前所述,通过VXLAN隧道,“二层域”可以突破物理上的界限,实现大二层网络中VM之间的通信。所以,连接在不同VTEP上的VM之间如果有“大二层”互通的需求,这两个VTEP之间就需要建立VXLAN隧道。换言之,同一大二层域内的VTEP之间都需要建立VXLAN隧道。

例如,假设VTEP_1连接的VM、VTEP_2连接的VM以及VTEP_3连接的VM之间需要“大二层”互通,那VTEP_1、VTEP_2和VTEP_3之间就需要两两建立VXLAN隧道,如下图所示。

建立VXLAN隧道示意图

什么是“同一大二层域”

上文提到的“同一大二层域”,就类似于传统网络中VLAN(虚拟局域网)的概念,只不过在VXLAN网络中,它有另外一个名字,叫做Bridge-Domain,简称BD。

我们知道,不同的VLAN是通过VLAN ID来进行区分的,那不同的BD是如何进行区分的呢?其实前面已经提到了,就是通过VNI来区分的。对于CloudEngine系列交换机而言,BD与VNI是1:1的映射关系,这种映射关系是通过在VTEP设备上配置命令行建立起来的,配置样例如下:

bridge-domain 10   //表示创建一个“大二层广播域”BD,其编号为10
 vxlan vni 5000  //表示在BD 10下,指定与之关联的VNI为5000
#

VTEP设备会根据以上配置生成BD与VNI的映射关系表,该映射表可以通过命令行查看,如下所示:

<HUAWEI> display vxlan vni
Number of vxlan vni : 1 
VNI            BD-ID            State  
--------------------------------------- 
5000           10               up  

有了映射表后,进入VTEP的报文就可以根据自己所属的BD来确定报文在进行VXLAN封装时,该添加哪个VNI标识。那么,报文根据什么来确定自己属于哪个BD呢?

如何确定报文属于哪个BD

这里要先澄清下,VTEP只是交换机承担的一个角色而已,只是交换机功能的一部分。也就是说,并非所有进入到交换机的报文都会走VXLAN隧道(也可能报文就是走普通的二三层转发流程)。所以,我们在回答“如何确定报文属于哪个BD”之前,必须先要回答“哪些报文要进入VXLAN隧道”。

哪些报文要进入VXLAN隧道

回答这个问题之前,不妨先让我们回想一下VLAN技术中,交换机对于接收和发送的报文是如何进行处理的。报文要进入交换机进行下一步处理,首先得先过接口这一关,可以说接口掌控着对报文的“生杀大权”。传统网络中定义了三种不同类型的接口:Access、Trunk、Hybrid。这三种类型的接口虽然应用场景不同,但它们的最终目的是一样的:一是根据配置来检查哪些报文是允许通过的;二是判断对检查通过的报文做怎样的处理。

其实在VXLAN网络中,VTEP上的接口也承担着类似的任务,只不过在CloudEngine系列交换机中,这里的接口不是物理接口,而是一个叫做“二层子接口”的逻辑接口。类似的,二层子接口主要做两件事:一是根据配置来检查哪些报文需要进入VXLAN隧道;二是判断对检查通过的报文做怎样的处理。在二层子接口上,可以根据需要定义不同的流封装类型(类似于传统网络中不同的接口类型)。CloudEngine系列交换机目前支持的流封装类型有dot1q、untag、qinq和default四种类型:

  • dot1q:对于带有一层VLAN Tag的报文,该类型接口只接收与指定VLAN Tag匹配的报文;对于带有两层VLAN Tag的报文,该类型接口只接收外层VLAN Tag与指定VLAN Tag匹配的报文。
  • untag:该类型接口只接收不带VLAN Tag的报文。
  • qinq:该类型接口只接收带有指定两层VLAN Tag的报文。
  • default:允许接口接收所有报文,不区分报文中是否带VLAN Tag。不论是对原始报文进行VXLAN封装,还是解封装VXLAN报文,该类型接口都不会对原始报文进行任何VLAN Tag处理,包括添加、替换或剥离。

VXLAN隧道两端二层子接口的配置并不一定是完全对等的。正因为这样,才可能实现属于同一网段但是不同VLAN的两个VM通过VXLAN隧道进行通信。

除二层子接口外,还可以将VLAN作为业务接入点。将VLAN绑定到广播域BD后,加入该VLAN的接口即为VXLAN业务接入点,进入接口的报文由VXLAN隧道处理。

将二层子接口加入BD

现在我们再来回答“如何确定报文属于哪个BD”就非常简单了。其实,只要将二层子接口加入指定的BD,然后根据二层子接口上的配置,设备就可以确定报文属于哪个BD啦!

比如下图所示的组网,一台虚拟化服务器中有两个不同VLAN的虚拟机VM1(VLAN 10)和VM2(VLAN 20),它们与其他虚拟机通信时需要接入VXLAN网络。此时我们可以分别在VTEP的物理接口10GE 1/0/1上,分别针对VM1和VM2封装不同的二层子接口,并将其分别加入不同的BD。这样后续VM1和VM2的流量将会进入不同的VXLAN隧道继续转发。

在这个举例中,vSwitch的上行口配置成Trunk模式,且PVID为20。这样vSwitch发给VTEP的报文中,既有带tag的VM1流量,又有untag的VM2流量,此时在VTEP的接入口上创建两个二层子接口,分别配置为dot1q和untag的封装类型。

将二层子接口加入BD的示意图

下面就基于上图,结合CloudEngine交换机上的配置举例进行说明。

在CloudEngine交换机的接入物理接口10GE 1/0/1上,分别创建二层子接口10GE 1/0/1.1和10GE 1/0/1.2,并分别配置其流封装类型为dot1q和untag。

interface 10GE1/0/1.1 mode l2   //创建二层子接口10GE1/0/1.1
 encapsulation dot1q vid 10   //只允许携带VLAN Tag 10的报文进入VXLAN隧道
 bridge-domain 10   //指定报文进入的是BD 10
#
interface 10GE1/0/1.2 mode l2   //创建二层子接口10GE1/0/1.2
 encapsulation untag   //只允许不携带VLAN Tag的报文进入VXLAN隧道
 bridge-domain 20   //指定报文进入的是BD 20
#

VXLAN隧道是怎么建立的

现在,我们可以来看下VXLAN隧道是怎么建立起来的。一般而言,隧道的建立不外乎手工方式和自动方式两种。

手工方式建立VXLAN隧道

这种方式需要用户手动指定VXLAN隧道的源IP为本端VTEP的IP、目的IP为对端VTEP的IP,也就是人为地在本端VTEP和对端VTEP之间建立静态VXLAN隧道。

对于CloudEngine系列交换机,以上配置是在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 head-end peer-list 2.2.2.2vni 5000 head-end peer-list 2.2.2.3的配置,表示属于VNI 5000的对端VTEP有两个,IP地址分别为2.2.2.2和2.2.2.3。根据这两条配置,VTEP上会生成如下所示的一张表:

<HUAWEI> display vxlan vni 5000 verbose
    BD ID                 : 10 
    State                  : up 
    NVE                    : 288
    Source Address      : 1.1.1.1
    Source IPv6 Address    : -
    UDP Port               : 4789 
    BUM Mode               : head-end
    Group Address          : -  
    Peer List            : 2.2.2.2 2.2.2.3  
    IPv6 Peer List         : -

根据上表中的Peer List,本端VTEP就可以知道属于同一BD(或同一VNI)的对端VTEP都有哪些,这也就决定了同一大二层广播域的范围。当VTEP收到BUM(Broadcast&Unknown-unicast&Multicast,广播&未知单播&组播)报文时,会将报文复制并发送给Peer List中所列的所有对端VTEP(这就好比广播报文在VLAN内广播)。因此,这张表也被称为“头端复制列表”。当VTEP收到已知单播报文时,会根据VTEP上的MAC表来确定报文要从哪条VXLAN隧道走。而此时Peer List中所列的对端,则充当了MAC表中“出接口”的角色。

在后面的报文转发流程中,你将会看到头端复制列表是如何在VXLAN网络中指导报文进行转发的。

自动方式建立VXLAN隧道

自动方式下VXLAN隧道的建立需要借助于EVPN(Ethernet VPN)协议,这部分内容请参见《什么是EVPN》。

如何确定报文要进哪条隧道?

属于同一BD的VXLAN隧道可能不止一条,比如上文的头端复制列表中,同一个源端VTEP(1.1.1.1)对应了两个对端VTEP(2.2.2.2和2.2.2.3)。那就带来了另一个问题,报文到底应该走哪一条隧道呢?

我们知道,基本的二三层转发中,二层转发依赖的是MAC表,如果没有对应的MAC条目,则主机发送ARP广播报文请求对端的MAC地址;三层转发依赖的是FIB表。在VXLAN中,其实也是同样的道理。在下一小节中,将介绍VXLAN网络中报文的转发流程,相信看完下面的内容,关于“如何确定报文要进哪条隧道”的疑惑也就迎刃而解了。

VXLAN网关有哪些种类

VXLAN二层网关与三层网关

和VLAN类似,不同VNI之间的主机,以及VXLAN网络和非VXLAN网络中的主机不能直接相互通信。为了满足这些通信需求,VXLAN引入了VXLAN网关的概念。VXLAN网关分为二层网关和三层网关:

  • VXLAN二层网关:用于终端接入VXLAN网络,也可用于同一VXLAN网络的子网通信。

  • VXLAN三层网关:用于VXLAN网络中跨子网通信以及访问外部网络。

VXLAN集中式网关与分布式网关

根据三层网关部署方式的不同,VXLAN三层网关又可以分为集中式网关和分布式网关。

VXLAN集中式网关

集中式网关是指将三层网关集中部署在一台设备上,如下图所示,所有跨子网的流量都经过这个三层网关转发,实现流量的集中管理。

VXLAN集中式网关组网图

 部署集中式网关的优点和缺点如下:

  • 优点:对跨子网流量进行集中管理,网关的部署和管理比较简单。
  • 缺点:
    • 转发路径不是最优:同一二层网关下跨子网的数据中心三层流量都需要经过集中三层网关绕行转发(如图中蓝色虚线所示)。
    • ARP表项规格瓶颈:由于采用集中三层网关,通过三层网关转发的终端的ARP表项都需要在三层网关上生成,而三层网关上的ARP表项规格有限,这不利于数据中心网络的扩展。

VXLAN分布式网关

通过部署分布式网关可以解决集中式网关部署的缺点。VXLAN分布式网关是指在典型的“Spine-Leaf”组网结构下,将Leaf节点作为VXLAN隧道端点VTEP,每个Leaf节点都可作为VXLAN三层网关(同时也是VXLAN二层网关),Spine节点不感知VXLAN隧道,只作为VXLAN报文的转发节点。如下图所示,Server1和Server2不在同一个网段,但是都连接到同一个Leaf节点。Server1和Server2通信时,流量只需要在该Leaf节点上转发,不再需要经过Spine节点。

部署分布式网关时:

  • Spine节点:关注于高速IP转发,强调的是设备的高速转发能力。
  • Leaf节点:
    • 作为VXLAN网络中的二层网关设备,与物理服务器或VM对接,用于解决终端租户接入VXLAN虚拟网络的问题。
    • 作为VXLAN网络中的三层网关设备,进行VXLAN报文封装/解封装,实现跨子网的终端租户通信,以及外部网络的访问。

VXLAN分布式网关示意图

VXLAN分布式网关具有如下特点:

  • 同一个Leaf节点既可以做VXLAN二层网关,也可以做VXLAN三层网关,部署灵活。
  • Leaf节点只需要学习自身连接服务器的ARP表项,而不必像集中三层网关一样,需要学习所有服务器的ARP表项,解决了集中式三层网关带来的ARP表项瓶颈问题,网络规模扩展能力强

分布式VXLAN网络中,推荐使用BGP EVPN作为VXLAN网络的控制面,关于BGP EVPN的相关介绍,请参见《什么是EVPN》。 

VXLAN网络中报文是如何转发的

本节以集中式VXLAN网络(手工方式建立VXLAN隧道)为例,分别介绍相同子网内、不同子网间是如何进行通信的,帮助您理解上文所介绍到的概念。

部署了BGP EVPN的分布式VXLAN网络中报文的转发过程,请参见《什么是EVPN》。

集中式VXLAN中同子网互通流程

如下图所示,VM_A、VM_B和VM_C同属于10.1.1.0/24网段,且同属于VNI 5000。此时,VM_A想与VM_C进行通信。

由于是首次进行通信,VM_A上没有VM_C的MAC地址,所以会发送ARP广播报文请求VM_C的MAC地址。

同子网VM互通组网图

下面就让我们根据ARP请求报文及ARP应答报文的转发流程,来看下MAC地址是如何进行学习的。

ARP请求报文转发流程

结合下图,我们来一起了解一下ARP请求报文的转发流程。

ARP请求报文转发流程示意图

  1. VM_A发送源MAC为MAC_A、目的MAC为全F、源IP为IP_A、目的IP为IP_C的ARP广播报文,请求VM_C的MAC地址。
  2. VTEP_1收到ARP请求后,根据二层子接口上的配置判断报文需要进入VXLAN隧道。确定了报文所属BD后,也就确定了报文所属的VNI。同时,VTEP_1学习MAC_A、VNI和报文入接口(Port_1,即二层子接口对应的物理接口)的对应关系,并记录在本地MAC表中。之后,VTEP_1会根据头端复制列表对报文进行复制,并分别进行封装。

    可以看到,这里封装的外层源IP地址为本地VTEP(VTEP_1)的IP地址,外层目的IP地址为对端VTEP(VTEP_2和VTEP_3)的IP地址;外层源MAC地址为本地VTEP的MAC地址,而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP。

  3. 报文到达VTEP_2和VTEP_3后,VTEP对报文进行解封装,得到VM_A发送的原始报文。同时,VTEP_2和VTEP_3学习VM_A的MAC地址、VNI和远端VTEP的IP地址(IP_1)的对应关系,并记录在本地MAC表中。之后,VTEP_2和VTEP_3根据二层子接口上的配置对报文进行相应的处理并在对应的二层域内广播。

    VM_B和VM_C接收到ARP请求后,比较报文中的目的IP地址是否为本机的IP地址。VM_B发现目的IP不是本机IP,故将报文丢弃;VM_C发现目的IP是本机IP,则对ARP请求做出应答。下面,让我们看下ARP应答报文是如何进行转发的。

ARP应答报文转发流程

结合下图,我们来一起了解一下ARP应答报文的转发流程。

ARP应答报文转发流程示意图

  1. 由于此时VM_C上已经学习到了VM_A的MAC地址,所以ARP应答报文为单播报文。报文源MAC为MAC_C,目的MAC为MAC_A,源IP为IP_C、目的IP为IP_A。
  2. VTEP_3接收到VM_C发送的ARP应答报文后,识别报文所属的VNI(识别过程与步骤②类似)。同时,VTEP_3学习MAC_C、VNI和报文入接口(Port_3)的对应关系,并记录在本地MAC表中。之后,VTEP_3对报文进行封装。

    可以看到,这里封装的外层源IP地址为本地VTEP(VTEP_3)的IP地址,外层目的IP地址为对端VTEP(VTEP_1)的IP地址;外层源MAC地址为本地VTEP的MAC地址,而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。

    封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP。

  3. 报文到达VTEP_1后,VTEP_1对报文进行解封装,得到VM_C发送的原始报文。同时,VTEP_1学习VM_C的MAC地址、VNI和远端VTEP的IP地址(IP_3)的对应关系,并记录在本地MAC表中。之后,VTEP_1将解封装后的报文发送给VM_A。

至此,VM_A和VM_C均已学习到了对方的MAC地址。之后,VM_A和VM_C将采用单播方式进行通信。单播报文的封装与解封装过程,与ARP类似,本文就不再赘述啦!

集中式VXLAN中不同子网互通流程

如下图所示,VM_A和VM_B分别属于10.1.10.0/24网段和10.1.20.0/24网段,且分别属于VNI 5000和VNI 6000。VM_A和VM_B对应的三层网关分别是VTEP_3上BDIF 10和BDIF 20的IP地址。VTEP_3上存在到10.1.10.0/24网段和10.1.20.0/24网段的路由。此时,VM_A想与VM_B进行通信。

图1-15 不同子网VM互通流程示意

BDIF接口的功能与VLANIF接口类似,是基于BD创建的三层逻辑接口,用以实现不同子网之间的通信,或VXLAN网络与非VXLAN网络之间的通信。

由于是首次进行通信,且VM_A和VM_B处于不同网段,VM_A需要先发送ARP广播报文请求网关(BDIF 10)的MAC。获得网关的MAC后,VM_A先将数据报文发送给网关;之后网关也将发送ARP广播报文请求VM_B的MAC,获得VM_B的MAC后,网关再将数据报文发送给VM_B。以上MAC地址学习的过程与集中式VXLAN中同子网互通流程中MAC地址学习的流程一致,不再赘述。现在假设VM_A和VM_B均已学到网关的MAC、网关也已经学到VM_A和VM_B的MAC,下面就让我们看下数据报文是如何从VM_A发送到VM_B的。

不同子网VM互通报文转发流程图

 如上图所示,数据报文从VM_A发送到VM_B的流程如下:

  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发送的原始报文。然后,VTEP_3会对报文做如下处理:
    • VTEP_3发现该报文的目的MAC为本机BDIF 10接口的MAC,而目的IP地址为IP_B(10.1.20.1),所以会根据路由表查找到IP_B的下一跳。
    • 发现下一跳为10.1.20.10,出接口为BDIF 20。此时VTEP_3查询ARP表项,并将原始报文的源MAC修改为BDIF 20接口的MAC(MAC_20),将目的MAC修改为VM_B的MAC(MAC_B)。
    • 报文到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。

  4. 报文到达VTEP_2后,VTEP_2对报文进行解封装,得到内层的数据报文,并将其发送给VM_B。

VM_B回应VM_A的流程与上述过程类似,本文就不再赘述啦!

VXLAN网络与非VXLAN网络之间的互通,也需要借助于三层网关,其实现与上图中的不同点在于:报文在VXLAN网络侧会进行封装,而在非VXLAN网络侧不需要进行封装。报文从VXLAN侧进入网关并解封装后,就按照普通的单播报文发送方式进行转发。

如何配置VXLAN

在华为CloudEngine交换机上配置VXLAN的命令步骤、参数说明、注意事项以及配置举例,请进入华为技术支持网站,选择相应的CloudEngine交换机款型后,打开华为CloudEngine交换机的产品文档,进入“配置 > VXLAN配置指南”节点继续阅读。

什么是BGP EVPN

在VXLAN网络中,我们还常常遇到BGP EVPN协议,因为BGP EVPN协议可以用来作为VXLAN网络的控制面协议,可以帮助VTEP之间实现主机IP、MAC地址的学习,抑制数据平面的泛洪等,在实际应用中十分广泛。关于BGP EVPN在VXLAN网络中的工作原理和关键配置介绍,请参见《什么是EVPN》。

原文连接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/752921.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TIOBE 2023年7月编程语言排行榜:C++即将超越C!

一、TIOBE统计数据&#xff08;2023年7月&#xff09; TIOBE Index编程社区指数是编程语言流行度的一个指标。评级基于全球熟练工程师的数量、课程和第三方供应商的数量。Google、Bing、Yahoo!、维基百科、亚马逊、YouTube 和百度等流行搜索引擎用于计算评级。 七月头条&#…

性能测试工具 Jmeter 测试 JMS (Java Message Service)/ActiveMQ 性能

目录 前言 ActiveMQ 介绍 准备工作 编写jndi.properties添加到ApacheJMeter.jar 中 下载 ActiveMQ 配置 Jmeter 进行测试 点对点 (Queues 队列) 配置 Jmeter 进行测试 发布/订阅 (Topic 队列) 配置发布 Publisher 配置订阅 Subscriber 总结 前言 JMeter是一个功能强大…

【Java】如何有效防止API的重放攻击?API接口防止参数篡改?

文章目录 前言一、API接口常见的安全防护要做到主要有以下几点&#xff1a;二、请求参数防篡改三、防止重放攻击3.1、基于timestamp的方案3.2、基于nonce的方案3.2、基于timestamp和nonce的方案3.3、微信公众号如何保证消息不会被重放攻击 前言 API重放攻击(Replay Attacks)又…

uniapp调接口出现跨域问题。

今天在写uniapp项目的时候&#xff0c;使用在线模拟接口的时候&#xff0c;出现跨域问题。 【问题描述】&#xff1a; ①在内嵌浏览器运行&#xff0c;不会出现跨域问题&#xff0c;好像是内嵌浏览器自动去掉了跨域问题。 ②在外部浏览器调用的时候会出现跨域问题。&#xf…

Yalmip工具箱使用教程(2)-决策变量进阶

博客中所有内容均来源于自己学习过程中积累的经验以及对yalmip官方文档的翻译&#xff1a;https://yalmip.github.io/tutorials/ 1.决策变量的定义 1.1 sdpvar 上文简单介绍了sdpvar函数的用法&#xff0c;接下来将对其进行详细介绍。复习一下&#xff0c;sdpvar函数的基本语…

常用化合物谱图数据库查询系统-40个软件免费查!

化学图谱是用于描述化学物质结构和性质的图形化表示方法&#xff0c;在有机化学、材料科学、生物化学、药物化学等领域都被广泛的应用研究分析。不同类型的化学谱图适用于不同的化学分析和研究领域&#xff0c;为此笔者调研了常用化合物谱图数据库及各个类型的主流使用化学谱图…

(RX200)R5F52315ADFP/R5F52318ADFL/R5F52316CDFL微控制器基于RXv2 32位内核,54MHz 闪存 LQFP

RX200 32位微控制器 (MCU) 在功率效率和性能之间实现了平衡。这些MCU在工作模式下的电流消耗为0.12mA/MHz&#xff0c;在待机模式下的电流消耗仅为0.8μA&#xff08;保留RAM内容&#xff09;。RX200 MCU具有54MHz的最高CPU运行速度&#xff0c;可提供4.16 CoreMark/MHz的高性能…

Home Assistant 南方电网 计算电费

目录 1.China Southern Power Grid Statistics集成2.获取当月用电情况3.计算电费然后在UI上显示3.效果 1.China Southern Power Grid Statistics集成 链接 2.获取当月用电情况 因为我的电费是固定的&#xff0c;没有阶梯电价 用电量 * 0.63906875 电费 3.计算电费然后在UI…

ESXI8.0安装教程,在VMware Workstation安装esxi

文章目录 &#x1f41f;前言&#x1f41f;安装&#x1f41f;在VMware WorkStation中创建虚拟机&#x1f41f;ESXI部署安装&#x1f41f;安装完成后配置 &#x1f41f;前言 ESXI8.0版本开始最低RAM从以前的4GB变为8GB 本文所使用到的镜像以及Key都可以到我的网站中下载 地址&…

Python——— 面向对象

&#xff08;一&#xff09;初识面向对象 Python完全采用了面向对象的思想&#xff0c;是真正面向对象的编程语言&#xff0c; 完全支持面向对象的基本功能&#xff0c;例如&#xff1a;继承、多态、封装等。 Python 支持面向过程、面向对象、函数式编程等多种编程范 式。 Pyth…

数据结构初阶--排序2

目录 前言快速排序思路hoare版本代码实现挖坑法代码实现前后指针法代码实现 快排优化三项取中法代码实现三指针代码实现 快排非递归代码实现 归并排序思路代码实现归并非递归代码实现 计数排序思路代码实现 前言 本篇文章将继续介绍快排&#xff0c;归并等排序算法以及其变式。…

2023年iOS App Store上架流程详解(上)

目录 1.注册开发者账号 2.登录并配置人员 3.申请证书和配置文件 一.证书管理​ 二.新建证书​ 三.使用appuploader服务同步证书​ 1&#xff09;申请证书 2&#xff09;添加Identifiers和配置App ID 3&#xff09;申请配置文件 1.在Xcode项目中配置签名 2.上传应用包…

数据库应用:死锁、悲观锁、乐观锁

目录 一、理论 1.死锁 2.悲观锁 3.乐观锁 二、总结 一、理论 1.死锁 &#xff08;1&#xff09;概念 死锁是指两个或两个以上的进程在执行过程中&#xff0c;因争夺资源而造成的一种互相等待的现象&#xff0c;若无外力作用&#xff0c;它们都将无法推进下去。此时称系…

INVDIA GPU参数列表:P100,V100,A100,A800,H100等性能参数

一、P100与V100 训练深层神经网络的时候&#xff0c;V100比P100快大约2倍 二、A100 三、A800 四、H100 引用 1、 世上最全NVDIA GPU参数列表&#xff1a; V100&#xff0c; A100&#xff0c; A800&#xff0c;H100&#xff0c;3090&#xff0c;4090&#xff0c; A40&#xf…

Unity使用Android Stdio接入SDK制作AAR包

最近需要在Unity2021版本中接入SDK&#xff0c;发现和直接接入SDK有些区别&#xff0c;这里把接入的流程记录一下。 Unity在最新的版本中把UnityPlayActivity.java&#xff0c;从Class.jar中移除&#xff0c;需要在Unity的工程内找到这个文件&#xff0c;并把其加入到Android …

【监控系统】Prometheus监控组件Mysql-Exporter配置实战

Mysql-Exporter主要监控Mysql数据库的稳定性、吞吐量、连接情况、缓冲池使用情况、查询性能等各项指标&#xff0c;是我们压测时常常需要监控的一些指标。 目前&#xff0c;Exporter 支持高于5.6版本的 MySQL 和高于10.1版本的 MariaDB。在 MySQL/MariaDB 低于5.6版本时&#…

MobPush 最佳实践:消息重弹

功能概述 消息重弹功能&#xff0c;可在安卓在线通道送达的消息被其他消息挤下去时&#xff0c;重新置顶&#xff0c;增加消息的曝光度和点击率。 适用场景 仅支持Mob通过自有TCP通道下发的通知消息&#xff0c;不支持自定义推送消息支持开发者后台和推送API配置使用 功能使…

安天逆向教程——常用汇编语句

一.汇编基础 二.条件分支 反汇编时更多关注这些条件分支。如果看懂这些条件分支&#xff0c;会对程序的大体逻辑有一个整体的了解。 至于程序里面的细节&#xff0c;有时会省略掉。往往关键的跳转理解了甚至进行一点点的改动&#xff0c;就会使得程序发生翻天覆地的变化。 三…

读书笔记怎么写?《金字塔原理》读书笔记

​生活工作中有很多需要表达的场景&#xff0c;表达最重要的是逻辑清晰&#xff0c;表达出来的想法才能被理解&#xff0c;进而解决生活或工作中的困境。 《金字塔原理》详细地介绍了思维表达的方法&#xff0c;金字塔原理除了能够帮助人们以书面形式组织和表达思想以外&#x…

Vue3 组件之间父子通信

文章目录 Vue3 组件之间父子通信概述选项式API父传子子传父 组合式API父传子子传父 Vue3 组件之间父子通信 概述 所有的 props 都遵循着单向绑定原则&#xff0c;props 因父组件的更新而变化&#xff0c;自然地将新的状态向下流往子组件&#xff0c;而不会逆向传递。 选项式…