![VLAN 如何工作?](https://linux22.com/image/526564/VLAN%20%E5%A6%82%E4%BD%95%E5%B7%A5%E4%BD%9C%EF%BC%9F.png)
什么是 VLAN?它们能解决哪些问题?
我正在帮助一位朋友学习基本的网络知识,因为他刚刚成为一家小公司的唯一系统管理员。我一直在向他介绍 Serverfault 上与各种网络主题相关的各种问题/答案,并注意到一个空白——似乎没有一个答案从第一原理解释什么是 VLAN。本着子网划分如何工作,我认为在这里提出一个有规范答案的问题会很有用。
答案中可能涉及的一些主题:
- 什么是 VLAN?
- 它们想要解决什么问题?
- VLAN 出现之前一切是如何运作的?
- VLAN 与子网有何关系?
- 什么是 SVI?
- 什么是中继端口和接入端口?
- 什么是 VTP?
编辑:说清楚点,我已经知道 VLAN 的工作原理了 - 我只是认为 Serverfault 应该有一个涵盖这些问题的答案。如果时间允许,我也会提交自己的答案。
答案1
虚拟局域网 (VLAN) 是一种抽象概念,允许单个物理网络模拟多个并行物理网络的功能。这很方便,因为在某些情况下,您可能需要多个并行物理网络的功能,但又不想花钱购买并行硬件。我将在本回答中讨论以太网 VLAN(尽管其他网络技术也可以支持 VLAN),我不会深入探讨每个细节。
一个人为的例子和一个问题
举一个纯粹人为的例子,假设您拥有一栋办公楼,并将其出租给租户。作为租赁的好处,每个租户将在办公室的每个房间获得实时以太网插孔。您为每一层楼购买一台以太网交换机,将它们连接到该楼层每个办公室的插孔,并将所有交换机连接在一起。
最初,您将空间租给两个不同的租户——一个在 1 楼,一个在 2 楼。每个租户都使用静态 IPv4 地址配置他们的计算机。两个租户使用不同的 TCP/IP 子网,一切似乎都运行正常。
后来,一位新租户租下了 3 楼的一半空间,并安装了一台这种新式 DHCP 服务器。一段时间后,1 楼的租户也决定加入 DHCP 潮流。这时,事情开始变得糟糕。3 楼的租户报告说,他们的一些计算机从一台不是 DHCP 服务器的机器上获取了“奇怪的”IP 地址。很快,1 楼的租户也报告了同样的事情。
DHCP 是一种利用以太网的广播功能允许客户端计算机动态获取 IP 地址的协议。由于租户都共享同一个物理以太网网络,因此他们共享同一个广播域。从网络中的任何计算机发送的广播数据包都会将所有交换机端口发送到其他每台计算机。1 楼和 3 楼的 DHCP 服务器将接收所有 IP 地址租约请求,并有效地进行对决,看谁能先回答。这显然不是您希望租户体验的行为。不过,这是没有任何 VLAN 的“平面”以太网网络的行为。
更糟糕的是,2 楼的一名租户购买了这款“Wireshark”软件,并报告说,他们不时看到从交换机传出的流量引用了他们从未听说过的计算机和 IP 地址。他们的一名员工甚至发现,他可以通过将分配给他 PC 的 IP 地址从 192.168.1.38 更改为 192.168.0.38 来与其他计算机通信!据推测,他距离为其他租户之一提供“未经授权的免费系统管理服务”只有几步之遥。这可不妙。
潜在解决方案
您需要一个解决方案!您只需拔掉楼层之间的插头,就可以切断所有不必要的通信!是的!这就是解决方案……
这可能有用,除了假设您有一位新租户,他将租用地下室的一半和三楼的空置一半。如果三楼交换机和地下室交换机之间没有连接,新租户将无法在分布在两层楼的计算机之间进行通信。拔掉插头不是解决办法。更糟糕的是,新租户会把其他其中一个 DHCP 服务器!
您考虑过为每个租户购买物理上独立的以太网交换机,但考虑到您的大楼有 30 层,其中每层都可以细分为 4 层,大量并行以太网交换机之间可能出现的层层电缆乱作一团可能是一场噩梦,更不用说成本高昂了。如果有一种方法可以让单个物理以太网网络表现得像多个物理以太网网络,每个网络都有自己的广播域,那就太好了。
VLAN 来救援
VLAN 可以解决这一棘手的问题。VLAN 允许您将以太网交换机细分为逻辑上不同的虚拟以太网交换机。这样,单个以太网交换机就可以充当多个物理以太网交换机。例如,对于细分的 3 楼,您可以配置 48 端口交换机,使较低的 24 个端口位于给定的 VLAN(我们将其称为 VLAN 12)中,较高的 24 个端口位于给定的 VLAN(我们将其称为 VLAN 13)中。在交换机上创建 VLAN 时,您必须为它们分配某种类型的 VLAN 名称或编号。我在这里使用的数字大多是任意的,所以不必担心我选择的具体数字。
将 3 楼交换机划分为 VLAN 12 和 13 后,您会发现新的 3 楼租户可以将其 DHCP 服务器插入分配给 VLAN 13 的端口之一,而插入分配给 VLAN 12 的端口的 PC 不会从新的 DHCP 服务器获取 IP 地址。太棒了!问题解决了!
哦,等一下……我们如何将 VLAN 13 数据传输到地下室?
交换机之间的 VLAN 通信
您的租户住在半个三楼和半个地下室,他们想将地下室的计算机连接到三楼的服务器。您可以直接从三楼交换机上分配给其 VLAN 的其中一个端口拉一根电缆到地下室,这样就很方便了,对吗?
在 VLAN 的早期(802.1Q 标准之前),您可能就是这样做的。整个地下室交换机实际上将是 VLAN 13(您选择分配给 3 楼和地下室的新租户的 VLAN)的一部分,因为该地下室交换机将由分配给 VLAN 13 的 3 楼端口“馈送”。
这种解决方案是可行的,直到您将地下室的另一半租给 1 楼的租户,而该租户也希望在 1 楼和地下室的计算机之间进行通信。您可以使用 VLAN 拆分地下室交换机(例如,拆分为 VLAN2 和 13),并将电缆从 1 楼连接到地下室中分配给 VLAN2 的端口,但您的判断力告诉您,这很快就会变成一堆乱七八糟的电缆(而且只会变得更糟)。使用 VLAN 拆分交换机很好,但必须将多条电缆从其他交换机连接到属于不同 VLAN 的端口似乎很麻烦。毫无疑问,如果您必须将地下室交换机分成 4 个方向供在较高楼层也有空间的租户使用,那么您将使用地下室交换机上的 4 个端口来终止来自楼上 VLAN 的“馈线”电缆。
现在应该清楚的是,需要某种通用方法,通过一条电缆在交换机之间传输来自多个 VLAN 的流量。仅在交换机之间添加更多电缆以支持不同 VLAN 之间的连接并不是一个可扩展的策略。最终,有了足够多的 VLAN,这些 VLAN 间/交换机间连接将占用交换机上的所有端口。需要的是一种通过一条连接(即交换机之间的“中继”连接)传输来自多个 VLAN 的数据包的方法。
到目前为止,我们讨论过的所有交换机端口都称为“访问”端口。也就是说,这些端口专用于访问单个 VLAN。插入这些端口的设备本身没有特殊配置。这些设备“不知道”存在任何 VLAN。客户端设备发送的帧被传送到交换机,然后交换机负责确保该帧仅发送到分配给该帧进入交换机的端口的 VLAN 成员的端口。如果帧在分配给 VLAN 12 成员的端口上进入交换机,则交换机将仅将该帧发送到属于 VLAN 12 成员的端口。交换机“知道”分配给它从中接收帧的端口的 VLAN 号,并以某种方式知道仅将此帧发送到同一 VLAN 的端口。
如果交换机可以通过某种方式将与给定帧关联的 VLAN 编号共享给其他交换机,那么其他交换机就可以正确处理将该帧仅传送到适当的目标端口。这就是 802.1Q VLAN 标记协议的作用。(值得注意的是,在 802.1Q 之前,一些供应商制定了自己的 VLAN 标记和交换机间中继标准。大多数情况下,这些预标准方法都被 802.1Q 取代了。)
当您将两台支持 VLAN 的交换机连接在一起,并希望这些交换机将帧传送到正确的 VLAN 时,您可以使用“中继”端口连接这些交换机。这涉及将每台交换机上的端口配置从“访问”模式更改为“中继”模式(在非常基本的配置中)。
当端口配置为中继模式时,交换机从该端口发出的每个帧都将包含一个“VLAN 标签”。此“VLAN 标签”不是客户端发送的原始帧的一部分。相反,此标签是由发送交换机在将帧从中继端口发出之前添加的。此标签表示与帧来源端口关联的 VLAN 编号。
接收交换机可以查看标签以确定帧来自哪个 VLAN,并根据该信息将帧仅转发到分配给源 VLAN 的端口。由于连接到“访问”端口的设备不知道正在使用 VLAN,因此必须从帧中删除“标签”信息,然后才能将其发送到配置为访问模式的端口。这种标签信息的删除会导致整个 VLAN 中继过程对客户端设备隐藏,因为它们收到的帧不会带有任何 VLAN 标签信息。
在实际配置 VLAN 之前,我建议在测试交换机上为中继模式配置一个端口,并使用嗅探器(如 Wireshark)监控从该端口发出的流量。您可以从另一台计算机创建一些示例流量,插入接入端口,然后查看离开中继端口的帧实际上将大于测试计算机发送的帧。您将在 Wireshark 中的帧中看到 VLAN 标记信息。我发现实际查看嗅探器中发生的情况是值得的。此时阅读 802.1Q 标记标准也是一项不错的选择(特别是因为我没有谈论“本机 VLAN”或双标记之类的东西)。
VLAN 配置难题及其解决方案
随着您在建筑物中租用的空间越来越多,VLAN 的数量也随之增长。每次添加新 VLAN 时,您都会发现必须登录越来越多的以太网交换机并将该 VLAN 添加到列表中。如果有某种方法可以将该 VLAN 添加到单个配置清单并让其自动填充每个交换机的 VLAN 配置,那不是很好吗?
思科专有的“VLAN 中继协议”(VTP) 或基于标准的“多 VLAN 注册协议”(MVRP,以前称为 GVRP) 等协议可实现此功能。在使用这些协议的网络中,单个 VLAN 创建或删除条目会导致协议消息发送到网络中的所有交换机。该协议消息将 VLAN 配置的更改传达给其余交换机,而其余交换机又会修改其 VLAN 配置。VTP 和 MVRP 并不关心哪些特定端口配置为特定 VLAN 的访问端口,而是用于将 VLAN 的创建或删除传达给所有交换机。
当您熟悉 VLAN 后,您可能想回头阅读有关“VLAN 修剪”的内容,它与 VTP 和 MVRP 等协议相关。目前,它没什么可担心的。(维基百科上的 VTP 文章有一个很好的图表,解释了 VLAN 修剪及其好处。
在现实生活中何时使用 VLAN?
在我们进一步讨论之前,重要的是思考现实生活,而不是人为的例子。为了不重复另一个答案的文字,我将推荐您阅读我的回答是:何时创建 VLAN。它不一定是“初学者级别”的,但现在值得一看,因为在回到一个做作的例子之前我将简要地参考它。
对于“tl;dr”人群(无论如何,他们肯定都已经停止阅读了),上面链接的要点是:创建 VLAN 以缩小广播域,或者当您出于某些特定原因(安全、策略等)想要隔离流量时。实际上没有其他使用 VLAN 的好理由。
在我们的示例中,我们使用 VLAN 来限制广播域(以保持 DHCP 等协议正常工作),其次,因为我们希望在各个租户的网络之间进行隔离。
关于 IP 子网和 VLAN 的补充
一般来说,为了方便起见,为了便于隔离,并且根据 ARP 协议的工作方式,VLAN 和 IP 子网之间通常是一对一的关系。
正如我们在本回答开头所看到的,两个不同的 IP 子网可以毫无问题地在同一个物理以太网上使用。如果您使用 VLAN 来缩小广播域,那么您不会希望与两个不同的 IP 子网共享同一个 VLAN,因为您将合并它们的 ARP 和其他广播流量。
如果您出于安全或策略原因使用 VLAN 来隔离流量,那么您可能也不会想将多个子网组合在同一个 VLAN 中,因为这样会违背隔离的目的。
IP 使用基于广播的协议,即地址解析协议 (ARP),将 IP 地址映射到物理 (以太网 MAC) 地址。由于 ARP 是基于广播的,因此将同一 IP 子网的不同部分分配给不同的 VLAN 会产生问题,因为一个 VLAN 中的主机无法接收来自另一个 VLAN 中主机的 ARP 回复,因为广播不会在 VLAN 之间转发。您可以使用代理 ARP 解决这个“问题”,但最终,除非您有充分的理由需要将 IP 子网拆分到多个 VLAN 中,否则最好不要这样做。
最后补充一点:VLAN 和安全
最后,值得注意的是,VLAN 并不是一种很好的安全设备。许多以太网交换机都存在漏洞,允许来自一个 VLAN 的帧从分配给另一个 VLAN 的端口发送出去。以太网交换机制造商已经努力修复这些漏洞,但能否完全实现这些漏洞值得怀疑。
在我们虚构的例子中,2 楼的员工即将为另一个租户提供免费的系统管理“服务”,但可以通过将其流量隔离到 VLAN 中来阻止他这样做。不过,他也可能想出如何利用交换机固件中的错误,让他的流量也“泄漏”到另一个租户的 VLAN 中。
城域以太网提供商越来越依赖 VLAN 标记功能和交换机提供的隔离。说存在不使用 VLAN 提供的安全性。但公平地说,在存在不受信任的 Internet 连接或 DMZ 网络的情况下,最好使用物理上独立的交换机来承载这种“敏感”流量,而不是在交换机上使用 VLAN 来承载受信任的“防火墙后”流量。
将第 3 层纳入视野
到目前为止,本答案讨论的所有内容都与第 2 层(以太网帧)有关。如果我们开始将第 3 层引入其中,会发生什么?
让我们回到人为设计的建筑物示例。您已采用 VLAN,选择将每个租户的端口配置为单独的 VLAN 成员。您已配置中继端口,以便每个楼层的交换机都可以将带有原始 VLAN 编号标记的帧交换到楼上和楼下的交换机。一个租户可以拥有分布在多个楼层的计算机,但由于您熟练的 VLAN 配置技能,这些物理上分散的计算机看起来都属于同一物理 LAN。
您对自己在 IT 方面的成就非常满意,因此决定开始为租户提供互联网连接。您购买了一条宽互联网管道和一个路由器。您向所有租户提出了这个想法,其中两个租户立即表示同意。幸运的是,您的路由器有三个以太网端口。您将一个端口连接到宽互联网管道,将另一个端口连接到分配用于访问第一个租户 VLAN 的交换机端口,将另一个端口连接到分配用于访问第二个租户 VLAN 的端口。您使用每个租户网络中的 IP 地址配置路由器端口,租户开始通过您的服务访问互联网!收入增加了,您很高兴。
但很快,另一个租户决定使用您的互联网服务。但是您的路由器上没有端口了。该怎么办?
幸运的是,您购买的路由器支持在其以太网端口上配置“虚拟子接口”。简而言之,此功能允许路由器接收和解释带有源 VLAN 号标记的帧,并让虚拟(即非物理)接口配置适合其将与之通信的每个 VLAN 的 IP 地址。实际上,这允许您“多路复用”路由器上的单个以太网端口,使其看起来像多个物理以太网端口一样运行。
您将路由器连接到其中一个交换机的中继端口,并配置与每个租户的 IP 寻址方案相对应的虚拟子接口。每个虚拟子接口都配置了分配给每个客户的 VLAN 号。当帧离开交换机上的中继端口前往路由器时,它将携带一个带有原始 VLAN 号的标签(因为它是一个中继端口)。路由器将解释此标签并将数据包视为到达与该 VLAN 相对应的专用物理接口。同样,当路由器响应请求向交换机发送帧时,它会向帧添加 VLAN 标签,以便交换机知道响应帧应传送到哪个 VLAN。实际上,您已将路由器配置为“显示”为多个 VLAN 中的物理设备,同时仅使用交换机和路由器之间的单个物理连接。
单板路由器和第 3 层交换机
使用虚拟子接口,您能够向所有租户销售互联网连接,而无需购买具有 25 个以上以太网接口的路由器。您对自己的 IT 成就相当满意,因此当两个租户向您提出新请求时,您会积极响应。
这些租户选择在某个项目上“合作”,他们希望允许一个租户办公室(一个给定的 VLAN)中的客户端计算机访问另一个租户办公室(另一个 VLAN)中的服务器计算机。由于他们都是您的 Internet 服务的客户,因此只需在您的核心 Internet 路由器(该路由器上为每个租户的 VLAN 配置了一个虚拟子接口)中更改 ACL,即可允许流量在他们的 VLAN 之间流动以及从他们的 VLAN 流向 Internet。您进行更改并让租户离开。
第二天,您收到两个租户的投诉,称一个办公室的客户端计算机与另一个办公室的服务器之间的访问速度非常慢。服务器和客户端计算机都通过千兆以太网连接到您的交换机,但文件传输速度仅为 45Mbps 左右,巧合的是,这大约是您的核心路由器连接到其交换机的速度的一半。显然,从源 VLAN 流向路由器并从路由器流回目标 VLAN 的流量因路由器与交换机的连接而受到瓶颈限制。
您对核心路由器所做的操作,允许它在 VLAN 之间路由流量,通常称为“单根路由器”(可以说是一种愚蠢而异想天开的委婉说法)。这种策略可以很好地发挥作用,但流量只能在 VLAN 之间流动,直至路由器与交换机的连接容量。如果路由器能以某种方式与以太网交换机本身的“核心”结合在一起,它就可以更快地路由流量(因为根据制造商的规格表,以太网交换机本身能够交换超过 2Gbps 的流量)。
“第 3 层交换机”是一种以太网交换机,从逻辑上讲,它包含一个隐藏在自身内部的路由器。我认为将第 3 层交换机想象成在交换机内部隐藏了一个微型快速路由器是非常有帮助的。此外,我建议您将路由功能视为与第 3 层交换机提供的以太网交换功能截然不同的功能。从所有意图和目的来看,第 3 层交换机都是封装在一个机箱中的两个不同设备。
第 3 层交换机中的嵌入式路由器以一定的速度连接到交换机的内部交换结构,通常允许以线速或接近线速在 VLAN 之间路由数据包。类似于您在“单板路由器”上配置的虚拟子接口,第 3 层交换机内的嵌入式路由器可以配置虚拟接口,这些虚拟接口“看起来”是每个 VLAN 的“访问”连接。这些从 VLAN 到第 3 层交换机内嵌入式路由器的逻辑连接不称为虚拟子接口,而是称为交换机虚拟接口 (SVI)。实际上,第 3 层交换机内的嵌入式路由器具有一定数量的“虚拟端口”,可以“插入”交换机上的任何 VLAN。
嵌入式路由器的性能与物理路由器相同,只是它通常不具备物理路由器的所有动态路由协议或访问控制列表 (ACL) 功能(除非您购买了非常好的 3 层交换机)。但是,嵌入式路由器的优势在于速度非常快,并且不会出现与其所插入的物理交换机端口相关的瓶颈。
在我们这里与“合作”租户的示例中,您可以选择获取第 3 层交换机,将其插入中继端口,以便来自两个客户 VLAN 的流量到达它,然后使用 IP 地址和 VLAN 成员身份配置 SVI,使其“出现”在两个客户 VLAN 中。完成此操作后,只需调整核心路由器和第 3 层交换机中的嵌入式路由器上的路由表,以便租户 VLAN 之间流动的流量由第 3 层交换机内的嵌入式路由器而不是“单板路由器”路由。
使用第 3 层交换机并不意味着不会出现与交换机互连的中继端口带宽相关的瓶颈。不过,这与 VLAN 解决的问题无关。VLAN 与带宽问题无关。通常,带宽问题可以通过获取更高速的交换机间连接或使用链路聚合协议将多个低速连接“绑定”为虚拟的高速连接来解决。除非所有创建帧以供后 3 层交换机内的嵌入式路由器路由的设备本身都直接插入第 3 层交换机上的端口,否则您仍然需要担心交换机之间中继的带宽。第 3 层交换机不是万能的,但它通常比“单板路由器”更快。
动态 VLAN
最后,有些交换机提供动态 VLAN 成员资格功能。当设备连接时,可以动态更改端口配置(访问或中继,以及用于哪些 VLAN),而不是将给定端口指定为给定 VLAN 的访问端口。动态 VLAN 是一个更高级的主题,但了解该功能的存在会很有帮助。
不同供应商的功能有所差异,但通常您可以根据所连接设备的 MAC 地址、设备的 802.1X 身份验证状态、专有和基于标准的协议(例如,CDP 和 LLDP,以允许 IP 电话“发现”语音流量的 VLAN 编号)、分配给客户端设备的 IP 子网或以太网协议类型配置动态 VLAN 成员资格。
答案2
VLAN 是“虚拟局域网”。以下是我的理解 - 我的背景主要是系统工程和管理,以及面向对象编程和大量脚本编写。
VLAN 旨在跨多个硬件设备创建隔离网络。旧时代的传统 LAN 可能只存在于专用于特定网络的单个硬件设备中。连接到该网络设备(交换机或集线器,取决于历史时间范围)的所有服务器/设备通常都允许在 LAN 之间自由通信。
VLAN 的不同之处在于,您可以将多个网络设备互连,并通过将服务器分组到 VLAN 中来创建隔离网络,从而无需为单个 LAN 配备“专用”网络设备。可配置 VLAN 的数量和支持的服务器/设备因网络设备制造商而异。
同样取决于供应商,我不思考所有服务器都需要位于同一子网中才能成为同一 VLAN 的一部分。我相信在传统网络配置中它们确实如此(网络工程师在此处插入更正)。
VLAN 与 VPN 的区别在于字母“P”,代表“Private”。通常 VLAN 流量不加密。
希望有帮助!