VLAN如何工作?

什么是VLAN? 他们解决了什么问题?

我正在帮助一个朋友学习基本的networking,因为他只是成为一家小公司的唯一系统pipe理员。 我一直指着他关于各种networking主题的Serverfault上的各种问题/答案,并注意到一个缺口 – 似乎没有答案,从第一原则解释什么VLAN是什么。 本着“ 子网划分工作如何”的精神,我认为在这里有一个规范的答案是有用的。

答案中包含一些潜在的主题:

  • 什么是VLAN?
  • 他们打算解决什么问题?
  • VLAN之前是如何工作的?
  • VLAN如何与子网相关联?
  • 什么是SVI?
  • 什么是中继端口和接入端口?
  • 什么是VTP?

编辑:要清楚,我已经知道VLAN是如何工作的 – 我只是认为Serverfault应该有一个涵盖这些问题的答案。 时间允许的话,我也会提交自己的答案。

虚拟LAN(VLAN)是允许单个物理networking模拟多个并行物理networking的function的抽象。 这很方便,因为有些情况下你需要多个并行物理networking的function,但是你不愿花钱购买并行硬件。 我将在这个答案中谈论以太网VLAN(即使其他networking技术可以支持VLAN),我也不会深入探讨每一个细微差别。

一个受挫的例子和一个问题

作为一个纯粹人为设想的例子,假设你拥有一栋租赁给租户的办公大楼。 作为租赁的一个好处,每个租户都会在办公室的每个房间里拿到现场的以太网接口。 你可以为每层买一个以太网交换机,把它们连接到该楼层的每个办公室的插孔,并将所有交换机连接在一起。

最初,您将租赁空间租给两个不同的租户,一个租户在1楼,另一个租户在2楼。每个租户都configuration他们的计算机(带有静态IPv4地址)。 两个租户使用不同的TCP / IP子网,一切似乎工作得很好。

后来,一个新的租户租了3楼的一半,带来了其中一个新的DHCP服务器。 时间过去了,一楼租户也决定跳上DHCP的潮stream。 当事情开始出现错误时,这就是一个问题。 第三层的租户报告说,他们的一些电脑从一台不是他们的DHCP服务器的机器上获得“有趣的”IP地址。 很快,1号楼的居民也报道了同样的事情。

DHCP是一种利用以太网的广播能力,允许客户端计算机dynamic获取IP地址的协议。 因为租户都共享相同的物理以太网networking,他们共享相同的广播域。 从networking中的任何一台计算机发出的广播数据包将把所有的交换机端口扩散到每台计算机上。 第1层和第3层的DHCP服务器将收到所有的IP地址租用请求,并有效地决定谁先回答。 这显然不是你打算租户经历的行为。 然而,这是一个没有任何VLAN的“扁平”以太网networking的行为。

更糟糕的是,2楼的租户获得了这个“Wireshark”软件,他们不时看到他们的交换机出现交换机引用计算机和IP地址,他们从来没有听说过。 他们的一个员工甚至发现他可以通过将分配给他的PC的IP地址从192.168.1.38更改为192.168.0.38来与这些其他计算机通信! 据推测,他只是为其他租户之一执行“未经授权的无偿服务系统pipe理服务”。 不好。

潜在的解决scheme

你需要一个解决scheme! 你可以拉住楼层之间的插头,这将切断所有不必要的沟通! 是啊! 那是票…

这可能是有效的, 只不过你有一个新的租客将租用一半的地下室和三层空闲的一半。如果三层交换机和地下室交换机之间没有连接,新的租户将不会能够在他们的电脑之间进行沟通,并将传播到他们的两个楼层。 拔插头不是答案。 更糟糕的是,新租户还带来了另一个这样的DHCP服务器!

你打算为每个租户购买物理上独立的以太网交换机,但是看到你的build筑物有30层楼,其中任何一层都可以细分为4种方式,潜在的老鼠之间的地板到地面之间的电缆海量的并行以太网交换机可能是一场噩梦,更不用说昂贵了。 如果只有一种方法可以使单个物理以太网networking像多个物理以太网那样工作,每个networking都有自己的广播域。

VLAN到Rescue

