交换机和网络虚拟化
最近在公司负责几个二层网络、三层网络相关的项目,项目推进的过程中也掌握了一些交换机和网络虚拟化相关的知识。在之前我接触到的可能更多是三层、四层网络相关的知识,刚好借着这次项目经验总结梳理一下二层网络设备和云计算中网络虚拟化相关的知识。
交换机概述
什么是交换机
交换机是一种网络硬件设备,用于连接多台设备(如计算机、服务器、打印机等),使它们能够在一个局域网(LAN)内通过数据包进行通信,现如今,交换机是包括互联网在内的现代 IT 网络的基本组成部分之一,它解决了设备间通信的问题。
交换机接受一个设备的数据包,并且将数据包发送到指定的设备上去,从而实现设备间高效通信。交换机是如何知道它收到的数据包应该发往哪个设备呢?其实是通过 MAC 地址来实现的,交换机收到的网络报文头里包含了源 MAC 地址和目的 MAC 地址,然后交换机在它的地址表中找到对应的网络设备,从而将数据包发往指定的设备。关于交换机具体的工作原理,将在下面具体介绍。
交换机类型
从网络模型上来看,我们说的交换机一般都是指的工作在二层网络模型上面的交换机,我们称为二层交换机,它通过检查数据帧的目标 MAC 地址,将数据帧发送到正确的目标设备,从而实现局域网内的数据通信,并通过构建 MAC 地址表来实现数据的快速转发和广播域的隔离。当然,也存在三层交换机,它具备路由功能,可以根据目标 IP 地址来进行数据包的转发,它能够根据网络层的信息进行智能的数据包转发,提高网络的性能和效率;同时,三层交换机具备执行路由的功能,它可以执行静态路由和动态路由,具有更快的切换速度,甚至比传统的路由器更快,三层交换机可以执行 IP 地址和子网划分来路由数据包,同时处理 VLAN 内通信以及不同 VLAN 之间的数据包路由。
下面是二层交换机和三层交换机的特点:
二层交换机 | 三层交换机 |
---|---|
在 OSI 模型的第二层(数据链路层)上工作 | 在 OSI 模型的第三层(网络层)上工作 |
根据 MAC 地址将数据包发送到目标设备 | 根据 ip 地址路由数据包 |
只能基于 MAC 地址工作 | 可以执行 2 层和 3 层交换机的功能 |
用于减少本地网络上的流量 | 主要用于实现虚拟局域网(VLAN) |
不查看数据包的第 3 层部分,因此速度相当快 | 在将数据包发送到目的地之前需要花费时间来检查数据包 |
单广播域 | 多个广播域 |
只能在网络内通信 | 可以在网络内和网络外通信 |
通常二层交换机有如下使用场景:
- 办公室局域网:在办公室环境中,二层交换机用于连接各个工作站、打印机和其他网络设备,实现内部局域网的通信和数据交换。
- 数据中心网络:在大型数据中心中,二层交换机用于连接服务器、存储设备和其他网络设备,提供高带宽、低延迟的数据交换和通信。
- 无线接入网络:在无线网络中,二层交换机通常用于连接无线接入点(Access Point),将无线设备连接到有线网络,并提供无线设备之间的数据转发和通信。
三层交换机有如下使用场景:
- 跨子网通信:在大型企业网络中,三层交换机用于实现不同子网之间的通信,通过路由功能将数据包从一个子网转发到另一个子网,实现跨网络的数据交换。
- 虚拟化环境:在虚拟化环境中,三层交换机用于连接虚拟机和物理服务器,提供虚拟机之间和虚拟机与物理服务器之间的高性能数据交换和通信。
- 多租户网络:在云计算环境或多租户网络中,三层交换机用于隔离不同租户的网络流量,提供安全的数据隔离和路由功能,确保不同租户之间的数据互不干扰。
交换机的连接方式
根据网络的需求和拓扑结构的不同,交换机有多种不同的连接方式。
- 直连连接(Point-to-Point):两个交换机通过一根直接的物理电缆连接,适用于小型网络或相邻设备之间的连接。
- 级联连接(Daisy-Chaining):多个交换机按顺序连接在一起,形成链状结构,用于扩展网络规模,但链的长度可能影响性能。
- 聚合连接(Link Aggregation):将多个物理链路组合成一个逻辑上的连接,增加带宽、提高冗余。例如,MALG 就是一种聚合连接的方式。
- 星型连接(Star Topology):交换机直连到一个中心设备,通常是网络中心交换机或者路由器,提供简单的管理和良好的冗余性。
- 环形连接(Ring Topology):交换机按环形连接,提供冗余路径,但当其中一个连接中断时可能影响到整个环。
- 堆叠连接(Stacking):多个交换机通过特殊的堆叠接口或电缆连接,形成逻辑上的单一设备,用于增加端口数量和提高性能。
- 交叉连接(Cross-Connect):直接连接两个交换机,通常在大型数据中心或企业网络中使用,提高网络性能和减少延迟。
堆叠和 MLAG 比较
由于我们业务中,这两种形态比较多,这里着重介绍一下交换机堆叠和 MLAG 两种工作方式。
堆叠
交换机堆叠是通过将多个交换机连接在一起,形成一个逻辑上的单一设备,主要是用于扩展交换机端口数量和提高带宽,提高系统整体性能。这一组连接在物理上通过专用的堆叠接口或堆叠电缆连接。在逻辑上,这些堆叠的交换机被视为一个整体,共享一个管理 IP 地址、配置和操作状态。通过堆叠,可以统一管理整个堆叠,简化网络管理。
堆叠是提升系统的健壮性、提升性能的手段。
MLAG
MLAG(MUlti-chassis Link Aggregation)是一种通过多个设备形成链路聚合组(LAG)以实现冗余的方法,MLAG 是通过对等链路连接两个交换机,并形成一个链路聚合组,以作为逻辑上的单一设备,可以使用该机制将更多的交换机添加到链路聚合组中。目前 MLAG 已经成为一种广泛应用的链路聚合方法,MLAG 拓扑结构可以在很大程度上扩展网络能力,它在 LAG 提供的传统链路级冗余基础上增加了节点级冗余,提高系统可靠性,并简化管理,在这个系统中,当其中一个交换机失效时,系统仍然可以工作。
MALG 是提升系统高可用性的手段。
MLAG 的高可用实现
总的说来,交换机 MLAG 技术通过多种手段确保了整个系统的可靠性和故障恢复能力,主要表现为以下几个关键方面:
- 对等链路(Peer-Link):MLAG 中的两个交换机通过对等链路进行连接。对等链路是一条专用链路,用于传输 MALG 协议消息和同步数据。通过对等链路,两个交换机之间可以实现实时的状态同步和故障检测。
- 逻辑单元:MLAG 中的多个交换机被视为一个逻辑单元,它们共享相同的 MAC 地址和配置信息。这意味着对外部设备而言,MALG 表现为一个单一的逻辑交换机,提供冗余和负载均衡。
- 心跳检测:MLAG 中的交换机通过对等链路进行心跳检测,以确保彼此的可用性。如果一台交换机无法检测到对等链路上的心跳信号,它将认为对方交换机发生故障,并接管系统对外提供服务。
- 数据同步:MLAG 中的交换机通过对等链路同步数据,以确保数据的一致性。当一台交换机接管另一台交换机的功能时,它会继续处理之前交换机处理的数据流,以实现无缝的故障转移。
- 网络拓扑:MLAG 的高可用性还取决于网络拓扑的设计。为了实现冗余和故障恢复,MLAG 中的交换机应该通过不同的物理路径连接到其他设备,以避免单点故障。
这里再单独说一下 MLAG 中数据同步的问题。我们知道,在一个分布式系统中,数据的一致性是及其重要的,同时在一个分布式系统中实现数据的一致性也是及其复杂的。同样的,在交换机 MLAG 机制中,数据一致性也是必要的,它主要是通过对等链路实现数据一致性的。
这种数据一致性主要包括 MAC 地址同步和数据转发。每个交换机维护了一个共享的 MAC 地址表,用于转发数据包到指定的目标设备,当一个交换机学习到新的 MAC 地址时,它会通过对等链路将该信息发送给另外一个交换机,以确保两个交换机的 MAC 地址表保持一致。MLAG 交换机对外表现为一个逻辑单元,当这个逻辑单元收到数据包时,MLAG 交换机可以共同处理数据流量,并确保数据包按相同的规则进行转发。
交换机的工作原理
交换机的工作原理基于数据链路层的功能,我们知道数据包在网络上进行传输时,都是一个完整的数据包,这里说的完整的数据包指的是它应当包含网络模型中每一层的结构,一个不完整的数据包是无法在网络上传输的。
上面说到网络上传输的都是一个完整的数据包,每一层的数据包都有其特定的报文格式,一般来说一个即将发送的数据,最开始由上层协议组装,然后下层的数据包都是在上一层的数据包的基础上加上自己特有的数据头,这样数据经过层层组装,最终成为一个完整的包,最终发出去,并且每一层的数据包是在不同的地方进行组装和处理的,这里以 MAC 头和 IP 头为例简单描述一下:
比如说上图中的 MAC 头部分,就是由交换机组装的,交换机将数据组装成数据帧,其中包含了目标设备的 MAC 地址和源设备的 MAC 地址。搞明白了数据包在各层的组装方式以后,这里我用一个非常常用的 ping 的例子说一下交换机在数据包传输过程中的工作原理:
假设在一个简单的局域网内,192.168.1.1 的机器去 ping 192.168.1.2 的机器(ping 使用的 ICMP 协议不是本文讨论的范围,不作说明,只重点说明交换机的作用),首先这两台机器的 ip 地址在同一个网段内,它们是可以 ping 通的。
这里上来就会遇到第一个问题,上面我们说到数据要在网络上传输,数据包必须是完整的,但是很明显 192.168.1.1 这个机器只知道要 ping 的机器的 ip 地址,也就是192.168.1.2,它并不是对方的 MAC 地址是多少,应该怎么办呢?答案就是 ARP 协议(ARP 不在本文讨论的范围,不作说明)。
我们知道了机器 192.168.1.1 是通过发送 ARP 报文知道了机器 192.168.1.2 的 MAC 地址,然后组装好一个完整的数据包,数据包在交换机处理时,这时交换机会做一个事情,那就是 MAC 地址学习。数据包中包含了源设备(机器 192.168.1.1)的 MAC 地址,交换机会在地址表中查找是否有这个端口和源设备 MAC 地址的对应关系,如果没有,它会进行 MAC 地址学习,在地址表中新增该端口和源设备 MAC 地址的对应关系,或者更新该地址表。
接着,交换机会在地址表中查找目标设备 MAC 地址的记录,如果在地址表中找到了目标设备 MAC 地址对应的端口,就直接把数据包发往对应的端口。那么这里又来了新的问题,如果没有在地址表中找到呢?很容易想到,那就是广播,交换机会广播数据包到除了源设备端口以外的其他所有端口,数据包广播出去以后,目标设备在收到数据包后,会根据 MAC 地址判断这个数据包是否是发给自己的,如果是,它会发送一个响应。一旦目标设备响应,交换机会学习并记录新的 MAC 地址和端口的对应关系,新增地址表。
经过几轮的广播洪泛,就可以确保在交换机地址表中建立正确的 MAC 地址与端口的映射关系,从而提高网络转发的效率和准确性。需要注意的是,频繁的广播洪泛可能导致网络中的一些性能问题,因此交换机通常会采用一些优化策略,如 Aging Time(老化时间)来控制地址表中映射的生命周期,防止不必要的广播洪泛。
VLAN
上面说了交换机的工作原理,现在我们来思考两个问题:
广播问题:根据交换机的工作原理,很容易想到,随着网络内设备的不断增多,整个系统内广播包一大堆,性能势必就会下降。
安全问题:广播包每个设备都可以收到,试想如果局域网内每个设备都可以收到广播包,简单抓包就可以知道很多信息,会带来数据安全的问题。
尤其是现在云的时代,云计算设施和大型数据中心内,上述问题会尤为突出,为了解决这些问题,就需要做好隔离。网络隔离包括了传统意义上的物理隔离和虚拟隔离。
物理隔离
先说物理隔离,每个需要隔离的逻辑单元都使用单独的交换机,配置单独的子网,可以解决上述问题,但是想象一下在大型企业或者大型数据中心里面,这种全面的物理隔离势必会增加大量的成本,所以目前这种手段并不是首选。
虚拟隔离
还有一种方式就是虚拟隔离,这就是我们常用的 VLAN,全称叫做虚拟局域网。使用 VLAN,一个交换机上会连属于多个局域网的机器,交换机是根据 VLAN ID 来区分不同的机器所属的局域网的。具体的实现方式也很好理解,只需要在原来的数据包的二层头上加一个 TAG,里面有一个 VLAN ID,一共 12 位,最多可以划分 4096 个 VLAN。
如果我们买的交换机是支持 VLAN 的,当交换机把二层的头取下来的时候,就能够识别这个 VLAN ID,这样只有相同 VLAN 的包,才会相互转发,不同 VLAN的包,是看不到的,这样广播和安全的问题就都能解决了。
交换机的 VLAN ID 是 12 位的,这是因为 IEEE 802.1Q 标准规定了 VLAN 标签的格式和长度。在 VLAN 标签中,有 16 位用于 VLAN 标识符(VLAN Identifier,简称 VID)。这 16 位中,有 12 位用于表示 VLAN 的编号,可以用来标识不同的 VLAN。
为什么 VLAN ID 只有 12 位呢?这是因为在 VLAN 标签中,还有其他的字段需要占用一部分位数。其中,2 位用于标识标签协议识别符(Tag Protocol Identifier,简称 TPID),用于识别帧是否为 IEEE 802.1Q 标签帧。另外,还有 1 位用于标识丢弃优先级(Drop Eligible Indicator,简称 DEI),用于指示在拥塞情况下是否可以丢弃该帧。最后,还有 1 位用于标识优先级代码点(Priority Code Point,简称 PCP),用于指定帧的优先级。
因此,剩下的 12 位就用于表示 VLAN 的编号,这样可以支持最多 4096 个不同的 VLAN。其中,编号为 0 和 4095 的 VLAN 是保留的,不能用于实际的 VLAN。所以实际可用的 VLAN 编号范围是从 1 到 4094。
GRE & VXLAN
上面说了 VLAN 这种虚拟局域网的实现,我们知道由于 VLAN ID 只有 12 位,因此它只能支持最多 4096 个不同的 VLAN,最初设计的时候看起来是够了,但是现如今在大型的数据中心或者云计算平台等地方显然是不够用的,该如何解决这个问题呢?
- 一种方式是修改协议:显然是不现实、不可能的,已经形成标准的协议并且在千千万万的设备上都按照这个协议来跑的程序,不可能去做协议层面的修改。
- 另外一种方式就是扩展:在原来包格式的基础上扩展出一个头,里面包含足够用于区分租户的 ID,外层包的格式和原来的保持一样。
那么机遇上面扩展的思路,就有了 Overlay 网络,这是一种基于物理网络的虚拟化网络实现。而 Overlay 网络的两个著名的实现有 GRE 和 VXLAN。
GRE
先说 GRE,GRE 全称 Generic Routing Encapsulation,它是一种 IP-over-IP 的隧道技术。它将 IP 包封装在 GRE 包里,外面加上 IP 头,在隧道的一端封装数据包,并在通路上进行传输,到另外一端的时候解包。你可以认为 Tunnel 是一个虚拟的、点对点的连接。
上图可以看到,在 GRE 包头中,前 32 位是一定会有的,后面的都是可选的。包头里面的 key 字段,是一个 32 位的字段,里面存放的就是用于区分用户的 Tunnel ID,32 位足够了。
下面的格式类型是专门用于网络虚拟化的 GRE 包头格式,称为 NVGRE,它的网络号是 24 位,也完全够用了。
使用 GRE 隧道,我以下图的场景为例,说明一下数据包是如何传输的:
这里面有两个网段,两个路由器,中间要通过 GRE 隧道进行通信,当隧道建立以后,会多出两个 Tunnel 端口,用于封包、解包。
- 主机 A 在左边的网络,IP 地址为 192.168.1.102,它想要访问主机 B,主机 B 在右边的网络,IP 地址为 192.168.2.115。于是发送一个包,源地址为 192.168.1.102,目标地址为 192.168.2.115。因为要跨网段访问,于是根据默认的 default 路由表规则,要发给默认的网关 192.168.1.1,也即左边的路由器。
- 根据路由表,从左边的路由器,去 192.168.2.0/24 这个网段,应该走一条 GRE 的隧道,从隧道一端的网卡 Tunnel0 进入隧道。
- 在 Tunnel 隧道的端点进行包的封装,在内部的 IP 头之外加上 GRE 头。对于 NVGRE 来讲,是在 MAC 头之外加上 GRE 头,然后加上外部的 IP 地址,也即路由器的外网 IP 地址。源 IP 地址为 172.17.10.10,目标 IP 地址为 172.16.11.10,然后从 E1 的物理网卡发送到公共网络里。
- 在公共网络里面,沿着路由器一跳一跳地走,全部都按照外部的公网 IP 地址进行。
- 当网络包到达对端路由器的时候,也要到达对端的 Tunnel0,然后开始解封装,将外层的 IP 头取下来,然后根据里面的网络包,根据路由表,从 E3 口转发出去到达服务器 B。
GRE 的问题
从上面我们知道,GRE 通过隧道的方式,很好地解决了 VLAN ID 不足的问题,但是 GRE 本身还是存在不少问题。
- Tunnel 数量问题。GRE 是一种点对点隧道,如果有三个网络,就需要在每两个网络之间建立一个隧道。如果网络数目增多,这样隧道的数目会呈指数性增长。
- GRE 不支持组播,因此一个网络中的一个虚机发出一个广播帧后,GRE 会将其广播到所有与该节点有隧道连接的节点。
- 当前有很多防火墙和三层网络设备无法解析 GRE,因此它们无法对 GRE 封装包做合适的过滤和负载均衡。
VXLAN
VXLAN 全称叫做虚拟可扩展局域网,也是一种网络虚拟化技术标准,它允许单个物理网络被多个不同的组织或租户共享,而任何一个租户都无法看到其他任何租户的网络流量。
从技术实现上来看,VXLAN 通过在 4 层 UDP 数据包中封装 2 层 以太网帧,使其能够创建跨越 3 层 物理网络的虚拟化 2 层子网。每个分段的子网都由 VXLAN 网络标识符(VNI)唯一标识。在 VXLAN 网络实现中,执行数据包的封装和解包的实体叫做 VTEP(VXLAN Tunnel Endpoint),VTEP 可以是独立的网络设备,例如物理路由器或者交换机,也可以是部署在服务器上的虚拟交换机。VTEP 将以太网帧封装为 VXLAN 数据包,然后通过 IP 或其他 3 层网络发送到目标 VTEP,在那里进行解封并转发到目标服务器。为了支持无法独立作为 VTEP 运行的设备,例如裸金属服务器,一些硬件 VTEP 可以封装和解封数据包。VTEP 可以驻留在 Hypervisor 主机中,例如基于内核的虚拟机(KVM),以直接支持虚拟化工作负载。这种类型的 VTEP 被称为软件 VTEP。
从报文格式上来看,VXLAN 和 GRE 不同,VXLAN 是从二层外面就套了一个 VXLAN 的头,这里面包含的 VXLAN ID 为 24 位,非常够用了。在 VXLAN 头外面还封装了 UDP、IP,以及外层的 MAC 头。
和 GRE 端到端的隧道不同,VXLAN 不是点对点的,而是支持通过组播来定位目标机器的,不一定是这一端发出,另外一个端接收。当一个 VTEP 启动的时候,它们都需要通过 IGMP 协议加入到一个组播组,就像加入到一个微信群一样,所有发送到这个“微信群”里面的消息,大家都能收到,而当每个物理机上的虚拟机启动之后,VTEP 就知道,有一个新的 VM 上线了,它归我管。
下面我以一个云平台中的例子,说明这个通信过程。
如图,假设虚机 1、2、3 属于云中同一业务的机器,因此给他们划分了相同的 VXLAN ID,在机器上,我们分别可以知道它们的 IP 地址,于是可以在虚拟机 1 上 ping 虚拟机 2。这个时候虚拟机 1 并不知道虚拟机 2 的 MAC 地址,因此这个包是发不出去的,所以要先发送 ARP 广播。
ARP 请求到达 VTEP1 的时候,VTEP1 知道要访问一台“不归自己管”的机器,上面提到它不是加了一个组播组吗,于是就类似于在微信群里发送 @all 消息一样,问一下虚拟机 2 归睡管,于是 VTEP1 将 ARP 请求封装在 VXLAN 里面,组播出去。由于同一个组播组,VTEP2 和 VTEP3 当然都收到了消息,因此都会解开 VXLAN 包看,里面是一个 ARP。
VTEP3 在本地广播半天,没人回;同样地,VTEP2 也在本地广播,虚拟机 2 回了,于是 VTEP2 便知道了虚拟机 2 归它管,也知道了虚拟机 2 的 MAC 地址,同时,VTEP2 也学会了虚拟机 1 归 VTEP1 管,以后要找虚拟机 1,去找 VTEP1 就可以了。
VTEP2 将 ARP 的回复封装在 VXLAN 里面,这次不用组播了,直接发回给 VTEP1。VTEP1 解开 VXLAN 的包,发现是 ARP 的回复,于是发给虚拟机 1。通过这次通信,VTEP1 也学到了,虚拟机 2 归 VTEP2 管,以后找虚拟机 2,去找 VTEP2 就可以了。虚拟机 1 的 ARP 得到了回复,知道了虚拟机 2 的 MAC 地址,于是就可以发送包了。
虚拟机 1 发给虚拟机 2 的包到达 VTEP1,它当然记得刚才学的东西,要找虚拟机 2,就去 VTEP2,于是将包封装在 VXLAN 里面,外层加上 VTEP1 和 VTEP2 的 IP 地址,发送出去。网络包到达 VTEP2 之后,VTEP2 解开 VXLAN 封装,将包转发给虚拟机 2。虚拟机 2 回复的包,到达 VTEP2 的时候,它当然也记得刚才学的东西,要找虚拟机 1,就去 VTEP1,于是将包封装在 VXLAN 里面,外层加上 VTEP1 和 VTEP2 的 IP 地址,也发送出去。网络包到达 VTEP1 之后,VTEP1 解开 VXLAN 封装,将包转发给虚拟机 1。
完成整个通信流程。
VXLAN 和 EVPN
EVPN(Ethernet VPN)是一种以太网虚拟专用网络技术,它提供了一种灵活、可扩展的解决方案,用于在广域网(WAN)中扩展以太网服务。EVPN 通过使用 BGP(边界网关协议)作为控制平面,将以太网的 2 层和 3 层连接扩展到跨越多个站点的网络中。当 VXLAN 与 EVPN 结合使用时,操作员可以在支持该标准并且属于同一 3 层网络的任何物理网络交换机上创建虚拟网络。例如,可以从交换机 A 获取一个端口,从交换机 B 获取两个端口,再从交换机 C 获取另外一个端口,然后构建一个虚拟网络,对所有连接的设备来说,它看起来就像是一个单一的物理网络,参与此虚拟网络的设备将无法看到其他 VXLAN 或底层网络的流量。下面是 VXLAN 和 EVPN 结合使用的一些主要优势:
- 灵活的网络扩展:VXLAN 与 EVPN 结合使用可以在 3 层 IP 或 MPLS 网络上扩展 2 层网络,这意味着,我们可以在支持 EVPN 的任何物理网络交换机上创建虚拟网络,而不受物理布局和地理距离的限制,这使得网络扩展变得更加灵活和容易。
- 简化的网络管理:VXLAN 与 EVPN 结合使用可以将虚拟网络与物理基础设施分离,从而简化了网络管理。操作员可以在支持 EVPN 的交换机上创建虚拟网络,而无需关心底层物理网络的细节。这使得网络配置和管理变得更加简单和高效。
- 安全的网络分段:VXLAN 与 EVPN 结合使用可以实现安全的网络分段。每个虚拟网络都可以作为一个独立的分段,不同的虚拟网络之间的流量是隔离的。这样可以确保不同租户之间的流量互不干扰,提高了网络的安全性。
- 高性能和高扩展性:VXLAN 与 EVPN 结合使用可以提供高性能和可扩展性的网络解决方案。EVPN 使用 BGP(Border Gateway Protocol)作为控制平面,可以实现灵活的路由和转发。VXLAN 提供了灵活的数据平面封装和解封装,可以在大规模网络中实现高性能的数据传输。
- 多站点互联:VXLAN 与 EVPN 结合使用可以实现多站点互联。通过在不同数据中心的交换机上创建虚拟网络,并使用 EVPN 进行路由和转发,可以实现跨数据中心的网络互联。这使得数据中心之间的数据传输更加灵活和高效。
Reference
https://www.geeksforgeeks.org/difference-between-layer-2-and-layer-3-switches/
https://documentation.meraki.com/MS/Layer_3_Switching/Comparing_Layer_3_and_Layer_2_Switches
https://www.qsfptek.com/qt-news/switch-stacking-vs-mlag.html
https://www.practicalnetworking.net/stand-alone/vlans/
https://www.practicalnetworking.net/stand-alone/routing-between-vlans/
https://time.geekbang.org/column/intro/100007101?tab=catalog
https://www.techtarget.com/searchnetworking/definition/virtual-LAN
https://www.n-able.com/blog/what-are-vlans
https://www.solarwinds.com/resources/it-glossary/vlan
https://en.wikipedia.org/wiki/Virtual_Extensible_LAN
https://www.juniper.net/us/en/research-topics/what-is-vxlan.html
https://www.juniper.net/us/en/research-topics/what-is-evpn-vxlan.html
https://support.huawei.com/enterprise/en/doc/EDOC1100168670
(全文完)