以太网基础知识

本文是个人学习以太网相关知识的笔记汇总,持续更新中。内容涵盖各类网络数据包的帧格式解析,以及 VLAN 相关技术原理。


一、网络包格式

1.1 协议栈层次与封装关系

网络数据包采用分层封装的方式,每一层协议在上层数据前添加自己的头部(Header),形成嵌套结构:

┌─────────────────────────────────────────────────────────────────┐
│  应用层数据 (Application Data)                                   │
├─────────────────────────────────────────────────────────────────┤
│  传输层头部 (TCP/UDP Header) + 应用层数据                        │  ← Segment
├─────────────────────────────────────────────────────────────────┤
│  网络层头部 (IPv4/IPv6 Header) + 传输层数据                      │  ← Packet
├─────────────────────────────────────────────────────────────────┤
│  链路层头部 (Ethernet Header) + 网络层数据 + FCS                 │  ← Frame
└─────────────────────────────────────────────────────────────────┘

各层对应关系如下表:

OSI 层 TCP/IP 层 协议示例 数据单元
应用层 / 表示层 / 会话层 应用层 HTTP, DNS, DHCP Message
传输层 传输层 TCP, UDP Segment / Datagram
网络层 网络层 IPv4, IPv6, ARP Packet
数据链路层 链路层 Ethernet, 802.1Q Frame
物理层 物理层 1000BASE-T, 25GbE Bit

1.2 以太网帧格式(MAC 层)

以太网帧是所有网络包的最外层封装,有两种主要标准:

Ethernet II(DIX 以太网)

这是目前最常用的以太网帧格式,EtherType ≥ 0x0600(1536)时为 Ethernet II。

 字节偏移:  0     1     2     3     4     5     6     7     8     9    10    11    12    13
           ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
           │                 Destination MAC (6 B)                 │           Source MAC (6 B)  ...
           └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
                                                                                                  
 字节偏移: 12    13    14 ...                                                    N-4  N-3  N-2  N-1
           ┌─────┬─────┬──────────────────────────────────────────────────────┬─────┬─────┬─────┬─────┐
           │  EtherType  │                  Payload (46~1500 B)               │           FCS (4 B)   │
           │   (2 B)     │                                                    │                       │
           └─────┴─────┴──────────────────────────────────────────────────────┴─────┴─────┴─────┴─────┘
字段 长度 说明
Destination MAC 6 B 目的 MAC 地址,全 FF 为广播,01:xx:xx:xx:xx:xx 为组播
Source MAC 6 B 源 MAC 地址
EtherType 2 B 上层协议类型(≥ 0x0600),见下表
Payload 46~1500 B 上层协议数据(不足 46 字节需填充 Padding)
FCS 4 B CRC32 校验,覆盖 DA/SA/Type/Payload

常见 EtherType 值:

EtherType 协议
0x0800 IPv4
0x0806 ARP
0x86DD IPv6
0x8100 802.1Q VLAN Tag
0x88A8 802.1ad QinQ(外层 VLAN)
0x8847 MPLS 单播
0x8848 MPLS 多播
0x8863 PPPoE Discovery
0x8864 PPPoE Session
0x88CC LLDP
0x0842 Wake-on-LAN

帧长度约束:以太网帧最小 64 字节(含 FCS),最大 1518 字节(含 FCS)。超过 1518 字节的帧称为 Jumbo Frame,数据中心常用 9000+ 字节(需设备支持)。


1.3 纯 MAC 帧(非 IP 协议)

ARP 帧格式