VLAN是这个混乱的问题的答案。 VLAN允许您将以太网交换机细分为逻辑上不同的虚拟以太网交换机。 这允许单个以太网交换机充当多个物理以太网交换机。 例如,如果您划分了3层,则可以configuration您的48端口交换机,使得较低的24端口位于给定的VLAN中(我们称其为VLAN 12),而较高的24端口位于给定的VLAN中我们将称之为VLAN 13)。 在交换机上创buildVLAN时,必须为其分配一些types的VLAN名称或号码。 我在这里使用的数字大多是任意的,所以不要担心我select的具体数字。

一旦将第3层交换机划分到VLAN 12和13中,您会发现新的第3层租户可以将其DHCP服务器插入分配给VLAN 13的端口之一,并将PC插入分配给VLAN 12的端口。从新的DHCP服务器获取IP地址。 优秀! 问题解决了!

哦,等等…我们如何才能将VLAN 13的数据传送到地下室?

交换机之间的VLAN通信

您的半地下室3和半地下室客户希望将地下室中的计算机连接到他们在3楼的服务器。您可以直接从分配给其VLAN中的一个端口的电缆在地板3上切换到地下室和生活会好的,对吧?

在VLAN(802.1Q标准之前)的早期阶段,你可能会这样做。 实际上,整个地下室交换机将是VLAN 13的一部分(您select分配给位于3楼和地下室的新租户的VLAN),因为该地下室交换机将由分配给3层的端口“馈送”到VLAN 13。

这种解决scheme将工作,直到你把地下室的另一半租给你的1楼房客,他们也想在1楼和地下室电脑之间进行沟通。 您可以使用VLAN(例如,VLAN2和VLAN13)将地下室交换机拆分,然后从地板1运行电缆到地下室的VLAN 2的端口,但是您最好判断是否可以快速变成鼠窝的电缆(只会变得更糟)。 使用VLAN来分割交换机是好的,但是必须从其他交换机运行多个电缆到不同VLAN的成员端口似乎是混乱的。 毫无疑问,如果您必须在高楼层的空间上分隔地下室开关之间的4种方式,则可以使用地下室开关上的4个端口来终止楼上VLAN的“馈线”电缆。

现在应该清楚的是,需要一种在单个电缆上的交换机之间从多个VLAN移动stream量的通用方法。 只需在交换机之间添加更多的电缆以支持不同VLAN之间的连接,这不是一种可扩展的策略。 最终,如果有足够的VLAN,则会使用这些VLAN间/交换机间连接,占用交换机上的所有端口。 所需要的是一种方法,可以在单个连接上传输来自多个VLAN的数据包 – 交换机之间的“中继”连接。

到目前为止,我们所谈到的所有交换机端口都被称为“访问”端口。 也就是说,这些端口专门用于访问单个VLAN。 插入这些端口的设备本身没有特殊的configuration。 这些设备不知道有任何VLAN存在。 客户端设备发送的帧被传送到交换机,然后交换机确保帧只被发送到分配给作为VLAN成员的端口,该VLAN被分配给帧进入交换机的端口。 如果一个帧在一个被指定为VLAN 12成员的端口上进入交换机,那么交换机将只发送该帧作为VLAN 12成员的端口。交换机“知道”分配给从其接收端口的VLAN号帧,不知何故只知道这个帧出同一个VLAN的端口。

如果交换机有一些方法可以将与给定帧关联的VLAN号码共享给其他交换机,则其他交换机可以正确处理将该帧仅传送到适当的目标端口。 这是802.1Q VLAN标记协议的作用。 (值得注意的是,在802.1Q之前,一些厂商制定了自己的VLAN标签和交换机之间的中继标准,这些标准的方法大部分都被802.1Q取代了)。

如果您有两台可以识别VLAN的交换机互相连接,并且您希望这些交换机将帧之间的帧传递到正确的VLAN,则可以使用“中继”端口连接这些交换机。 这涉及将每个交换机上的端口的configuration从“访问”模式改变为“中继”模式(在非常基本的configuration中)。

当端口configuration为中继模式时,交换机发送该端口的每个帧都将包含该帧中的“VLAN标记”。 这个“VLAN标记”不是客户端发送的原始帧的一部分。 相反,这个标签是由发送交换机在从中继端口发送帧之前添加的。 这个标签表示与帧起源的端口相关的VLAN号码。

接收交换机可以查看标签以确定帧起源于哪个VLAN,并且基于该信息仅将帧转发出分配给发起VLAN的端口。 由于连接到“访问”端口的设备并不知道正在使用VLAN,因此必须从帧中剥离“标签”信息,才能将其从访问模式下configuration的端口发出。 标签信息的剥离导致整个VLAN中继过程对客户端设备隐藏,因为它们接收到的帧将不承载任何VLAN标签信息。

