文章目录
VxLAN基本概述
背景
数据中心发展趋势
VXLAN的价值
物理网路:
- 物理网络,带宽高,容量大
- 大二层网络需要STP解决环路问题
- 二层网络隔离受限,,仅4k VLAN
- 虚拟机迁移不够灵活,需要改变物理网络配置
Overlay网络
- Overlay实现了某种程度的IP和位置信息的分离,有更好的移动性,满足二层网络弹性需求
- Overlay按需部署业务网络,业务变化的时候Underlay网络不需要改变
- 兼容性好,通过Overlay实现与物理网络解耦。
VXLAN优点
- 1.网络依赖小:基于IP的overlay,仅需要边界设备间IP可达
- 2.环路避免:隧道间水平分割,IP overlayTTL避免环路
- 3.高效转发:数据流量基于IP路由SPF及ECMP快速转发
- 4.快速收敛:网络变化实时侦听全网拓扑,毫秒收敛
- 5.虚拟化:Overlay + VNI构建虚拟网络,支持多达16M的虚拟网络
- 6.部署灵活:物理设备、Switch均能够部署
VXLAN基本概念
(Virtual Extensible LAN,虚拟可扩展局域网)
-
VXLAN是NVO3中的一种网络虚拟化技术,通过将虚拟机发出的数据包封装在UDP中,并使用物理网络的IP、MAC作为outer-header进行封装,然后在IP网络上传输,到达目的地后由隧道终结点解封装并将数据发送给目标虚拟机。
-
NVO3(Network Virtualization Over Layer 3),基于三层 IP overlay网络构建虚拟网络技术统称为NVO3,目前比较有代表性的有∶ VXLAN、NVGRE、STT。
-
网络标识VNI(VXLAN Network Identifier)
类似于传统网络中的VLAN ID,用于区分VXLAN段,不同VXLAN段的租户不能直接进行二层通信。一个租户可以有一个或多个VNI,VNI由24比特组成,支持多达16M的租户。
-
广播域BD(Bridge Domain)
类似传统网络中采用VLAN划分广播域方法,在VXLAN网络中通过BD划分广播域。
在VXLAN网络中,将VNI以1:1方式映射到广播域BD,一个BD就表示着一个广播域,同一个BD内的主机就可以进行二层互通。
-
VXLAN隧道端点VTEP(VXLAN Tunnel Endpoints)
VTEP可以对VXLAN报文进行封装和解封装。
VXLAN报文中源IP地址为源端VTEP的IP地址,目的IP地址为目的端VTEP的IP地址。一对VTEP地址就对应着一条VXLAN隧道。在源端封装报文后通过隧道向目的端VTEP发送封装报文,目的端VTEP对接收到的封装报文进行解封装。
-
虚拟接入点VAP(Virtual Access Point)
VXLAN业务接入点,可以基于VLAN或报文流封装类型接入业务:
- 基于VLAN接入业务:在VTEP上建立VLAN与BD的一对一或多对一的映射。这样,当VTEP收到业务侧报文后,根据VLAN与BD的映射关系,实现报文在BD内进行转发。
- 基于报文流封装类型接入业务:在VTEP连接下行业务的物理接口上创建二层子接口,并配置不同的流封装类型,使得不同的接口接入不同的数据报文。同时,将二层子接口与BD进行一一映射。这样业务侧报文到达VTEP后,即会进入指定的二层子接口。即根据二层子接口与BD的映射关系,实现报文在BD内进行转发。
-
网络虚拟边缘NVE(Network Virtualization Edge)
NVE是实现网络虚拟化功能的网络实体。报文经过NVE封装转换后,NVE间就可基于三层基础网络建立二层虚拟化网络,图中的路由器设备即为NVE。
-
VXLAN网关
VXLAN的简单理解(两次虚拟化)
- 1.第一次虚拟化:利用隧道技术将边缘设备互联透传二层报文,整网抽象理解为一台端口数目扩展的超大LAN SWITCH
- 2、第二次虚拟化利用VNI将这台超大的交换机虚拟出多个二层的广播域,和VLAN本质是一样的, VNI类比VLANID.并通过定义VXLAN header中的VNI字段,将子网范围由4K扩展至16M。
VXLAN接入业务模型
(1)VXLAN网关使用EVC的业务模型,模型构件包括:BD(Bride-Domain)、VNI(Virtual Net Instance)、NVE(Network Virtualization Edge)、二层子接口(L2 subif)、VXLAN隧道
L2-Subif:用于用户接入,子接口上可以配置一层tag接入或不配置tag接入。
BD(Bridge-Domain):表示一个二层广播域,BD和VNI1:1映射。所有光布功能基于BD支持,如MAC学习,二层查表,广播复制等
NVE:主要用于本地VTEP地址管理,VXLAN睡到管理,头端复制列表管理
VXLAN隧道:VXLAN睡到用于VXLAN报文的转发,用本地VTEP地址+远端VTEP地址标识。
BDIF:BD域的三层路由器接口,用于二层流量进入三层进行路由转发
(2)全局VLAN接入模型:主要应用在L2VPN服务场景, VLAN绑定bd,提供将传统port+vlan接口接入VXLAN网络的能力;二层子接口绑定BD。
VXLAN报文
原始报文在封装过程中先被添加一个VXLAN帧头,再被封装在UDP报头中,并使用承载网络的IP、MAC地址作为外层头进行封装。
字段 | 描述 |
---|---|
VXLAN header(VXLAN头封装) | VXLAN Flags:标记位,8比特,取值为00001000。VNI:VXLAN网络标识,用于区分VXLAN段,由24比特组成,支持多达16M的租户。一个租户可以有一个或多个VNI,不同VNI的租户之间不能直接进行二层相互通信。Reserved:保留未用,分别由24比特和8比特组成,设置为0。 |
Outer UDP header(外层UDP头封装) | DestPort:目的UDP端口号,设置为4789。Source Port:源UDP端口号,根据内层以太报文头通过哈希算法计算后的值。 |
Outer IP header(外层IP头封装) | IP SA:源IP地址,VXLAN隧道源端VTEP的IP地址。IP DA:目的IP地址,VXLAN隧道目的端VTEP的IP地址。 |
Outer Ethernet header(外层Ethernet头封装) | MAC DA:目的MAC地址,为到达目的VTEP的路径上,下一跳设备的MAC地址。MAC SA:源MAC地址,发送报文的源端VTEP的MAC地址。802.1Q Tag:可选字段,该字段为报文中携带的VLAN Tag。Ethernet Type:以太报文类型,IP协议报文中该字段取值为0x0800。 |
VXLAN运行机制
在设备上部署VXLAN网络时,需要分别对下行接入业务选择部署以及上行VXLAN隧道建立部署,两者部署完成后,报文就能在VXLAN网络中进行转发。
报文识别
在VXLAN网络中,将VNI以1:1方式映射到广播域BD。当报文到达VTEP后,VTEP只要能够识别出报文所属的BD,就能够选择正确的VXLAN隧道进行转发。VTEP有两种方式识别报文所属的VXLAN。
基于VLAN识别报文所属的VXLAN
- 基于网络规划,在VTEP上建立VLAN与BD的一对一或多对一的映射。这样,当VTEP收到业务侧报文后,根据VLAN与BD以及BD与VNI的对应关系即能够选择相应的VXLAN隧道进行转发。
- 如图所示,VLAN 10与VLAN 20同属于BD 10,VTEP上存在BD 10与VLAN 10和VLAN 20的对应关系,同时BD 10对应的VXLAN的VNI为1000。这样当VTEP接收到PC_1或PC_2的报文时,就能够选择正确的VXLAN隧道进行转发。
基于报文流封装类型识别报文所属的VXLAN
报文的流封装类型可概括地分为携带指定VLAN Tag与不携带VLAN Tag两种。基于此,在VTEP连接下行业务的物理接口上创建二层子接口,并配置二层子接口对报文的不同处理方式,同时将二层子接口与BD进行一一映射。这样业务侧报文到达VTEP后,即会进入指定的二层子接口。VTEP即能够根据二层子接口与BD的映射关系,以及BD与VNI的映射关系,选择正确的VXLAN隧道进行报文转发。
流封装类型 | 允许进入VXLAN隧道的报文类型 | 对VXLAN报文进行封装处理 | 对VXLAN报文进行解封装处理 |
---|---|---|---|
dot1q | 只允许携带指定的一层VLAN Tag的报文进入VXLAN隧道。 | 进行VXLAN封装时,会剥离原始报文的VLAN Tag。 | 进行VXLAN解封装时:若内层报文带有VLAN Tag,则先将所有VLAN Tag全部剥离,添加指定的VLAN Tag,再转发。若内层报文不带VLAN Tag,则先添加指定的VLAN Tag,再转发。 |
untag | 只允许不携带VLAN Tag的报文进入VXLAN隧道。 | 进行VXLAN封装时,不对原始报文做处理,即不添加任何VLAN Tag。 | 进行VXLAN解封装时:若内层报文带有VLAN Tag,则将外层VLAN Tag剥离,再转发。若内层报文不带VLAN Tag,则直接转发。 |
default | 允许所有报文进入VXLAN隧道,不论报文是否携带VLAN Tag。 | 进行VXLAN封装时,不对原始报文做处理,包括添加、替换或剥离。 | 进行VXLAN解封装时,不对原始报文做处理,包括添加、替换或剥离。 |
qinq | 只允许带有指定的两层VLAN Tag的报文进入VXLAN隧道。 | 进行VXLAN封装时,会剥离原始报文的所有VLAN Tag。 | 进行VXLAN解封装时:若内层报文带有VLAN Tag,则先将所有VLAN Tag全部剥离,添加指定的两层VLAN Tag,再转发。若内层报文不带VLAN Tag,则先添加指定的两层VLAN Tag,再转发。 |
隧道建立
VXLAN隧道由一对VTEP IP地址确定,创建VXLAN隧道实际上是两端VTEP获取对端VTEP IP地址的过程,只要对端VTEP IP地址是三层路由可达的,VXLAN隧道就可以建立成功。
- 静态VXLAN隧道的创建需要通过手工配置源端和目的端的VNI与VTEP的IP地址,工配置工作量大,灵活性较差,不适合大规模的组网场景。
- 通过BGP EVPN方式动态建立VXLAN隧道,就是在两端VTEP之间建立BGP EVPN对等体,然后对等体之间利用BGP EVPN路由来互相传递VNI和VTEP IP地址信息,从而实现动态建立VXLAN隧道。该方式通过部署EVPN协议实现VTEP自动发现和VXLAN隧道的动态创建,灵活性高,适合大规模的VXLAN组网场景。
VXLAN报文转发
VXLAN将二层网络报文封装为VXLAN格式的报文,可以跨传统的三层网络进行传输,使得用户能够在三层网络之上构建逻辑的大二层网络。
MAC地址学习
ARP请求报文转发流程
- PC_1发送源MAC为MAC_1、目的MAC为全F、源IP为IP_1、目的IP为IP_2的ARP广播报文,请求PC_2的MAC地址。
- Router1收到来自PC_1发出的ARP请求后,根据报文接入端口的配置判断报文需要进入VXLAN隧道。由于接入端口的配置与BD是1:1的映射关系,因此就确定了报文所属BD,同时,也就确定了报文所属的VNI。然后,VTEP1学习MAC_1、VNI和报文入接口的对应关系,并记录在本地MAC表中。之后,VTEP1根据对应的BD获取对应VNI的隧道列表,对报文进行复制并分别进行封装。封装的外层源IP地址为源端VTEP1的IP地址,外层目的IP地址为目的端VTEP2和VTEP3的IP地址;外层源MAC地址为源端VTEP1的MAC地址,而外层目的MAC地址为去往目IP的网络中下一跳设备的MAC地址。封装后的报文,根据外层MAC和IP信息,在网络中进行传输,直至到达对端VTEP2/VTEP3。
- Router2/Router3上VTEP2和VTEP3收到VXLAN报文后对报文进行解封装,得到PC_1发送的原始报文。同时,VTEP2和VTEP3学习PC_1的MAC地址、VNI和远端VTEP的IP地址的对应关系,并记录在本地MAC表中。之后,VTEP2和VTEP3根据接口上的配置对报文进行相应的处理并在对应的二层域内广播。
- PC_2和PC_3接收到ARP请求后,判断报文中的目的IP地址是否为本机的IP地址。如果目的IP不是本机IP,则将报文丢弃;如果目的IP是本机IP,则对ARP请求做出应答。
ARP应答报文转发流程
- 由于PC_2学习到PC_1的MAC地址,所以ARP应答报文为单播报文。报文源MAC为MAC_2,目的MAC为MAC_1,源IP为IP_2、目的IP为IP_1。
- VTEP2收到ARP应答报文后,识别报文所属VNI。同时,VTEP2学习MAC_2、VNI和报文入接口的对应关系,并记录在本地MAC表中。之后,VTEP2对报文进行封装。封装的外层源IP地址为源端VTEP2的IP地址,外层目的IP地址为目的端VTEP1的IP地址;外层源MAC地址为源端VTEP2的MAC地址,而外层目的MAC地址为去往目IP的网络中下一跳设备的MAC地址。封装后的报文,根据外层MAC和IP信息,在网络中进行传输,直至到达对端VTEP1。
- 报文到达VTEP1后,VTEP1对报文进行解封装,得到PC_2发送的原始报文。同时,VTEP1学习PC_2的MAC地址、VNI和远端VTEP2的IP地址的对应关系,并记录在本地MAC表中。之后,VTEP1将解封装后的报文发送给PC_1。PC_1和PC_2均已学习到了对方的MAC地址,之后,PC_1和PC_2将采用单播方式进行通信。
同子网报文转发
根据报文中包含的目的MAC地址类型,报文转发流程分为已知单播报文转发和BUM(Broadcast&Unknown-unicast&Multicast)报文转发两部分。
已知单播报文转发流程
BUM报文转发流程
-
- Router1收到来自PC_1发出的报文,根据报文中接入的端口和VLAN信息获取对应的二层广播域。
- Router1上VTEP1根据对应的二层广播域获取对应VNI的隧道列表,依据获取的隧道列表进行报文复制,并进行VXLAN封装。然后将封装后的报文从出接口转发出去。
- Router2/Router3上VTEP2/VTEP3收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。然后依据VNI获取对应的二层广播域,进行VXLAN解封装,获取内层二层报文。
- Router2/Router3检查内层二层报文的目的MAC,发现是BUM MAC,在对应的二层广播域内的非VXLAN隧道侧进行广播处理,即:Router2/Router3分别从本地MAC表中找到非VXLAN隧道侧的所有出接口和封装信息,为报文添加VLAN Tag,转发给对应的PC_2/PC_3。
跨子网报文转发
VXLAN为站点内的租户提供三层业务时,需要在网络中部署VXLAN三层网关,以便站点内的租户通过三层网关与外界网络或其他VXLAN网络内的租户进行三层通信。
由于是首次进行通信,且PC_1和PC_2处于不同的网段,PC_1需要先发送ARP广播报文请求网关VBDIF10的MAC,获得网关的MAC后,PC_1先将数据报文发送给网关;之后网关也将发送ARP广播报文请求PC_2的MAC,获得PC_2的MAC后,网关再将数据报文发送给PC_2。
- Router1收到来自PC_1的报文,根据报文中接入的端口和VLAN信息获取对应的二层广播域,在对应的二层广播域内查找出接口和封装信息。
- Router1上VTEP1根据查找到的出接口和封装信息进行VXLAN封装,向Router3转发报文。
- Router3收到VXLAN报文后进行解封装,发现内层报文中的目的MAC是三层网关接口VBDIF10的MAC地址MAC_3,判断需要进行三层转发。
- Router3剥除内层报文的以太封装,解析目的IP。根据目的IP查找路由表,找到目的IP的下一跳地址,再根据下一跳地址查找ARP表项,获取目的MAC、VXLAN隧道出接口及VNI等信息。
- Router3重新封装VXLAN报文,向Router2转发。其中内层报文以太头中的源MAC是三层网关接口VBDIF20的MAC地址MAC_4。
- Router2上VTEP2收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。依据VNI获取对应的二层广播域,然后进行VXLAN解封装,获取内层二层报文,并在对应的二层广播域内查找出接口和封装信息。
- Router2根据查找到的出接口和封装信息,为报文添加VLAN Tag,转发给对应的PC_2。
云DC中VXLAN相关概念的应用
VXLAN三种Overlay组网方案
- 软件方案:不改造现有物理设备,与具体厂商硬件设备解耦,无需配置物理网络,实现大规模逻辑二层网络的自动创建。
- 硬件方案:新建物理网络,通过VXLAN Overlay网络,实现自动化业务发放。
- 混合方案:通过SDN实现对虚拟网络及物理网络(交换机、防火墙及F5 )的配置管理和自动化业务发放。
VXLAN配置
静态方式
#配置VXLAN接入业务部署方式
system-view,进入系统视图。
bridge-domain bd-id,创建广播域BD,并进入BD视图。缺省情况下,没有创建广播域BD。
(可选)description description,配置BD的描述信息。缺省情况下,未配置BD的描述信息。
•基于VLAN方式:
vlan vlan-id,创建VLAN并进入VLAN视图。
quit,退出VLAN视图,返回到系统视图。
bridge-domain bd-id,进入已经创建的BD视图。
l2 binding vlan vlan-id,将指定VLAN与BD相关联,实现数据报文在BD内进行转发。
•基于报文流封装类型:
interface interface-type interface-number.subnum mode l2,创建二层子接口,并进入二层子接口视图。
encapsulation { dot1q vid pe-vid | default | untag | qinq vid vlan-vid ce-vid ce-vid },配置二层子接口允许通过的流封装类型,实现不同的接口接入不同的数据报文。
bridge-domain bd-id,将指定二层子接口与BD相关联,实现数据报文在BD内进行转发。
#配置VXLAN隧道
bridge-domain bd-id,进入BD视图。
vxlan vni vni-id,配置BD所对应的VXLAN的VNI。
缺省情况下,没有配置BD所对应的VXLAN的VNI。
quit,退出BD视图,返回到系统视图。
interface nve nve-number,创建NVE接口,并进入NVE接口视图。
source ip-address,配置VXLAN隧道源端VTEP的IP地址。
缺省情况下,VXLAN隧道源端VTEP没有配置IP地址。
vni vni-id head-end peer-list ip-address &<1-10>,配置头端复制列表。
缺省情况下,没有配置VNI头端复制列表。
#配置VXLAN三层网关
interface vbdif bd-id,创建VBDIF接口,并进入VBDIF接口视图。
ip address ip-address { mask | mask-length } [ sub ],配置VBDIF接口的IP地址,实现三层互通。
BGP EVPN方式
#配置VXLAN接入业务部署方式。(同静态)
#配置VXLAN隧道
bgp { as-number-plain | as-number-dot },进入BGP视图。
peer ipv4-address as-number { as-number-plain | as-number-dot },将对端PE配置为对等体。
peer ipv4-address connect-interface loopback interface-number,指定BGP建立TCP连接的接口。
l2vpn-family evpn,使能并进入BGP-EVPN地址族视图。
peer { ipv4-address | group-name } enable,使能对等体或组间交换EVPN路由信息的能力。
(可选)peer ipv4-address group group-name,向对等体组中加入BGP EVPN对等体。
配置BGP EVPN对等体加入到对等体组后,可以简化BGP网络的配置和管理。
(可选)peer { group-name | ipv4-address } route-policy route-policy-name export,对EVPN对等体(组)指定Route-Policy,只发布指定的路由。
如果需要精确地控制EVPN路由,则需要配置出方向路由策略。出方向路由策略可以对发布给其他EVPN对等体(组)的路由进行过滤。
(可选)peer { ipv4-address | group-name } route-policy route-policy-name import,对EVPN对等体(组)指定Route-Policy,只接收指定的路由。
如果需要精确地控制EVPN路由,则需要配置入方向路由策略。入方向路由策略可以对从其他EVPN对等体(组)接收的路由进行过滤。
(可选)undo policy vpn-target,配置用来取消对接收到的EVPN路由进行EVPN-VPN-Target过滤。
(可选)peer { group-name | ipv4-address } mac-limit mac-limit [ idle-forever | idle-timeout times ],配置对从对等体收到的MAC通告路由数量进行限制。
当EVPN实例可能从某些对等体引入很多无用的MAC通告路由导致从这些对等体收到的MAC通告路由数占该设备上总的MAC通告路由数的比例较大时,建议配置此命令。
2.配置源端VTEP的IP地址。
interface nve nve-number,创建NVE接口,并进入NVE接口视图。
缺省情况下,没有创建NVE接口。
source ip-address,配置VXLAN隧道源端VTEP的IP地址。
缺省情况下,源端VTEP没有配置IP地址。
#
ip vpn-instance vpn-instance-name,创建VPN实例,并进入VPN实例视图。
ipv4-family,使能VPN实例IPv4地址族,并进入VPN实例IPv4地址族视图。
缺省情况下,未使能VPN实例的IPv4地址族。
route-distinguisher route-distinguisher,配置VPN实例的RD(Route Distinguisher)。
缺省情况下,没有为VPN实例地址族配置RD。
vpn-target vpn-target &<1-8> [ both | export-extcommunity | import-extcommunity ] evpn,为VPN实例配置EVPN-VPN-Target扩展团体属性。
EVPN-VPN-Target是BGP的扩展团体属性,用来控制EVPN路由信息的接收和发布。一条vpn-target evpn命令最多可以配置8个EVPN-VPN-Target。如果希望在EVPN实例地址族下配置更多的EVPN-VPN-Target,可以多次使用vpn-target evpn命令进行配置。
配置三层网关并绑定VPN实例。
interface vbdif bd-id,创建VBDIF接口,并进入VBDIF接口视图
ip binding vpn-instance vpn-instance-name,将VBDIF接口与VPN实例绑定。
ip address ip-address { mask | mask-length } [ sub ],配置VBDIF接口的IP地址,实现三层互通。
配置VXLAN网关之间发布IP前缀类型的路由。a.执行命令bgp { as-number-plain | as-number-dot },进入BGP视图。
ipv4-family vpn-instance vpn-instance-name,进入BGP-VPN实例IPv4地址族视图。
import-route protocol [ process-id ] [ med med | route-policy route-policy-name ] *,将其他协议路由引入到当前BGP-VPN实例IPv4地址族视图中。
如果要发布主机IP路由,则只需配置引入直连路由即可。如果要发布主机所在的网段路由,需要先利用动态路由协议(如OSPF等)发布该网段路由,此处再配置引入相应动态协议的路由。
advertise l2vpn evpn,使能VPN实例向BGP-EVPN地址族发布IP路由功能。
缺省情况下,未使能VPN实例向BGP-EVPN地址族发布IP路由功能。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/100107.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...