ARP(Address Resolution Protocol)用于 IPv4 地址到 MAC 地址的映射,EtherType = 0x0806。

 字节偏移:  0     1     2     3     4     5     6     7
           ┌─────────────────────┬─────────────────────┐
           │  Hardware Type (2B) │  Protocol Type (2B) │
           │  0x0001 = Ethernet  │  0x0800 = IPv4      │
           ├──────────┬──────────┼─────────────────────┤
           │ HW Len   │Proto Len │   Operation (2B)    │
           │  (1B)=6  │  (1B)=4  │  1=Request 2=Reply  │
           ├──────────┴──────────┴─────────────────────┤
           │       Sender Hardware Address (6B)         │
           │              发送方 MAC 地址               │
           ├────────────────────────────────────────────┤
           │       Sender Protocol Address (4B)         │
           │              发送方 IPv4 地址              │
           ├────────────────────────────────────────────┤
           │       Target Hardware Address (6B)         │
           │       目标 MAC(Request 时全为 0x00)       │
           ├────────────────────────────────────────────┤
           │       Target Protocol Address (4B)         │
           │              目标 IPv4 地址                │
           └────────────────────────────────────────────┘

ARP 报文总长 28 字节,加上 14 字节以太网头部共 42 字节,需填充 18 字节 Padding 才能达到最小帧长 64 字节(含 4 字节 FCS)。

LLDP 帧格式

LLDP(Link Layer Discovery Protocol)用于设备发现,EtherType = 0x88CC,目的 MAC 固定为组播地址 01:80:C2:00:00:0E。LLDP 载荷由一系列 TLV(Type-Length-Value)结构组成。


1.4 IPv4 包格式

IPv4 头部最小 20 字节(IHL=5),EtherType = 0x0800。

  Bit:  0               8              16              24             31
        ┌───────┬───────┬───────────────┬───────────────────────────────┐
  +0    │Version│  IHL  │  DSCP  │ ECN  │         Total Length          │
        │  (4b) │  (4b) │  (6b)  │ (2b) │            (16b)              │
        ├───────────────┴───────────────┼───────┬───────────────────────┤
  +4    │       Identification (16b)    │Flags  │  Fragment Offset (13b) │
        │                               │ (3b)  │                        │
        ├───────────────────────────────┴───────┴───────────────────────┤
  +8    │  Time to Live (8b)  │  Protocol (8b)  │  Header Checksum (16b) │
        ├─────────────────────┴─────────────────┴───────────────────────┤
  +12   │                   Source IP Address (32b)                      │
        ├────────────────────────────────────────────────────────────────┤
  +16   │                 Destination IP Address (32b)                   │
        ├────────────────────────────────────────────────────────────────┤
  +20   │              Options (0~40B, 可选, IHL>5 时存在)               │
        ├────────────────────────────────────────────────────────────────┤
        │                    Payload(上层协议数据)                      │
        └────────────────────────────────────────────────────────────────┘
字段 位宽 说明
Version 4 b IP 版本,IPv4 = 4
IHL 4 b 头部长度(单位:4字节),最小值 5(即 20B),最大 15(即 60B)
DSCP 6 b 差分服务代码点,用于 QoS 优先级标记
ECN 2 b 显式拥塞通知(00=不支持,10/01=支持,11=拥塞)
Total Length 16 b 整个 IP 包长度(含头部),最大 65535 B
Identification 16 b 分片标识,同一数据报的所有分片具有相同 ID
Flags 3 b bit2=保留(0), bit1=DF(禁止分片), bit0=MF(后续还有分片)
Fragment Offset 13 b 分片偏移(单位:8字节),第一个分片为 0
TTL 8 b 生存时间,每经过一个路由器减 1,为 0 时丢弃并回 ICMP
Protocol 8 b 上层协议类型,见下表
Header Checksum 16 b 仅覆盖 IP 头部的校验和(每跳 TTL 变化后需重新计算)
Source IP 32 b 源 IPv4 地址
Destination IP 32 b 目的 IPv4 地址

常见 IP Protocol 值:

Protocol(十进制) 十六进制 协议
1 0x01 ICMP
2 0x02 IGMP
6 0x06 TCP
17 0x11 UDP
41 0x29 IPv6-in-IPv4 隧道
47 0x2F GRE
50 0x32 ESP(IPsec)
51 0x33 AH(IPsec)
89 0x59 OSPF

