VLAN学习总结(VLAN内部原理)

Linux VLAN学习总结

1 环境说明

文档后续描述的都是内核处理VLAN标签,即关闭了NETIF_F_HW_VLAN_RX/TX。 NETIF_F_HW_VLAN_RX/TX开启:由网卡驱动操作VLAN标签; NETIF_F_HW_VLAN_RX/TX关闭:由内核操作VLAN标签。

2 Linux命令行配置步骤

配置命令:

vconfig add eth1 100 // 创建虚拟子接口 vconfig add eth2 100

brctl addbr vswitch100 // 创建虚拟网桥

brctl addif vswitch100 eth1.100 // 将接口加入到虚拟网桥 brctl addif vswitch100 eth2.100

ip link set dev vswitch100 address 00:11:22:33:44:55 ip addr add 100.0.0.1/24 brd + dev vswitch100 ifconfig eth1.100 up ifconfig eth2.100 up ifconfig vswitch100 up

查看命令:

~ # brctl show vlan10

bridge name bridge id STP enabled interfaces vswitch100 8000.001122334455 no eth1.100 eth2.100

3 802.1Q帧

3.1 802.1Q帧格式

标准以太帧承载的payload为46~1500字节,由于802.1Q标签占用了4字节,因此802.1Q以太帧承载的payload长度为42~1496,即(46-4)~(1500-4)。 在插入和移除VLAN标签时,都需要重新对FCS进行校验和计算。

EtherType PRI CFI VLAN ID Trunk接口接收到帧后,读取该字段,值为0x8100表明是802.1Q标签 优先级字段,用于QoS 以太网络设置为 0,令牌环(Token Ring)网络设置为 1 标识数据帧所属的VLAN,如果VLAN ID为0,则表示是优先级帧。 VLAN ID 4095为保留ID

3.2 802.1Q帧的数据结构

Source file : linux-2.6.37\\include\\linux\\If_vlan.h

vlan_ethhdr为802.1Q帧头,其中h_vlan_encapsulated_proto是标准以太帧的typy部分。

4 802.1Q的注册

4.1 模板

Source file : linux-2.6.37\\net\\8021q\\Vlan.c

协议类型:ETH_P_8021Q 处理函数:vlan_skb_recv()

4.2 VLAN处理函数

Source file : linux-2.6.37\\net\\8021q\\Vlan_dev.c

4.3 注册

Source file : linux-2.6.37\\net\\8021q\\Vlan.c

在vlan_proto_init()中:

· 调用dev_add_pack()注册8021Q;

· 调用vlan_ioctl_set()提供用户操作接口。

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4