一. VLAN 數據報文格式
IEEE 802.1Q標准對Ethernet幀格式進行了修改,在源MAC地址字段和協議類型字段之間加入4字節的802.1Q Tag。
VLAN幀最小幀長為64字節。
圖1 VLAN幀格式

·Type:長度為2 bytes,表示幀類型,802.1Q tag幀中Type字段取固定值0x8100,如果不支持802.1Q的設備收到802.1Q幀,則將其丟棄。
·PRI:priority字段,長度為3 bit,表示 以太網幀的優先級,取值范圍是0~7,數值越大,優先級越高。當交換機/路由器發生傳輸擁塞時,優先發送優先級高的數據幀。
·CFI:Canonical Format Indicator,長度為1bit,表示MAC地址是否是經典格式。CFI為0說明是經典格式,CFI為1表示為非經典格式。該字段用於區分以太網幀、FDDI幀和令牌環網幀,在以太網幀中,CFI取值為0
·VID:VLAN ID,長度為12 bit,取值范圍是0~4095,其中0和4095是保留值,不能給用戶使用。
·PRI:priority字段,長度為3 bit,表示 以太網幀的優先級,取值范圍是0~7,數值越大,優先級越高。當交換機/路由器發生傳輸擁塞時,優先發送優先級高的數據幀。
·CFI:Canonical Format Indicator,長度為1bit,表示MAC地址是否是經典格式。CFI為0說明是經典格式,CFI為1表示為非經典格式。該字段用於區分以太網幀、FDDI幀和令牌環網幀,在以太網幀中,CFI取值為0
·VID:VLAN ID,長度為12 bit,取值范圍是0~4095,其中0和4095是保留值,不能給用戶使用。
字段 | 長度 | 含義 |
---|---|---|
Destination address | 6字節 | 目的MAC地址。 |
Source address | 6字節 | 源MAC地址。 |
Type | 2字節 | 長度為2字節,表示幀類型。取值為0x8100時表示802.1Q Tag幀。如果不支持802.1Q的設備收到這樣的幀,會將其丟棄。 |
PRI | 3比特 | Priority,長度為3比特,表示幀的優先級,取值范圍為0~7,值越大優先級越高。用於當阻塞時,優先發送優先級高的數據包。 如果設置用戶優先級,但是沒有VLANID,則VLANID必須設置為0x000。 |
CFI | 1比特 | CFI (Canonical Format Indicator),長度為1比特,表示MAC地址是否是經典格式。CFI為0說明是標准格式,CFI為1表示為非標准格式。用於區分以太網幀、FDDI(Fiber Distributed Digital Interface)幀和令牌環網幀。在以太網中,CFI的值為0。 |
VID | 12比特 | LAN ID,長度為12比特,表示該幀所屬的VLAN。在VRP中,可配置的VLAN ID取值范圍為1~4094。0和4095協議中規定為保留的VLAN ID。 三種類型:
三個特殊的VID:
|
Length/Type | 2字節 | 指后續數據的字節長度,但不包括CRC檢驗碼。 |
Data | 42~1500字節 | 負載(可能包含填充位)。 |
CRC | 4字節 | 用於幀內后續字節差錯的循環冗余檢驗(也稱為FCS或幀檢驗序列)。 |
VLAN幀 抓包:

二. Vlan 內核源碼分析
VLAN網絡接口發出的網絡報文將由vlan_dev_hard_start_xmit函數處理
1) 所有經過橋接/路由轉發經由例:eth1.101 VLAN網絡接口發出的網絡報文將由vlan_dev_hard_start_xmit函數處理
2)通過例:eth1.101 VLAN網絡接口獲取VLAN配置信息,涉及VLAN配置VLANID、VLAN優先級
3)檢查網絡報文是否符合添加VLAN頭部信息,符合則在skb中更新VLAN頭部信息,由__vlan_hwaccel_put_tag根據vlan_tci更新skb VLAN信息