1.5 IPv6 包格式

IPv6 头部固定 40 字节,EtherType = 0x86DD。

  Bit:  0               8              16              24             31
        ┌───────┬───────────────────────┬──────────────────────────────┐
  +0    │Version│   Traffic Class (8b)  │       Flow Label (20b)       │
        │  (4b) │                       │                              │
        ├───────┴───────────────────────┴──────────────────────────────┤
  +4    │       Payload Length (16b)        │ Next Header │  Hop Limit  │
        │                                   │    (8b)     │    (8b)     │
        ├───────────────────────────────────┴─────────────┴────────────┤
  +8    │                                                               │
  +12   │                Source IPv6 Address (128b / 16B)              │
  +16   │                                                               │
  +20   │                                                               │
        ├───────────────────────────────────────────────────────────────┤
  +24   │                                                               │
  +28   │             Destination IPv6 Address (128b / 16B)            │
  +32   │                                                               │
  +36   │                                                               │
        ├───────────────────────────────────────────────────────────────┤
  +40   │         Extension Headers(扩展头,可选,链式结构)            │
        ├───────────────────────────────────────────────────────────────┤
        │                    Payload(上层协议数据)                     │
        └───────────────────────────────────────────────────────────────┘
字段 位宽 说明
Version 4 b IP 版本,IPv6 = 6
Traffic Class 8 b 流量类别,对应 IPv4 的 DSCP(6b)+ECN(2b)
Flow Label 20 b 流标签,用于标识同一流的数据包,路由器可据此快速转发
Payload Length 16 b 载荷长度(不含 40B 固定头部,含扩展头)
Next Header 8 b 下一个头部类型(扩展头类型或上层协议号)
Hop Limit 8 b 跳数限制,对应 IPv4 的 TTL
Source Address 128 b 源 IPv6 地址(16 字节)
Destination Address 128 b 目的 IPv6 地址(16 字节)

IPv6 与 IPv4 的关键差异对比:

特性 IPv4 IPv6
地址长度 32 bit(4 B) 128 bit(16 B)
头部长度 20~60 B(可变) 40 B(固定)
头部校验和 有(每跳重算) 无(由上层负责)
分片 路由器可分片 仅源端可分片(通过扩展头)
地址解析 ARP NDP(Neighbor Discovery Protocol)
广播 有 无(用多播替代)
自动配置 DHCP SLAAC / DHCPv6
选项/扩展 Options 字段(头部内) 扩展头(链式,头部外)

IPv6 扩展头类型(Next Header 值):

Next Header 扩展头 / 协议
0 Hop-by-Hop Options(逐跳选项,每个路由器都处理)
43 Routing Header(路由头,指定路由路径)
44 Fragment Header(分片头)
50 ESP(IPsec 加密载荷)
51 AH(IPsec 认证头)
59 No Next Header(无下一头部,载荷为空)
60 Destination Options(目的选项,仅目的节点处理)
6 TCP
17 UDP
58 ICMPv6

1.6 TCP 段格式

TCP 头部最小 20 字节,IP Protocol = 0x06(6)。

  Bit:  0               8              16              24             31
        ┌───────────────────────────────┬───────────────────────────────┐
  +0    │        Source Port (16b)      │     Destination Port (16b)    │
        ├───────────────────────────────┴───────────────────────────────┤
  +4    │                    Sequence Number (32b)                      │
        ├───────────────────────────────────────────────────────────────┤
  +8    │                  Acknowledgment Number (32b)                  │
        ├───────┬───────┬───┬───┬───┬───┬───┬───┬───┬───┬──────────────┤
  +12   │DataOff│  Rsv  │CWR│ECE│URG│ACK│PSH│RST│SYN│FIN│ Window (16b) │
        │  (4b) │  (3b) │(1)│(1)│(1)│(1)│(1)│(1)│(1)│(1)│              │
        ├───────┴───────┴───┴───┴───┴───┴───┴───┴───┴───┴──────────────┤
  +16   │          Checksum (16b)           │    Urgent Pointer (16b)   │
        ├───────────────────────────────────┴───────────────────────────┤
  +20   │              Options (0~40B, 可选, DataOff>5 时存在)           │
        ├───────────────────────────────────────────────────────────────┤
        │                    Application Data(应用数据)                │
        └───────────────────────────────────────────────────────────────┘
