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 | 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

使用示例:

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

参考:

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

2. VLAN帧格式

3. 802.1q vlan原理

802.1q VLAN的更多相关文章

  1. vlan 以及 Linux实现的IEEE 802.1Q VLAN

    vlan 以及 Linux实现的IEEE 802.1Q VLAN Vlan的概念 VLAN技术介绍 VLANVLAN概述 以太网是一种基于CSMA/CD(Carrier Sense Multiple ...

  2. 802.1Q VLAN技术原理

    文章出处:http://hi.baidu.com/x278384/item/d56b0edfd4f56a4eddf9be79 在数据通信和宽带接入设备里,只要涉及到二层技术的,就会遇到VLAN.而且, ...

  3. 管理型交换机IEEE 802.1Q VLAN设置应用实例

    转载标注: IEEE802.1Q 我粗略理解为对交换机入口规则和出口规则设置,入口打上VID,设置从哪些口可以出去,并且是否带标签. 一 VLAN的概念 VLAN(Virtual Local Area ...

  4. 如何在centos上配置802.1Q VLAN标记,linux单网卡多vlan多网段Ip配置案例

    介绍 VLAN使将大型网络分成较小且易于管理的网络成为可能.802.1Q是所有供应商都在其网络设备中实施的标准.某些交换机能够将多个VLAN分配给单个网络端口.使用此功能,您可以将多个VLAN分配给单 ...

  5. (四)802.1Q VLAN

  6. 网络工程知识(二)VLAN的基础和配置:802.1q帧;Access、Trunk、Hybrid接口工作模式过程与配置;VLANIF的小实验

    介绍-VLAN VLAN(Virtual Local Area Network)即虚拟局域网,工作在数据链路层. 交换机将通过:接口.MAC.基于子网.协议划分(IPv4和IPv6).基于策略的方式划 ...

  7. Linux实现的IEEE 802.q VLAN

    本文转载自: http://blog.chinaunix.net/uid-20786208-id-4291059.html Technorati 标签: Linux VLAN   ---------- ...

  8. 【vlan-trunk和802.1q子接口配置】

    根据项目需求,搭建好拓扑图如下: 配置sw1的g1/0/3的/trunk,把g1/0/1和g1/0/2分别加入vlan 10 和 vlan 20 配置sw1的g1/0/3的/trunk,把g1/0/1 ...

  9. VLAN-3-VLAN Trunk:ISL和802.1Q

      (1)ISL和802.1Q概念       通过使用VLAN Trunk链路,设备可以通过一条链路发送去往多个vlan的流量.为了知道数据帧属于哪个vlan,发送方会添加原始以太网数据帧的头部,这 ...

随机推荐

  1. 《Python数据分析》-Ch01 Python 程序库入门

    Ch01 Python 程序库入门   1.1 一些简要介绍: NumPy 是一个基础性的Python库,为我们提供了常用的数值数组和函数. SciPy是Python的科学计算库,对NumPy的功能进 ...

  2. 【LeetCode】145. Binary Tree Postorder Traversal (3 solutions)

    Binary Tree Postorder Traversal Given a binary tree, return the postorder traversal of its nodes' va ...

  3. JMeter学习笔记--创建数据库测试计划

    添加线程组(并发用户):线程数(10),Rame-Up Period(0), Loop Count(3) 线程组添加JDBC请求(配置元件):Variable Name(MySQL), Databas ...

  4. Android LinearLayout的android:layout_weight属性

    本文主要介绍Android LinearLayout的android:layout_weight属性意义 android:layout_weight为大小权重,相当于在页面上显示的百分比,它的计算是根 ...

  5. System V 消息队列 - 复用消息

    消息队列中的消息结构可以由我们自由定义,具备较强的灵活性.通过消息结构可以共享一个队列,进行消息复用.通常定义一个类似如下的消息结构: #define MSGMAXDAT 1024 struct my ...

  6. Unix环境高级编程(十六)进程间通信

    进程间通信(IPC)是指能在两个进程间进行数据交换的机制.现代OS都对进程有保护机制,因此两个进程不能直接交换数据,必须通过一定机制来完成. IPC的机制的作用: (1)一个软件也能更容易跟第三方软件 ...

  7. 使用用户自定义类型作为map的key

    有时候我们想把用户自定义类型作为std::map的键值.方法一)最简单的方法就是实现该自定义类型的<操作符,代码如下:class Foo{public:    Foo(int num_)     ...

  8. python bs4 + requests4 简单爬虫

    参考链接: bs4和requests的使用:https://www.cnblogs.com/baojinjin/p/6819389.html 安装pip:https://blog.csdn.net/z ...

  9. (Apache)ab 压力测试 简单使用

    该工具在Apache安装目录的bin目录里面.所以想要这个使用这个工具,只需要下载Apache即可.在Window环境下,推荐使用 PhpStudy 工具的集成环境.就可以轻松拥有Apache.ab压 ...

  10. Token:服务端身份验证的流行方案【转】

    01- 身份认证 服务端提供资源给客户端,但是某些资源是有条件的.所以服务端要能够识别请求者的身份,然后再判断所请求的资源是否可以给请求者. token是一种身份验证的机制,初始时用户提交账号数据给服 ...