在现实生活中configurationVLAN之前,我build议在testing交换机上configuration一个trunk模式的端口,并使用嗅探器(如Wireshark)来监视正在发送该端口的stream量。 您可以从另一台计算机上创build一些示例stream量,将其插入访问端口,并且看到从中继端口离开的帧实际上将大于testing计算机发送的帧。 您将在Wireshark的框架中看到VLAN标签信息。 我发现实际上值得一看嗅探器发生了什么。 阅读802.1Q标记标准在这一点上也是一个体面的事情(特别是因为我不是在谈论“本地VLAN”或双重标记)。

VLANconfiguration恶梦及解决scheme

随着您在build筑物中租用越来越多的空间,VLAN数量不断增加。 每次添加新的VLAN时,都会发现必须login到越来越多的以太网交换机并将该VLAN添加到列表中。 如果有某种方法可以将该VLAN添加到单个configuration清单并使其自动填充每个交换机的VLANconfiguration,那不是很好吗?

思科专有的“VLAN中继协议”(VTP)或基于标准的“多VLAN注册协议”(MVRP–以前称为GVRP)等协议都可以实现此function。 在使用这些协议的networking中,单个VLAN创build或删除条目导致协议消息被发送到networking中的所有交换机。 该协议消息将VLANconfiguration中的更改传送给其余交换机,而交换机又修改其VLANconfiguration。 VTP和MVRP不关心哪些特定端口被configuration为特定VLAN的访问端口,而是用于将VLAN的创build或删除传送到所有交换机。

当你习惯使用VLAN时,你可能会想回头去看看“VLAN修剪”,它与VTP和MVRP等协议相关。 现在没有什么值得关注的。 ( 维基百科上的VTP文章有一个很好的图解释VLAN修剪及其好处。)

什么时候在现实生活中使用VLAN?

在我们走得更远之前,重要的是要考虑现实生活而不是人为的例子。 代替复制另一个答案的文本在这里,我会引用你我的答案:什么时候创buildVLAN 。 这不一定是“初学者级别”,但现在值得一看,因为我要简单地参考它,然后再回到一个人为的例子。

对于“tl; dr”人群(无论如何,他们肯定已经停止了阅读),上面这个链接的要点是:创buildVLAN来使广播域更小,或者当你想要隔离某些特定原因的stream量时,政策等)。 使用VLAN没有任何其他的好理由。

在我们的例子中,我们使用VLAN来限制广播域(保持像DHCP这样的协议正常工作),其次,因为我们要在各个租户的networking之间进行隔离。

另外还有:IP子网和VLAN

一般来说,为方便起见,VLAN和IP子网之间通常存在一对一的关系,以便于隔离,以及由于ARP协议的工作原理。

正如我们在回答开始时看到的,两个不同的IP子网可以在相同的物理以太网上使用,而不会出现问题。 如果您使用VLAN来缩小广播域,您将不想使用两个不同的IP子网共享相同的VLAN,因为您将合并ARP和其他广播stream量。

如果您出于安全或策略原因使用VLAN来隔离stream量,那么您也可能不想在同一个VLAN中组合多个子网,因为您将会破坏隔离的目的。

IP使用基于广播的协议(地址parsing协议(ARP))将IP地址映射到物理(以太网MAC)地址。 由于ARP是基于广播的,所以将同一个IP子网的不同部分分配到不同的VLAN会有问题,因为一个VLAN中的主机将不能接收来自另一个VLAN中的主机的ARP答复,因为广播不在VLAN之间转发。 你可以通过使用proxy-ARP来解决这个“问题”,但是最终除非你有很好的理由需要在多个VLAN之间分割一个IP子网,否则最好不要这样做。

最后一点:VLAN和安全

最后,值得注意的是,VLAN不是一个很好的安全设备。 许多以太网交换机都有错误,允许从一个VLAN发出的帧被发送出去分配给另一个VLAN的端口。 以太网交换机制造商一直在努力解决这些错误,但是可能会有一个完全没有bug的实施scheme,这是值得怀疑的。