字段 位宽 说明
Source Port 16 b 源端口号(0~65535)
Destination Port 16 b 目的端口号
Sequence Number 32 b 序列号,标识本段数据的起始字节位置
Acknowledgment Number 32 b 确认号,期望收到的下一个字节序号(ACK=1 时有效)
Data Offset 4 b 头部长度(单位:4字节),最小值 5(即 20B)
Flags 9 b 控制标志位,见下表
Window Size 16 b 接收窗口大小(字节),用于流量控制
Checksum 16 b 校验和,覆盖伪头部 + TCP 头部 + 数据
Urgent Pointer 16 b 紧急指针(URG=1 时有效)

TCP 标志位说明:

标志 含义
SYN 建立连接请求(三次握手第一步)
ACK 确认号字段有效
FIN 请求关闭连接(四次挥手)
RST 强制重置连接
PSH 立即推送数据到应用层,不等缓冲区满
URG 紧急数据,Urgent Pointer 有效
ECE ECN 回显(通知发送方网络拥塞)
CWR 拥塞窗口减小(已响应 ECN)

1.7 UDP 数据报格式

UDP 头部固定 8 字节,IP Protocol = 0x11(17)。

  Bit:  0               8              16              24             31
        ┌───────────────────────────────┬───────────────────────────────┐
  +0    │        Source Port (16b)      │     Destination Port (16b)    │
        ├───────────────────────────────┼───────────────────────────────┤
  +4    │           Length (16b)        │          Checksum (16b)       │
        ├───────────────────────────────┴───────────────────────────────┤
  +8    │                    Application Data(应用数据)                │
        └───────────────────────────────────────────────────────────────┘
字段 位宽 说明
Source Port 16 b 源端口号
Destination Port 16 b 目的端口号
Length 16 b UDP 头部 + 数据的总长度(最小 8)
Checksum 16 b 校验和(IPv4 中可选,IPv6 中必须)

TCP vs UDP 对比:

特性 TCP UDP
连接方式 面向连接(三次握手) 无连接
可靠性 可靠(重传、确认) 不可靠
顺序保证 有序 无序
流量控制 有(滑动窗口) 无
拥塞控制 有 无
头部开销 20~60 B 8 B(固定)
典型应用 HTTP, FTP, SSH, SMTP DNS, DHCP, RTP, QUIC

1.8 各类网络包完整格式汇总

下表汇总了常见网络包的层次结构与头部大小:

包类型 L2 头 L3 头 L4 头 最小帧长(含FCS)
Ethernet + IPv4 + TCP 14 B 20 B 20 B 64 B(需填充)
Ethernet + IPv4 + UDP 14 B 20 B 8 B 64 B(需填充)
Ethernet + IPv6 + TCP 14 B 40 B 20 B 78 B
Ethernet + IPv6 + UDP 14 B 40 B 8 B 66 B
Ethernet + IPv4(ICMP) 14 B 20 B 8 B 64 B(需填充)
Ethernet + IPv6(ICMPv6) 14 B 40 B 8 B 66 B
Ethernet + ARP 14 B — — 64 B(需填充)
802.1Q + IPv4 + TCP 18 B 20 B 20 B 64 B(需填充)
QinQ + IPv4 + TCP 22 B 20 B 20 B 64 B(需填充)

格式一:Ethernet + IPv4 + TCP

