Technical documentation
发布日期:2023-03-08 浏览次数:2575 来源:WOLFLAB
华为认证HCIE Datacom培训技术笔记超详细-XLAN工作原理
感谢关注WOLFLAB网络技术实验室,华为认证HCIE Datacom培训课程循环开班中,联系WOLFLAB网站客服预约免费试听!
图 3-1 建立VXLAN 隧道示意图
(1)哪些 VTEP 间需要建立 VXLAN 隧道
通过 VXLAN 隧道,“二层域”可以突破物理上的界限,实现大二层网络中
VM 之间的通信。所以,连接在不同 VTEP 上的 VM 之间如果有“大二层”互通的需求,这两个 VTEP 之间就需要建立 VXLAN 隧道。换言之,同一大二层域内的 VTEP 之间都需要建立 VXLAN 隧道。
例如,假设图 3-1 中 VTEP_1 连接的 VM、VTEP_2 连接的 VM 以及 VTEP_3 连接的
VM 之间需要“大二层”互通,那 VTEP_1、VTEP_2 和 VTEP_3 之间就需要两两建立 VXLAN 隧道,如图 3-2 所示。
图 3-2 建立VXLAN 隧道示意图
(2) 什么是“同一大二层域”
前面提到的“同一大二层域”,就类似于传统网络中 VLAN(虚拟局域网)的概念,只不过在 VXLAN 网络中,它有另外一个名字, 叫做 Bridge-Domain,简称 BD。不同的 VLAN 是通过 VLAN ID 来进行区分的,而 BD 通过 VNI 来区分的。BD 与 VNI 是 1:1 的映射关系,这种映射关系是通过在 VTEP 上配置命令行建立起来的。有了映射表后,进入 VTEP 的报文就可以根据自己所属的 BD 来确定报文封装时该添加哪个 VNI。
(3) 如何确定报文属于哪个 BD
VTEP 只是交换机承担的一个角色而已,只是交换机功能的一部分。并非所有进入到交换机的报文都会走 VXLAN 隧道(也可能报文就是走普通的二三层转发流程)。只要将二层子接口加入指定的 BD,然后根据二层子接口上的配置,就可以确定报文属于哪个 BD
比如图 3-3 所示的组网,可以分别在 VTEP 的两个物理接口 10GE 1/0/1 和 10GE
1/0/2 上配置不同流封装类型的二层子接口并将其分别加入不同的 BD。
图 3-3 二层子接口加入BD
基于二层物理接口 10GE 1/0/1,分别创建二层子接口 10GE 1/0/1.1 和 10GE
1/0/1.2,且分别配置其流封装类型为 dot1q 和 untag。配置如下:
interface 10GE1/0/1.1 mode l2 // 创 建 二 层 子 接 口 10
GE1/0/1.1 encapsulation dot1q vid 10 //只允许携带VLAN Tag 10 的报文进入VXLAN 隧道
bridge-domain 10 //报文进入的是BD 10
#
encapsulation untag //只允许不携带VLAN Tag 的报文进入VXLAN 隧道
bridge-domain 20 //报文进入的是BD 20
#
基于二层物理接口 10GE 1/0/2,创建二层子接口 10GE 1/0/2.1,且流封装类型
为 default。配置如下:
#
interface 10GE1/0/2.1 mode l2 //创建二层子接口 10GE1/0/2.1 encapsulation default //允许所有报文进入VXLAN 隧道
bridge-domain 30 //报文进入的是BD 30
#
用户应该如何选择配置哪种类型的二层子接口?三种类型的二层子接口之间,是
否存在配置约束关系?
不可以。因为 default 类型的二层子接口允许所有报文进入 VXLAN 隧道, 而 dot1q 和 untag 类型的二层子接口只允许某一类报文进入 VXLAN 隧道。
default 类型的二层子接口跟其他两种类型的二层子接口是不可以在同一物理接口上共存的。所以,default 类型的子接口,一般应用在经过此接口的报文均需要走同一条 VXLAN 隧道的场景,即下挂的 VM 全部属于同一
BD。
例如,图 3-3 中 VM3 和 VM4 均属于 BD 30,则 10GE 1/0/2 上就可以创建 default 类型的二层子接口.
如图 3-3 所示,VM1 和 VM2 分别属于 VLAN 10 和 VLAN 20,且分别属于不同的大二层域 BD 10 和 BD 20,显然他们发出的报文要进入不同的 VXLAN 隧道。如果 VM1 和 VM2 发出的报文在到达 VTEP 的 10GE 1/0/1 接口时,一个是携带 VLAN 10 的
Tag 的,一个是不携带 VLAN Tag 的(比如二层交换机上行连接 VTEP 的接口上配置的接口类型是 Trunk,允许通过的 VLAN 为 10 和 20,PVID 为 VLAN 20),则为了区分两种报文,就必须要在 10GE 1/0/1 上分别创建 dot1q 和 untag 类型的二层子接口。所以,当经过同一物理接口的报文既有带 VLAN Tag 的,又有不带 VLAN
Tag 的,并且他们各自要进入不同的 VXLAN 隧道,则可以在该物理接口上同时创建 dot1q 和 untag 类型的二层子接口。
(4) VXLAN 隧道怎么建
隧道的建立方式:
○ 1 手工方式
这种方式需要用户手动指定 VXLAN 隧道的源和目的 IP 地址分别为本端和对端 VTEP 的 IP 地址,在本端 VTEP 和对端 VTEP 之间建立静态 VXLAN 隧道。
配置过程如下:
#
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.2 和 vni 5000 head-end peer-list 2.2.2.3的配置,表示属于 VNI 5000 的对端 VTEP 有两个,IP 地址分别为 2.2.2.2和 2.2.2.3。
根据 Peer List,本端 VTEP 就可以知道属于同一 BD(或同一 VNI)的对端 VTEP 都有哪些,这也就决定了同一大二层广播域的范围。当 VTEP 收到 BUM
(Broadcast&Unknown-unicast&Multicast,广播&未知单播&组播)报文时,会将报文复制并发送给 Peer List 中所列的所有对端 VTEP(这就好比广播报文在
VLAN 内广播)。当 VTEP 收到已知单播报文时,会根据 VTEP 上的 MAC 表来确定报文要从哪条 VXLAN 隧道走。而此时 Peer List 中所列的对端,则充当了 MAC 表中“出接口”的角色。
自动方式
自动方式下 VXLAN 隧道的建立需要借助于其他的协议,例如 BGP。CE 系列交换机中,自动方式建立 VXLAN 隧道主要应用在 EVPN(Ethernet Virtual private
Network)和 VXLAN 的分布式网关场景中。
(5) 如何确定报文要进哪条隧道
属于同一 BD 的 VXLAN 隧道可能不止一条,同一个源端 VTEP
(1.1.1.1)对应了两个对端 VTEP(2.2.2.2 和 2.2.2.3)。
=基本的二三层转发中,二层转发依赖的是 MAC 表,如果没有对应的 MAC 表,则主机发送 ARP 广播报文请求对端的 MAC 地址;三层转发依赖的是 FIB 表。在 VXLAN 中,原理一样。VXLAN 网络中报文的转发流程:
1 同子网互通
图 3-4 同子网 VM 互通组网图
如图 3-4 所示,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 地址。
图 3-5 ARP 请求报文转发流程
如图 3-5 所示,ARP 请求报文的转发流程如下:
a. VM_A 发送源 MAC 为 MAC_A、目的 MAC 为全 F、源 IP 为 IP_A、目的 IP 为 IP_C 的 ARP 广播报文,请求VM_C 的 MAC 地址。
b. 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。
c. 报文到达 VTEP_2 和 VTEP_3 后,VTEP 对报文进行解封装,得到 VM_A 发送的原始报文。同时,VTEP_2 和 VTEP_3 学习 VM_A 的 MAC 地址、VNI 和远端 VTEP 的 IP 地址(IP_1)的对应关系,并记录在本地 MAC 表中。之后,VTEP_2 和 VTEP_3 根据二层子接口上的配置对报文进行相应的处理并在对应的二层域内广播。
d. VM_B 和 VM_C 接收到 ARP 请求后,比较报文中的目的 IP 地址是否为本机的 IP 地址。VM_B 发现目的
IP 不是本机 IP,故将报文丢弃;VM_C 发现目的 IP 是本机 IP,则对 ARP 请求做出应答。
VTEP_3 接收到 VM_C 发送的 ARP 应答报文后,识别报文所属的VNI(识别过程与步骤 2 类似)。同时,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。
f. 报文到达 VTEP_1 后,VTEP_1 对报文进行解封装,得到 VM_C 发送的原始报文。同时,VTEP_1 学习 VM_C 的 MAC 地址、VNI 和远端 VTEP 的 IP 地址(IP_3)的对应关系,并记录在本地 MAC 表中。之后,VTEP_1 将解封装后的报文发送给 VM_A。
图 3-6 ARP 应答报文转发流程
至此,VM_A 和 VM_C 均已学习到了对方的 MAC 地址。之后,VM_A 和 VM_C 将采用单播方式进行通信。单播报文的封装与解封装过程,与图 3-6 中所展示的类似
不同子网互通
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 进行通信。由于是首次进行通信,且 VM_A 和 VM_B 处于不同网段,VM_A 需要先发送 ARP 广播报文请求网关(BDIF 10)的 MAC,获得网关的 MAC 后,VM_A 先将数据报文发送给网关;之后网关也将发送
ARP 广播报文请求 VM_B 的 MAC,获得 VM_B 的 MAC 后,网关再将数据报文发送给 VM_B。假设 VM_A 和 VM_B 均已学到网关的 MAC、网关也已经学到 VM_A 和 VM_B 的 MAC,数据报文是如何从 VM_A 发送到 VM_B 的。
图 3-7 不同子网 VM 互通组网图
图 3-8 不同子网 VM 互通报文转发流程
如图 3-8 所示,数据报文从 VM_A 发送到 VM_B 的流程如下:
a. VM_A 先将数据报文发送给网关。报文的源 MAC 为MAC_A,目的 MAC 为网关BDIF 10 的MAC_10,源 IP 地址为 IP_A,目的 IP 为 IP_B。
b. 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。
c. 报文进入 VTEP_3,VTEP_3 对报文进行解封装, 得到 VM_A 发送的原始报文。然后,VTEP_3 会对报文进行如下处理:
a) VTEP_3 发现该报文的目的 MAC 为本机 BDIF 10 接口的 MAC,而目的 IP 地址为 IP_B(10.1.20.1),所以会根据路由表查找到 IP_B 的下一跳。
b)发现下一跳为 10.1.20.10,出接口为BDIF 20。此时 VTEP_3 查询 ARP 表项, 并将原始报文的源 MAC 修改为 BDIF 20 接口的 MAC(MAC_20),将目的 MAC 修改为 VM_B 的 MAC(MAC_B)。
c)报文到 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。
d. 报文到达 VTEP_2 后,VTEP_2 对报文进行解封装, 得到内层的数据报文,并将其发送给 VM_B。
流封装类型 | 允许进入 VXLAN 隧道的报 文类型 | 报文进行封装前的处理 | 收到 VXLAN 报文并解封装后的处理 |
dot1q | 只允许携带指定 VLAN Tag 的报文进入 VXLAN 隧道。 (这里的“指定VLAN Tag” 是通过命令进行配置的) | 进行VXLAN 封装前,先剥掉原始报文的外层VLAN Tag。 | 进行 VXLAN 解封装后: 若内层原始报文带有 VLAN Tag,则先将该 VLAN Tag 替换为指定的 VLAN Tag,再转发; 若内层原始报文不带 VLAN Tag,则先将其添加指定的 VLAN Tag,再转发。 |
untag | 只允许不携带 VLAN Tag 的报文进入 VXLAN 隧道。 | 进行VXLAN 封装前,不 对原始报文进行处理,即不添加任何VLAN Tag。 | 进行 VXLAN 解封装后,不对原始报文进 行处理,即不添加/不替换/不剥掉任何VLAN Tag。 |
default | 允许所有报文进入 VXLAN 隧道,不论报文是否携带VLAN Tag。 | 进行VXLAN 封装前,不对原始报文进行处理,即不添加/不替换/不剥掉任 何VLAN Tag。 | 进行 VXLAN 解封装后,不对原始报文进行处理,即不添加/不替换/不剥掉任何 VLAN Tag。 |
欢迎关注WOLFLAB(沃尔夫)网络实验室
华为认证HCIE Datacom培训循环开班,点击这里预约
WOLFLAB官方微信:17316362402
WOLFLAB官方QQ:2569790740
欢迎关注【WOLFLAB网络实验室】,了解更多关于HCIE Datacom相关技术,我们每周都会更新!
讲师:崔志鹏、杨广成