VLAN 学习
一. 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信息