┌──────────────────────────────────────────────────────────────────┐
│  Ethernet Header (14 B)                                          │
│  DA(6B) | SA(6B) | EtherType=0x0800(2B)                         │
├──────────────────────────────────────────────────────────────────┤
│  IPv4 Header (20 B 起)                                           │
│  Ver=4 | IHL | DSCP | ECN | TotalLen | ID | Flags | FragOff     │
│  TTL | Proto=0x06 | HdrCksum | SrcIP(4B) | DstIP(4B)            │
├──────────────────────────────────────────────────────────────────┤
│  TCP Header (20 B 起)                                            │
│  SrcPort(2B) | DstPort(2B) | SeqNum(4B) | AckNum(4B)            │
│  DataOff | Flags | Window | Checksum | UrgPtr                    │
├──────────────────────────────────────────────────────────────────┤
│  Application Data(可变长度)                                     │
├──────────────────────────────────────────────────────────────────┤
│  FCS (4 B)                                                       │
└──────────────────────────────────────────────────────────────────┘

格式二:Ethernet + IPv4 + UDP

┌──────────────────────────────────────────────────────────────────┐
│  Ethernet Header (14 B)                                          │
│  DA(6B) | SA(6B) | EtherType=0x0800(2B)                         │
├──────────────────────────────────────────────────────────────────┤
│  IPv4 Header (20 B 起)                                           │
│  Ver=4 | IHL | DSCP | ECN | TotalLen | ID | Flags | FragOff     │
│  TTL | Proto=0x11 | HdrCksum | SrcIP(4B) | DstIP(4B)            │
├──────────────────────────────────────────────────────────────────┤
│  UDP Header (8 B, 固定)                                          │
│  SrcPort(2B) | DstPort(2B) | Length(2B) | Checksum(2B)          │
├──────────────────────────────────────────────────────────────────┤
│  Application Data(可变长度)                                     │
├──────────────────────────────────────────────────────────────────┤
│  FCS (4 B)                                                       │
└──────────────────────────────────────────────────────────────────┘

格式三:Ethernet + IPv6 + TCP

┌──────────────────────────────────────────────────────────────────┐
│  Ethernet Header (14 B)                                          │
│  DA(6B) | SA(6B) | EtherType=0x86DD(2B)                         │
├──────────────────────────────────────────────────────────────────┤
│  IPv6 Header (40 B, 固定)                                        │
│  Ver=6 | TrafficClass(8b) | FlowLabel(20b) | PayloadLen(16b)     │
│  NextHdr=0x06 | HopLimit | SrcIPv6(16B) | DstIPv6(16B)          │
├──────────────────────────────────────────────────────────────────┤
│  TCP Header (20 B 起)                                            │
│  SrcPort(2B) | DstPort(2B) | SeqNum(4B) | AckNum(4B)            │
│  DataOff | Flags | Window | Checksum | UrgPtr                    │
├──────────────────────────────────────────────────────────────────┤
│  Application Data(可变长度)                                     │
├──────────────────────────────────────────────────────────────────┤
│  FCS (4 B)                                                       │
└──────────────────────────────────────────────────────────────────┘

格式四:Ethernet + IPv6 + UDP

┌──────────────────────────────────────────────────────────────────┐
│  Ethernet Header (14 B)                                          │
│  DA(6B) | SA(6B) | EtherType=0x86DD(2B)                         │
├──────────────────────────────────────────────────────────────────┤
│  IPv6 Header (40 B, 固定)                                        │
│  Ver=6 | TrafficClass(8b) | FlowLabel(20b) | PayloadLen(16b)     │
│  NextHdr=0x11 | HopLimit | SrcIPv6(16B) | DstIPv6(16B)          │
├──────────────────────────────────────────────────────────────────┤
│  UDP Header (8 B, 固定)                                          │
│  SrcPort(2B) | DstPort(2B) | Length(2B) | Checksum(2B)          │
├──────────────────────────────────────────────────────────────────┤
│  Application Data(可变长度)                                     │
├──────────────────────────────────────────────────────────────────┤
│  FCS (4 B)                                                       │
└──────────────────────────────────────────────────────────────────┘