就我们这个人为的例子来说,第二层的员工很快就可以免除系统pipe理“服务”给另一个租户,因此可以通过将他的stream量隔离到一个VLAN中来阻止他们这样做。 但是,他也可能会弄清楚如何利用交换机固件中的错误,以便允许他的stream量“泄漏”到另一个租户的VLAN中。

城域以太网提供商越来越依赖VLAN标记function和交换机提供的隔离function。 说使用VLAN提供的安全性是不公平的。 可以公平地说,在不可信的互联网连接或DMZnetworking的情况下,使用物理上独立的交换机来承载这种“棘手”的stream量,而不是交换机上的VLAN,可能更好。

将第3层带入图片

到目前为止,这个答案所谈到的所有内容都与第2层 – 以太网帧有关。 如果我们开始将第3层带入此层会发生什么?

让我们回到这个人造的build筑例子。 您已经select了将每个租户的端口configuration为独立VLAN成员的VLAN。 您已经configuration了中继端口,以便每个楼层的交换机可以将标有发起VLAN编号的帧交换到楼上和楼下的交换机上。 一个租户可以将计算机分布在不同的楼层,但由于您熟练的VLANconfiguration技能,这些物理分布式计算机可能都是同一个物理局域网的一部分。

您充满了IT成就,您决定开始向租户提供Internet连接。 你买一个胖胖的互联网pipe道和路由器。 你把这个想法传达给所有的租户,其中两个立即进入。 幸运的是,你的路由器有三个以太网端口。 您将一个端口连接到胖胖的Internetpipe道,另一个端口连接到分配给第一个租户VLAN的交换机端口,另一个连接到分配给第二个租户VLAN的端口。 您可以在每个租户的networking中使用IP地址configuration您的路由器端口,租户通过您的服务开始访问Internet! 收入增加,你很高兴。

不过,不久,另一个租户决定上网。 但是,您的路由器上的端口不在。 该怎么办?

幸运的是,您购买了支持在其以太网端口上configuration“虚拟子接口”的路由器。 简而言之,此function允许路由器接收和解释标记有起始VLAN号码的帧,并且使虚拟(即非物理)接口configuration有适合于每个将与其通信的VLAN的IP地址。 实际上,这允许您“复用”路由器上的单个以太网端口,使其看起来可以用作多个物理以太网端口。

将路由器连接到其中一台交换机的中继端口,并configuration与每个租户的IP寻址scheme相对应的虚拟子接口。 每个虚拟子接口都configuration有分配给每个客户的VLAN编号。 当一个帧离开交换机上的Trunk端口时,绑定到路由器,它将携带一个带有起始VLAN编号(因为它是一个中继端口)的标签。 路由器将会解释这个标签,并把这个数据包视为到达与该VLAN相对应的专用物理接口。 同样,当路由器响应请求向交换机发送帧时,它将向帧添加VLAN标签,使得交换机知道响应帧应该被递送到哪个VLAN。 实际上,您已将路由器configuration为在多个VLAN中显示为物理设备,而仅在交换机和路由器之间使用单个物理连接。

在路由器和三层交换机上的路由器

使用虚拟子接口,您可以将互联网连接销售给所有租户,而无需购买具有25个以太网接口的路由器。 您对自己的IT成就相当满意,所以当您的两位租户向您提出新要求时,您会作出积极回应。

这些租户select了“合作伙伴”项目,他们希望允许一个租户的办公室(一个给定的VLAN)的客户端计算机访问另一个租户的办公室(另一个VLAN)的服务器计算机。 因为它们都是Internet服务的客户,所以在核心互联网路由器(其中为每个租户的VLANconfiguration一个虚拟子接口)上对ACL进行了相当简单的更改,以允许stream量在其VLAN之间stream动,以及从他们的VLAN的互联网。 你做这个改变,然后把他们送上去。

第二天,您会收到两个租户的投诉,一个办公室的客户端计算机与另一个办公室的服务器之间的访问速度很慢。 服务器和客户端计算机都有千兆以太网连接到您的交换机,但是这些文件只能以45Mbps左右的速度传输,而巧合的说,这大概是核心路由器连接交换机的速度的一半。 显然,从源VLANstream向路由器并从路由器返回到目标VLAN的stream量正在成为路由器与交换机连接的瓶颈。

