802.1q VLAN

VLAN(Virtual Local Area Network),是一种通过将局域网内的设备逻辑地而不是物理地划分成一个个网段从而实现虚拟工作组的技术。

以一个网络接口为主设备,可以创建多个虚拟网络接口,称为子接口(802.1q子接口),主设备称为主接口或父接口;每个子接口对应一个vlan id;
当主接口接收报文时,如果为802.1q报文,则根据vlan id将报文分发的对应的子接口;
当子接口需要发送报文时,子接口在报文中添加802.1q头,然后交由其主接口实际完成发送。

mac vlan是其中一个特例:当主接口接收报文时,根据报文的源mac地址将报文分发的对应的子接口;当子接口需要发送报文时,交由其主接口实际完成发送。
在openert中mac vlan的地址表是通过netifd的ubus接口添加和删除的。

一. 必要性

VLAN技术允许网络管理者将一个物理的LAN逻辑地划分成不同的广播域(或称虚拟LAN,即VLAN),每一个VLAN都包含一组有着相同需求的计算机,由于VLAN是逻辑地而不是物理地划分,所以同一个VLAN内的各个计算机无须被放置在同一个物理空间里,即这些计算机不一定属于同一个物理LAN网段。

VLAN的优势在于VLAN内部的广播和单播流量不会被转发到其它VLAN中,从而有助于控制网络流量、减少设备投资、简化网络管理、提高网络安全性。

在一个大的局域网内划分成不同的组来进行管理而不相互干扰(VLAN在DHCP广泛使用之前已经出现)。

局域网覆盖了一个广播(或组播)包能够达到的范围,即广播域

二. 使用

一个VLAN可以是某台交换机的一个端口子集,也可以包含多个交换机的端口。

映射端口到虚拟局域网的思想是,有一串互连的交换机,然后定义一个从VLAN(假定VLAN有多个)到交换机端口的映射关系。一个简单的例子是,在某个交换机,它的一些端口位于VLAN A中,另一些端口位于虚拟局域网B中。你怎样确定一个VLAN的范围呢?以下是几个简单策略:

1)该交换机始终让端口1~k位于一个虚拟局域网上,而让端口k+1~2k位于另外一个虚拟局域网上。

2)可以为交换机配置端口/VLAN之间的映射关系。

3)可以为交换机配置一张VLAN/MAC地址的映射表。

4)可以为交换机配置VLAN/IP前缀之间的映射关系。

5)可以为交换机配置一张VLAN/协议之间的映射关系表。

三.帧格式

在两个交换机之间的链路上,包可能属于VLAN1,也可能属于VLAN2。IEEE提出了一个方案,给包增加一个附加信息(称为VLAN标识,VLAN tag),以便交换机能够分清这个包应该发给哪个VLAN。但是如果站点收到一个带VLAN标识的包,它可能混淆,所以交换机必须区分哪些端口连的是交换机,哪些端口连的是站点。交换机在把带VLAN标识的包发给连到非交换机的端口时,需要先出去包中的VLAN标识。

VLAN标识占两个字节,其中3位用于表示优先级,12位用于表示VLAN的ID,1位用于表示地址是否属于规范格式。通过使用以太网类型81-00来确定存在VLAN标识。

这四个字节的802.1Q标签头包含了2个字节的标签协议标识(TPID)和2个字节的标签控制信息(TCI)

TPID(Tag ProtocolIdentifier)是IEEE定义的新的类型,表明这是一个加了802.1Q标签的帧。TPID包含了一个固定的值0x8100。

TCI是包含的是帧的控制信息,它包含了下面的一些元素:

Priority:这3 位指明帧的优先级。一共有8种优先级,0-7。IEEE 802.1Q标准使用这三位信息。

Canonical Format Indicator( CFI ):CFI值为0说明是规范格式,1为非规范格式。它被用在令牌环/源路由FDDI介质访问方法中来指示封装帧中所带地址的比特次序信息。

VLAN Identified( VLAN ID ):这是一个12位的域,指明VLAN的ID,取值范围为0~4095,一共4096个,由于0 和4095 为协议保留取值,所以VLAN ID 的取值范围为1~4094。每个支持802.1Q协议的交换机发送出来的数据包都会包含这个域,以指明自己属于哪一个VLAN。

在一个交换网络环境中,以太网的帧有两种格式:有些帧是没有加上这四个字节标志的,称为未标记的帧(ungtagged frame),有些帧加上了这四个字节的标志,称为带有标记的帧(tagged frame)。

注:在AP上配置VLAN接口后,该vlan口网段内发送的数据包带tag,直接与PC相连ping,PC可收到vlan包(AP vlan包为广播包),但PC回复的包不带tag,vlan口接收不到。但vlan倚赖的实接口可接收到包(不带tag)。

四. 配置

vlan的配置工具是vconfig。

Usage: vconfig COMMAND [OPTIONS]
Create and remove virtual ethernet devices
    add        IFACE VLAN_ID
    rem        VLAN_NAME
    set_flag    IFACE 0|1 VLAN_QOS
    set_egress_map    VLAN_NAME SKB_PRIO VLAN_QOS
    set_ingress_map    VLAN_NAME SKB_PRIO VLAN_QOS
    set_name_type    NAME_TYPE

使用示例:

1)    在eth0接口上配置两个VLAN:
vconfig add eth0 100
vconfig add eth0 200
2)    设置VLAN的REORDER_HDR参数,默认就行
vconfig set_flag eth0.100 1 1
vconfig set_flag eth0.200 1 1
3)    配置网络信息
ifconfig eth0 0.0.0.0
ifconfig eth0.100 172.16.1.8 netmask 255.255.255.0 up
ifcon    fig eth0.200 172.16.2.8 netmask 255.255.255.0 up
4)    删除VLAN
vconfig rem eth0.100
vconfig rem eth0.200

参考:

1. 网络互连:网桥、路由器、交换机和互连协议。

2. VLAN帧格式

3. 802.1q vlan原理

原文地址:https://www.cnblogs.com/embedded-linux/p/8733650.html