局域网设计/虚拟局域网
虚拟局域网 (VLAN) 允许在多个逻辑局域网上共享单个物理基础设施(相同的设备,相同的布线):只有特定局域网的流量流经某些端口,只有另一个局域网的流量流经其他端口,依此类推→每个网桥为每个 VLAN 都有一个过滤数据库。[1]
与以下方面相比,由多个 VLAN 组成的链路层网络更具优势
- 网络层网络,由于移动性支持:主机在移动时可以保持在同一地址(其 MAC 地址)可访问;
- 单个物理局域网,由于
- 更大的可扩展性:广播流量被限制在较小的广播域内;
- 更大的安全性:属于 VLAN 的用户无法对其他 VLAN 执行 MAC 泛洪攻击;
- 更好的策略实施:网络管理员可以根据 VLAN 配置不同的策略;
- 从物理角度来看,完全分离的多个局域网,由于节省了更多资源和成本:网桥不会为每个局域网重复,而是由所有 VLAN 共享,网桥之间的电缆也可以传输任何 VLAN 的流量。
VLAN 应用的一个示例是校园网络:一个 VLAN 为学生保留,另一个 VLAN 为教师保留,并具有较少的限制性策略,依此类推。
数据无法在链路层跨越 VLAN 边界:一个 VLAN 中的站点无法向另一个 VLAN 中的另一个站点发送帧,因为 VLAN 具有不同的广播域。一个可能的解决方案可能是将一个 VLAN 的端口连接到另一个 VLAN 的端口,但这样就会形成一个广播域→这两个 VLAN 实际上属于同一个局域网。
因此,一个 VLAN 中的站点只能在网络层向另一个 VLAN 中的另一个站点发送数据→需要路由器才能将一个 VLAN 的端口连接到另一个 VLAN 的端口:一个 VLAN 中的站点向路由器发送一个 IP[2]数据包,然后路由器重新生成数据包的链路层报头(特别是更改 MAC 地址),并将数据包发送到另一个 VLAN 中的站点。但是,此解决方案占用路由器中的两个接口和同一网桥中的两个端口,并且需要两根电缆来连接这两个网络设备本身→单臂路由器允许通过一根电缆互连两个 VLAN,占用一个网桥端口和一个路由器接口:两个 VLAN 的流量都可以通过一根电缆和网桥端口流过。
链路层广播流量仍然无法跨越 VLAN 边界,因为路由器不会通过拆分广播域将其传播到其其他接口→一个 VLAN 中的站点想要联系另一个 VLAN 中的站点,无法通过 ARP 协议发现其 MAC 地址,但必须将其数据包发送到其 IP 地址,该地址具有不同的网络前缀,因为这两个 VLAN 必须具有不同的寻址空间。
每个网桥都提供一些端口,称为接入端口,主机可以连接到这些端口。在接入链路中,流经的是未标记帧,即没有VLAN 标签;接入端口根据其成员 VLAN 对帧进行标记。
当主机连接到接入端口时,可以通过四种方式识别其成员 VLAN
每个接入端口都关联到一个 VLAN→主机可以通过连接到相关的网桥端口来访问 VLAN。
- 优势
- 配置:不应该在主机上配置 VLAN→与设备的最大兼容性。
- 劣势
- 安全:用户可以连接到任何 VLAN→无法设置基于 VLAN 的不同策略;
- 网络层移动性:尽管用户可以连接到任何 VLAN,但他仍然无法在 VLAN 之间保持相同的 IP 地址。
每个主机都基于 MAC 地址关联到某个 VLAN。
- 劣势
- 配置:新用户应联系网络管理员以记录其设备的 MAC 地址→对于用户来说,查找其自身设备的 MAC 地址可能并不简单;
- 数据库成本:需要一个服务器以及管理人员来存储一个数据库,其中包含 MAC 地址和 VLAN 之间的绑定;
- 数据库维护:应清除不再使用的 MAC 地址对应的条目,但用户在弃用其设备时经常会忘记联系网络管理员让他删除其 MAC 地址→随着时间的推移,数据库会不断增长;
- 安全:用户可以配置虚假的 MAC 地址并访问另一个 VLAN,假装是另一个用户。
每个用户拥有一个账户,并且每个用户账户都关联到一个特定的VLAN。当用户连接到桥接端口时,用户通过802.1x标准协议插入自己的登录凭据进行身份验证,如果成功,桥接设备可以联系RADIUS服务器检查凭据并为用户分配正确的VLAN。
- 劣势
- 兼容性:身份验证直接在数据链路层由网卡执行 -> 每个设备都应该配备兼容802.1x标准的网卡;
- 配置:用户必须在自己的设备上设置一些配置参数(例如认证类型),才能访问网络。
每个用户自己关联到他想要的VLAN:主机上的操作系统标记出站帧,以便它们通过中继链路到达桥接端口时已经带有标签。
- 劣势
- 配置:用户必须手动配置自己的设备才能访问网络;
- 安全:用户可以连接到任何VLAN -> 无法设置基于VLAN的不同策略。
中继链路是可以传输不同VLAN流量的链路
在中继链路中,标记帧,即具有IEEE 802.1Q(1998)标准化的VLAN标签,流动
16 | 19 | 20 | 32 |
TPID (0x8100) | PCP | CFI | VLAN ID |
其中字段为
- 标签协议标识符 (TPID) 字段 (2 字节):它识别标记帧 (值 0x8100);
- 优先级代码点 (PCP) 字段 (3 位):它指定服务质量的用户优先级: 局域网设计/IEEE 802 局域网中的服务质量#IEEE 802.1p;
- 规范格式指示符 (CFI) 标志 (1 位):它指定 MAC 地址是否为规范格式 (值 0,例如以太网) 或不是 (值 1,例如令牌环);
- VLAN 标识符 (VID) 字段 (12 位):它标识帧的 VLAN
- 值 0:帧不属于任何 VLAN -> 用于用户只想为其流量设置优先级的情况;
- 值 1:帧属于默认 VLAN;
- 值 2 到 4094:帧属于由该值标识的 VLAN;
- 值 4095:保留。
IEEE 802.1Q 实际上并没有封装原始帧;相反,它在原始帧的源 MAC 地址和 EtherType/Length 字段之间添加了标签,使最小帧大小保持在 64 字节不变,并将最大帧大小从 1518 字节扩展到 1522 字节 -> 中继链路中不能有集线器,因为它们不支持超过 1518 字节的帧
通过中继链路将帧从一个站点传输到另一个站点的方式如下:[3]
- 源主机向接入端口发送未标记的帧;
- 当帧到达接入端口时,桥接设备会根据与端口关联的VLAN标记帧;
- 桥接设备将标记的帧发送到中继链路;
- 每个接收帧的桥接设备都会查看与标签指定的VLAN相关的过滤数据库
- 如果目标是“远程”,桥接设备会将帧传播到中继链路,同时保持其VLAN标签不变;
- 如果目标是“本地”,即可以通过与帧VLAN关联的接入端口之一到达,桥接设备会从帧中删除VLAN标签,并将未标记的帧发送到通往目标主机的接入链路。
通常,服务器需要同时被位于不同VLAN中的多个主机访问 -> 由于每个网络接口只能关联一个VLAN,因此服务器需要为每个VLAN配备一个网络接口,每个接口都通过其自己的物理链路连接到桥接设备。类似的问题也适用于单臂路由器,它需要接收和发送来自/到多个不同VLAN的流量,以允许它们互连。
虚拟网络接口允许在同一物理网卡上同时拥有多个虚拟化的逻辑网络接口,其单个物理接口仅通过一个中继物理链路连接到桥接设备:操作系统会看到系统上安装了多个网络接口,并且基于VLAN标签的网卡驱动程序会将每个帧暴露给操作系统,就好像它来自其中一个虚拟网络接口一样。
虚拟网络接口具有不同的IP地址,因为每个VLAN都有其自己的地址空间,但它们具有相同的MAC地址,等于物理网卡的MAC地址;但是这不是问题,因为MAC地址只需要在广播域(即VLAN内)内唯一。
标签堆叠(也称为“提供商桥接”或“堆叠VLAN”或“QinQ”),标准化为IEEE 802.1ad(2005),允许将多个VLAN标签插入标记帧的堆栈中,从外标签到内标签
标签堆叠可用于通过共享提供商网络传输使用VLAN的多个客户的流量:两个不同的客户可能会决定在其公司网络中使用相同的VLAN标识符 -> 提供商网络边缘的桥接设备会向传入帧添加并从传出帧中删除外部标签,这些标签区分具有相同VLAN标识符但属于不同客户的VLAN。
- 优势
- 灵活性:与定义具有更大VLAN标识符的另一种标记格式相比,标签堆叠更灵活且干扰更小;
- 简单性:与以太网隧道相比,标签堆叠更简单
- 以太网隧道:边缘桥接设备必须将帧封装到新的以太网报头中 -> 复杂操作;
- 标签堆叠:边缘桥接设备只需在标签堆栈中执行更快的推送和弹出操作;
- VLAN可扩展性:与VLAN转换相比,标签堆叠更具可扩展性
- VLAN转换:边缘桥接设备更改每个帧中的VLAN标识符,以便每个VLAN标识符在提供商网络中都是唯一的 -> 可扩展性问题:仅提供最多4094个VLAN;
- 标签堆叠:边缘桥接设备为每个客户使用一个外部VLAN标识符,而不管每个客户正在使用多少个内部VLAN标识符 -> 提供商网络最多可以服务4094个客户,每个客户都有4094个VLAN。
- 劣势
- MAC地址可扩展性:与以太网隧道相比,标签堆叠的可扩展性较差
- 标签堆叠:提供商网络内每个桥接设备中的过滤数据库都应该学习所有位于所有客户VLAN中的网络接口的MAC地址 -> 可扩展性问题:桥接设备的过滤数据库存储在大小有限的TCAM存储器中;
- 以太网隧道:提供商网络内每个桥接设备中的过滤数据库仅查看网络边缘桥接设备的MAC地址;
- 安全:客户VLAN上的广播风暴可能会影响其他客户的流量: #广播流量优化。
标准STP和RSTP不支持VLAN:生成树在整个网络中是唯一的,并且生成树算法独立于VLAN工作。一些供应商提供专有的VLAN支持功能:例如,思科提供基于STP的每VLAN生成树(PVST)和每VLAN生成树Plus(PVST+),以及基于RSTP的快速每VLAN生成树Plus(Rapid-PVST+)。
PVST允许网络中存在多个生成树,每个VLAN一个;每个树都是通过每VLAN配置生成树协议参数来确定的。特别是,每个桥的优先级应根据VLAN进行自定义,以便在不同的VLAN中区分根桥,否则所有VLAN都会产生相同的树,通过识别STP Instance字段(12位)引用的优先级值,该字段由IEEE 802.1t(2001)引入桥接标识符。
4 | 16 | 64 |
桥接优先级 | STP实例 | 桥接MAC地址 |
- 劣势
- 流量优化:即使考虑到现代网络中的高链路带宽,PVST对流量负载执行的优化也不那么显著。
- PVST优化整个网络的流量负载:如果生成树得到良好平衡,则所有链路都将被使用→不再存在同时处于活动状态但完全未使用的链路;
- PVST不会优化VLAN内部的流量负载:VLAN中的流量仍然绑定到特定的生成树→无法像在IP网络中那样选择到达目的地的最短路径;
- CPU负载:同时运行多个生成树协议实例会增加桥接CPU的负载;
- 互操作性:在同一网络中同时存在支持PVST的桥接和不支持PVST的桥接可能会导致广播风暴;
- 复杂性:网络管理员必须在同一网络中管理多个生成树→故障排除更加复杂:流量路径更难以理解,因为帧根据其所属的VLAN跨越不同的链路。
广播流量发送到所有中继链路,以及与广播帧所属VLAN关联的访问链路。
- 一个链路上的广播风暴(由一个VLAN的流量引起)可能会通过使中继链路饱和而影响其他VLAN→尽管帧在数据链路层无法从一个VLAN到另一个VLAN,但由于链路是共享的,因此即使使用VLAN,网络隔离也不完整;
- 属于特定VLAN的广播帧可以到达网络末端的桥接,该桥接上没有属于该VLAN的访问端口→该桥接中的过滤数据库将通过学习机制插入一个包含源MAC地址的无用条目。
为了减少中继链路上的广播流量并避免在过滤数据库中出现无用条目,每个桥接都需要知道在每个中继端口上要传播哪些VLAN的广播流量。
- GVRP协议:它是一个标准的、非常复杂的协议,允许桥接交换网络拓扑中VLAN的信息;
- 专有机制:它们用于代替GVRP协议,因为它们更简单,尽管它们会带来互操作性问题;
- 手动配置:网络管理员在每个桥接上显式配置要传播哪些VLAN的广播流量→VLAN是静态配置的,并且在链路故障后生成树重新收敛的情况下无法更改。
VLAN不是即插即用技术(如STP),并且家庭用户没有足够的技能来配置它们→低端桥接通常不支持VLAN,并且可能会丢弃标记帧,因为它们太大。
不同供应商的网络设备之间存在另一个不兼容的原因是在中继端口上的标记:一些桥接标记属于所有VLAN的流量,而其他桥接则保留VLAN 1的流量未标记。