格式五:Ethernet + ARP(纯 MAC,非 IP)

┌──────────────────────────────────────────────────────────────────┐
│  Ethernet Header (14 B)                                          │
│  DA=FF:FF:FF:FF:FF:FF(6B) | SA(6B) | EtherType=0x0806(2B)       │
├──────────────────────────────────────────────────────────────────┤
│  ARP Payload (28 B)                                              │
│  HWType(2B) | ProtoType(2B) | HWLen(1B) | ProtoLen(1B)          │
│  Operation(2B) | SenderMAC(6B) | SenderIP(4B)                   │
│  TargetMAC(6B) | TargetIP(4B)                                    │
├──────────────────────────────────────────────────────────────────┤
│  Padding (18 B) + FCS (4 B)                                      │
└──────────────────────────────────────────────────────────────────┘
  总长度:14 + 28 + 18 + 4 = 64 B(最小帧)

格式六:802.1Q VLAN Tagged 帧(单层 VLAN)

在 Ethernet Header 中插入 4 字节 VLAN Tag,EtherType 变为 0x8100:

┌──────────────────────────────────────────────────────────────────┐
│  DA (6B) | SA (6B)                                               │
├──────────────────────────────────────────────────────────────────┤
│  TPID = 0x8100 (2B) │  TCI: PCP(3b)|DEI(1b)|VID(12b)  (2B)     │
│  ← VLAN Tag (4B) ──────────────────────────────────────────────→ │
├──────────────────────────────────────────────────────────────────┤
│  Inner EtherType (2B, 如 0x0800/0x86DD)                          │
├──────────────────────────────────────────────────────────────────┤
│  Payload (42~1500 B)                                             │
├──────────────────────────────────────────────────────────────────┤
│  FCS (4 B)                                                       │
└──────────────────────────────────────────────────────────────────┘
  总头部:6+6+4+2 = 18 B(比普通以太网帧多 4 字节)

格式七:QinQ 双层 VLAN Tagged 帧

┌──────────────────────────────────────────────────────────────────┐
│  DA (6B) | SA (6B)                                               │
├──────────────────────────────────────────────────────────────────┤
│  Outer TPID = 0x88A8 (2B) │  Outer TCI: PCP|DEI|VID (2B)        │
│  ← Outer VLAN Tag (4B) ──────────────────────────────────────── │
├──────────────────────────────────────────────────────────────────┤
│  Inner TPID = 0x8100 (2B) │  Inner TCI: PCP|DEI|VID (2B)        │
│  ← Inner VLAN Tag (4B) ──────────────────────────────────────── │
├──────────────────────────────────────────────────────────────────┤
│  Inner EtherType (2B, 如 0x0800)                                 │
├──────────────────────────────────────────────────────────────────┤
│  Payload (38~1500 B)                                             │
├──────────────────────────────────────────────────────────────────┤
│  FCS (4 B)                                                       │
└──────────────────────────────────────────────────────────────────┘
  总头部:6+6+4+4+2 = 22 B(比普通以太网帧多 8 字节)

二、VLAN 相关知识

2.1 VLAN 基本概念

VLAN(Virtual Local Area Network,虚拟局域网)是一种将物理网络在逻辑上划分为多个独立广播域的技术。

为什么需要 VLAN?

问题 VLAN 解决方案
广播风暴:大型网络中广播包泛滥 将网络划分为多个广播域,广播不跨 VLAN
安全隔离:不同部门需要网络隔离 不同 VLAN 的设备默认无法直接通信
灵活组网:物理位置不同的设备需逻辑分组 跨交换机的设备可属于同一 VLAN
资源利用:减少不必要的广播流量 缩小广播域,提升网络效率

VLAN 的核心特性:


2.2 802.1Q VLAN 标签格式