你用核心路由器做了什么,允许它在VLAN之间路由stream量,通常被称为“一根棍子上的路由器”(一种可以说是愚蠢的异想天开的委婉说法)。 此策略可以正常工作,但是stream量只能在VLAN之间stream动,直到路由器与交换机的连接能力。 如果以某种方式,路由器可以与以太网交换机本身的“胆量”联合起来,它可以更快地路由stream量(因为以太网交换机本身,根据制造商的规格表,能够切换2Gbps的stream量)。

“三层交换机”是一个以太网交换机,从逻辑上说,它包含一个埋在自己内部的路由器。 我觉得把一个三层交换机看作是一个隐藏在交换机内部的小而快的路由器是非常有帮助的。 此外,我build议您将路由function看作与第3层交换机提供的以太网交换function截然不同的function。 根据所有意图和目的,第3层交换机将两个不同的设备包装在一个机箱中。

第三层交换机中的embedded式路由器以一定的速度连接到交换机的内部交换结构,通常允许在线速或接近线速的VLAN之间路由分组。 类似于您在“路由器上”configuration的虚拟子接口,第3层交换机内部的这个embedded式路由器可以configuration虚拟接口,在每个VLAN中“出现”为“访问”连接。 而不是被称为虚拟子接口,从VLAN到三层交换机内的embedded式路由器的这些逻辑连接称为交换虚拟接口(SVI)。 实际上,三层交换机内的embedded式路由器具有一定数量的“虚拟端口”,可以“插入”交换机上的任何VLAN。

embedded式路由器与物理路由器执行相同的方式,除了它通常不具备与物理路由器相同的dynamic路由协议或访问控制列表(ACL)function(除非您已经购买了非常好的第3层开关)。 然而,embedded式路由器的优点是速度非常快,没有与插入的物理交换机端口相关的瓶颈。

在我们这里与“伙伴”租户的例子中,您可能会select获得第三层交换机,将其插入中继端口,以使来自两个客户VLAN的stream量都达到该端口,然后configuration具有IP地址和VLAN成员的SVI, “出现”在两个客户VLAN中。 一旦你这样做了,只需要调整核心路由器上的路由表和第三层交换机中的embedded式路由器,以便在租户的VLAN之间stream动的stream量由第三层交换机内部的embedded式路由器“一根棍子上的路由器”。

使用第3层交换机并不意味着互连交换机的中继端口的带宽仍然不会有瓶颈。 不过,这是与VLAN相关的问题。 VLAN与带宽问题无关。 通常,带宽问题通过获得更高速的交换机间连接或使用链路聚合协议将几个低速连接“粘合”在一起成为虚拟高速连接来解决。 除非后面3台交换机内部的embedded式路由器创build帧的所有设备本身直接插入3层交换机的端口,否则您仍然需要担心交换机之间的中继带宽。 第3层交换机不是万能的,但它通常比“棒上的路由器”更快。

dynamicVLAN

最后,在某些交换机中有一个function来提供dynamicVLAN成员关系。 而不是分配给定端口作为给定VLAN的访问端口,而是在设备连接时dynamic改变端口的configuration(访问或中继,以及哪些VLAN)。 dynamicVLAN是一个更高级的主题,但知道function存在可能会有所帮助。

不同厂商的function不尽相同,但通常您可以根据所连接设备的MAC地址,设备的802.1X身份validation状态,专有和基于标准的协议(例如CDP和LLDP)configurationdynamicVLAN成员关系,以允许IP电话“发现”语音stream量的VLAN号),分配给客户端设备的IP子网或以太网协议types。

VLAN是“虚拟局域网”。 以下是我的理解 – 我的背景主要是系统工程和pipe理,面向OO编程和多脚本。

VLAN旨在跨多个硬件设备创build隔离networking。 旧时代的传统局域网可能只存在于拥有专用于特定networking的单个硬件设备的地方。 连接到该networking设备的所有服务器/设备(交换机或集线器取决于历史时间段)通常允许在LAN之间自由通信。

VLAN的不同之处在于,您可以将多个networking设备互连,并通过将服务器组合到一个VLAN中来创build独立的networking,从而无需为单个LAN提供“专用”networking设备。 networking设备制造商中可configuration的VLAN数量和支持的服务器/设备数量会有所不同。

再次取决于供应商,我不认为所有的服务器都需要在同一个子网中才能成为同一个VLAN的一部分。 对于传统的networkingconfiguration,我相信他们(networking工程师在这里插入校正)。

使VLAN与VPN不同的是“Private”的字母“P”。 通常VLANstream量不encryption。

希望有所帮助!