IEEE 802.1Q封装的VLAN数据帧格式

一. 前言

        VLAN(Virtual Locl Area Network),中文称为虚拟局域网,VLAN是将不同的局域网划出来的方式。一般的应用在交换机和路由器上。在路由器的主控芯片上,通常会集成交换芯片,例如通信行业常用MT76xx系列。通过配置交换芯片,可以将交换芯片不同的端口配置为不同VLAN ID,并且配合vconfig命令,可以将交换芯片的端口划分到不同的局域网。

二. VLAN数据帧格式

非VLAN数据帧格式 (untagged)

VLAN数据帧 (tagged)

        我们知道,普通的以太网二层包是由6 Byte的目的MAC,6 Byte的源MAC以及2 Byte的三层的协议类型号。但是VLAN数据帧是在6 Byte的目的MAC和6 Byte的源MAC后添加4 Byte的VLAN标签字段,标识这是一个带VLAN标签的包。下面解析VLAN标签四个字段的含义:

TPID :2 Byte,成为Tag Protocol Identifier(标签协议标识符),表示数据帧的类型。取值为 0x8100表示该帧是IEEE 802.1Q的VLAN数据帧。

PRI :Priority,表示数据帧的802.1p优先级。取值范围为0-7,值越大优先级越高,当交换机拥塞时,优先发送优先级高的数据帧。

CFI :Canonical Format Indicator(标准格式指示位),表示MAC地址在不同的传输介质中是否以标准格式封装,用于兼容以太网和令牌环网。1 - 以非标准格式封装,在以太网中,CFI为0。

VID :VLAN ID,数据帧所属的VLAN的编号,VLAN ID取值范围为0 - 4095。因为0和4095为协议保留值,所以VLAN ID的有效范围是1 - 4094。

        PRI,CFI和VID统称为标签控制信息(Tag Control Infomation)。

三. C语言数据结构表示

struct vlan_ethhdr 结构体

struct vlan_ethhdr {
	unsigned char	h_dest[ETH_ALEN];
	unsigned char	h_source[ETH_ALEN];
	__be16		h_vlan_proto;
	__be16		h_vlan_TCI;
	__be16		h_vlan_encapsulated_proto;
};

        本结构体来自Linux内核的include/linux/if_vlan.h,ETH_ALEN宏的值为6。

h_dest :目的MAC地址。

h_source :源MAC地址。

h_vlan_proto :TPID,802.1Q取值为0x8100。

h_vlan_TCI :PRI,CFI,VID三个值的组合。

h_vlan_encapsulated_proto :三层的协议号。

四. 总结

        本文主要介绍了VLAN数据包和普通数据包的区别,以及介绍了VLAN数据包的VLAN tag字段的作用。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值