IEEE 802.1Q 是 VLAN 的国际标准,定义了在以太网帧中插入 4 字节 VLAN Tag 的方式。

  Bit:  0               8              16              24             31
        ┌───────────────────────────────┬───┬───┬───────────────────────┐
        │    TPID (Tag Protocol ID)     │PCP│DEI│       VID (12b)       │
        │         (16b) = 0x8100        │(3b│(1b│    VLAN ID: 0~4095    │
        └───────────────────────────────┴───┴───┴───────────────────────┘
        ←──────────────── TCI (Tag Control Information, 16b) ──────────→
        ←──────────────────────── VLAN Tag (32b / 4B) ─────────────────→
字段 位宽 说明
TPID 16 b Tag Protocol Identifier,固定为 0x8100(802.1Q)或 0x88A8(QinQ 外层)
PCP 3 b Priority Code Point,802.1p 优先级,0~7,值越大优先级越高
DEI 1 b Drop Eligible Indicator,拥塞时优先丢弃标记(原称 CFI)
VID 12 b VLAN Identifier,VLAN 编号,范围 0~4095

VID 特殊值:

VID 含义
0 不携带 VLAN 信息,仅携带 PCP 优先级(Priority Tagged Frame)
1 默认 VLAN(Default VLAN),通常为管理 VLAN
4095 (0xFFF) 保留,不可用于实际 VLAN
2~4094 可用 VLAN 范围

PCP 优先级对应关系(802.1p):

PCP 值 优先级名称 典型用途
7 Network Control 网络控制协议(最高)
6 Internetwork Control 路由协议
5 Critical 语音
4 Video 视频会议
3 Excellent Effort 关键业务数据
2 Best Effort+ —
1 Background 后台流量(最低)
0 Best Effort 默认(普通数据)

2.3 VLAN 端口类型

交换机端口根据 VLAN 处理方式分为三种类型:

Access 端口(接入端口)

  终端设备                    交换机
  ┌──────┐  无 Tag 帧         ┌──────────────────────┐
  │  PC  │ ─────────────────→ │ Access Port (VLAN 10) │ → 内部带 Tag=10 转发
  │      │ ←───────────────── │                       │ ← 剥除 Tag 后发出
  └──────┘  无 Tag 帧         └──────────────────────┘

Trunk 端口(干道端口)

  交换机 A                                    交换机 B
  ┌──────────────┐  带 Tag 帧(多 VLAN)      ┌──────────────┐
  │  Trunk Port  │ ─────────────────────────→ │  Trunk Port  │
  │              │ ←───────────────────────── │              │
  └──────────────┘                            └──────────────┘

Hybrid 端口(混合端口)

三种端口类型对比:

特性 Access Trunk Hybrid
所属 VLAN 数量 1 个 多个 多个
入帧处理 打 Tag 保留/打 Tag 灵活配置
出帧处理 剥 Tag 保留 Tag(Native 除外) 灵活配置
典型连接对象 终端设备 交换机/路由器 灵活

2.4 VLAN 的工作流程

以一个典型的跨交换机 VLAN 通信为例:

  PC-A (VLAN 10)          SW-1                SW-2          PC-B (VLAN 10)
  ┌──────┐               ┌──────────────────────────────────────────────┐
  │      │ ──无Tag帧──→  │Access(V10)  Trunk  ──带Tag(10)帧──  Access(V10)│ ──无Tag帧──→ │      │
  │      │ ←─无Tag帧──   │            Port                              │ ←─无Tag帧──  │      │
  └──────┘               └──────────────────────────────────────────────┘               └──────┘

帧处理步骤:

  1. PC-A 发出无 Tag 的以太网帧
  2. SW-1 的 Access 端口(VLAN 10)收到帧,打上 Tag(VID=10)
  3. SW-1 查找 MAC 地址表,从 Trunk 端口转发,保留 Tag
  4. SW-2 的 Trunk 端口收到带 Tag 帧,检查 VID=10 在允许列表中,继续转发
  5. SW-2 查找 MAC 地址表,从 Access 端口(VLAN 10)转发,剥除 Tag
  6. PC-B 收到无 Tag 的以太网帧

2.5 VLAN 间路由

不同 VLAN 之间默认无法通信,需要三层设备进行路由。常见方案:

方案一:单臂路由(Router-on-a-Stick)

路由器通过一个物理接口连接交换机,接口上配置多个子接口,每个子接口对应一个 VLAN。

                    路由器
                  ┌────────┐
                  │ eth0.10│ ← 子接口,VLAN 10 网关
                  │ eth0.20│ ← 子接口,VLAN 20 网关
                  └────┬───┘
                       │ Trunk 链路
                  ┌────┴───────────────────┐
                  │        交换机           │
                  │  Access(V10) Access(V20)│
                  └────────────────────────┘
                       │              │
                    PC-A(V10)      PC-B(V20)

方案二:三层交换机(SVI 接口)

三层交换机为每个 VLAN 创建 SVI(Switch Virtual Interface)虚拟接口,作为该 VLAN 的网关,路由在交换机内部完成,性能更高。

  ┌──────────────────────────────────────────┐
  │              三层交换机                   │
  │  SVI VLAN 10: 192.168.10.1/24            │
  │  SVI VLAN 20: 192.168.20.1/24            │
  │                                          │
  │  Access(V10)          Access(V20)        │
  └──────────────────────────────────────────┘
         │                      │
      PC-A                   PC-B
  192.168.10.2            192.168.20.2

2.6 QinQ(双层 VLAN / 802.1ad)

QinQ(IEEE 802.1ad)在原有 802.1Q Tag 的基础上再封装一层外层 Tag,实现 VLAN 的嵌套。

应用场景:运营商网络中,为不同客户的 VLAN 流量提供隔离和透传。

  客户网络 A (VLAN 10~20)          运营商网络              客户网络 A (VLAN 10~20)
  ┌──────────────────┐           ┌──────────────┐           ┌──────────────────┐
  │  内层 Tag: 0x8100│ ────────→ │外层 Tag:0x88A8│ ────────→ │  内层 Tag: 0x8100│
  │  VID = 10        │           │VID = 100(客户A│           │  VID = 10        │
  └──────────────────┘           └──────────────┘           └──────────────────┘

QinQ 帧结构:

字段 值 说明
DA — 目的 MAC
SA — 源 MAC
Outer TPID 0x88A8 外层 VLAN Tag 标识(运营商 VLAN)
Outer TCI PCP|DEI|VID 外层 VLAN ID(运营商分配)
Inner TPID 0x8100 内层 VLAN Tag 标识(客户 VLAN)
Inner TCI PCP|DEI|VID 内层 VLAN ID(客户自定义)
EtherType 0x0800 等 上层协议
Payload — 数据
FCS — CRC32

注意:QinQ 使得最大帧长从 1518 B 增加到 1522 B(多 4 字节外层 Tag),网络设备需支持 QinQ 帧才能正确处理。


2.7 VLAN 相关协议汇总

协议 标准 说明
802.1Q IEEE 单层 VLAN 标签,TPID=0x8100
802.1ad IEEE QinQ 双层 VLAN,外层 TPID=0x88A8
802.1p IEEE VLAN Tag 中的 PCP 优先级(已并入 802.1Q)
VTP Cisco 私有 VLAN Trunking Protocol,自动同步 VLAN 配置
GVRP IEEE 802.1Q 动态 VLAN 注册协议
MVRP IEEE 802.1ak GVRP 的继任者,基于 MRP 框架
PVLAN — Private VLAN,在同一 VLAN 内进一步隔离端口

📝 持续更新:本文将持续补充更多网络数据平面相关知识,包括 MPLS、隧道封装、QoS 标记、组播包格式等内容。

Back to Archive
WeChat QR Code

Scan to connect