VLAN 标记与网络帧基础 | AI生成和翻译
问题:VLAN 不提供加密;它们仅使用 VLAN ID 为帧打上标签以进行分段。帧是如何打标签的,以及何时打标签?什么是帧?VLAN 在哪里运行?计算机如何为它们打标签?计算机如何知道它的帧将进入某个 VLAN?
回答:
什么是帧 (Frames)?
在计算机网络中,特别是在基于 Ethernet 的局域网 (LAN) 中,数据以称为帧 (frames) 的单位传输。一个 Ethernet 帧是一个结构化的数据包,包括:
- 前导码 (Preamble) 和帧起始定界符 (SFD):用于同步。
- 目的和源 MAC 地址:用于在硬件层标识发送者和接收者。
- EtherType/长度字段:指示协议或数据的长度。
- 有效载荷/数据 (Payload/Data):实际发送的信息(如 IP 数据包)。
- 帧检查序列 (FCS):用于错误检测。
帧运行在 OSI 模型的第 2 层(数据链路层)。它们是交换 (switching) 的基本单位,并封装了如 IP 数据包等高层数据。
什么是 VLAN,它们在哪里运行?
VLAN (Virtual Local Area Networks) 是一种用于将物理网络逻辑分割成多个隔离的广播域的技术。它们主要运行在网络交换机 (network switches)(第 2 层设备)上,交换机负责实现 VLAN 配置。VLAN 由 IEEE 802.1Q 标准定义,并在数据链路层(第 2 层)运行。
- VLAN 运行的位置:
- 在受管理交换机上:交换机维护 VLAN 数据库并处理流量分段。
- 不在基础集线器 (hubs) 或非管理型交换机上,因为它们缺乏 VLAN 支持。
- 可以扩展到路由器或三层交换机 (Layer 3 switches) 以进行 VLAN 间路由 (inter-VLAN routing)。
- 默认情况下,VLAN 不在终端用户计算机上运行;计算机通过配置了特定 VLAN 的交换机端口连接到 VLAN。
VLAN 有助于提高安全性、减少广播流量并组织网络(例如,在同一物理基础设施上划分人力资源和财务等部门)。
帧是如何打标签的,以及何时打标签?
VLAN 标签 (Tagging) 为 Ethernet 帧添加一个 VLAN ID (VID),以识别它们所属的 VLAN。这是使用 IEEE 802.1Q 协议完成的,该协议在帧头的源 MAC 地址之后插入一个 4 字节的标签(称为 802.1Q 标签或 VLAN 标签)。
- 帧如何打标签:
- 标签包括:
- 标签协议标识符 (TPID):一个 2 字节字段,设置为 0x8100 以表明这是一个 802.1Q 标签。
- 标签控制信息 (TCI):一个 2 字节字段,包含:
- 优先级代码点 (PCP):3 位用于 QoS 优先级 (0-7)。
- 丢弃资格指示器 (DEI):1 位用于拥塞处理。
- VLAN ID (VID):12 位,允许 4096 个可能的 VLAN(0-4095,其中 0 和 4095 为保留值)。
- 这将帧大小从标准的 1518 字节增加到最高 1522 字节(如果支持,大号帧 jumbo frames 可以更大)。
- 对于单一 VLAN 设置,打标签是可选的,但对于多 VLAN 环境则是必不可少的。
- 标签包括:
- 何时打标签:
- 当帧需要经过 trunk link(在交换机之间或交换机与路由器之间传输多个 VLAN 流量的连接)时,会进行打标签。
- 入站 (Ingress):当一个未打标签的帧进入交换机上的 Access Port 时,交换机在内部转发或通过 Trunk 转发之前,会为其打上该端口配置的 VLAN ID 标签。
- 出站 (Egress):通过 Trunk 端口时,帧以带标签的形式发送。在 Access Port 上,标签在发送到终端设备之前会被移除。
- 除非终端设备明确支持并请求打标签(例如通过兼容 802.1Q 的软件),否则不会在连接终端设备的 Access Port 上打标签。
计算机如何为帧打标签?
计算机(如 PC 等终端主机)通常本身不为帧打标签,因为大多数标准的网络接口卡 (NIC) 和操作系统处理的是未打标签的流量。但是,如果进行了相关配置,计算机也可以为帧打标签:
- 计算机打标签的要求:
- 支持 VLAN 的 NIC:硬件必须支持 802.1Q(大多数现代 NIC 都支持)。
- 软件配置:
- 在 Windows 中:使用设备管理器在 NIC 属性中启用 VLAN 标签,或使用 PowerShell 命令如
Set-NetAdapterBinding。 - 在 Linux 中:使用
vconfig(较旧)或ip link等工具创建 VLAN 子接口(例如ip link add link eth0 name eth0.10 type vlan id 10)。 - 在 macOS 中:通过系统偏好设置或
networksetup命令。
- 在 Windows 中:使用设备管理器在 NIC 属性中启用 VLAN 标签,或使用 PowerShell 命令如
- 这在虚拟化环境(如 VMware、Hyper-V)或托管不同 VLAN 上多个虚拟机的服务器中很常见。
- 过程:
- 计算机的操作系统或应用程序在发送数据时指定 VLAN ID。
- NIC 在传输之前将 802.1Q 标签插入到帧中。
- 对于标准台式机这很少见;它更多用于 VoIP 电话或服务器等高级设置。
如果计算机不打标签,连接的交换机端口(配置为 Access Port)将根据端口的默认 VLAN 添加标签。
计算机如何知道它的帧将进入某个 VLAN?
计算机通常不会固有的“知道”VLAN,因为 VLAN 是交换机层面的抽象。相反:
- 通过交换机端口配置确定:
- Access Ports:分配给单个 VLAN。计算机发送未打标签的帧,交换机用该端口的 VLAN ID 为其打上标签。计算机并无察觉;它只看到一个标准的 Ethernet 连接。
- Trunk Ports:允许通过多个 VLAN。如果计算机连接到 Trunk 并且支持打标签,它必须用正确的 VID 为自己的帧打标签;否则,帧可能会默认为 Native VLAN(Trunk 上未打标签的 VLAN)。
- 计算机如何学习或配置:
- 通过手动配置:管理员在计算机上设置 VLAN 子接口。
- 动态协议:如带有 VLAN 选项的 DHCP,或类似 MVRP (Multiple VLAN Registration Protocol) 的协议,但这些配置很高级,在终端主机上并不常见。
- 在虚拟环境中:Hypervisors 将 VLAN 分配给虚拟 NIC。
- 对于基本操作,计算机不需要“知道”这些;网络基础设施强制执行分段。如果配置错误,计算机的流量可能会进入错误的 VLAN 或被丢弃。
总之,VLAN 标签实现了不带加密的分段,侧重于逻辑隔离。为了安全起见,应将 VLAN 与其他措施(如 ACL 或加密协议,例如 IPsec)结合使用。