VLAN

 VLAN技术要点主要有两点:

1.支持VLAN的交换机的内部交换原理;

2.设备之间(交换机之间,交换机与路由器之间,交换机与主机之间)交互时,VLAN TAG的添加和移除。

VLAN通信主要涉及交换机、路由器、PC这三种设备:

  • PC:大部分的PC(专用的,或用于测试的除外)是工作在应用层的,缺省情况下是不支持(其实也不需要)VLAN TAG的。也就是说,PC发出的都是UNTAGED数据帧。
  • Router:路由器是支持VLAN TAG的。也就是说,路由器可以发出TAGED数据帧,也可以发出UNTAGED数据帧。需要说明的是,路由器是处理数据包的三层信息的,对于二层信息(包括VLAN信息),路由器只是检查其有效性,之后将其剥离。这个过程就是我们常说的‘终结’,也就是说,路由器会终结掉报文的VLAN信息的。
  • Switch:以太网交换机。VLAN技术就是主要针对于交换机提出的,所以,在讨论VLAN概念时都是立足于交换机来讨论。很显然,交换机既支持收发TAGED数据帧,也支持收发UNTAGED数据帧。从严格意义上讲,引入VLAN后,交换机的行为不再是‘透明传输’,因为数据帧经过交换机后可能发生了变化。

典型配置
交换机连接不同典型设备时的常用配置。
1). 连接PC
  在通常情况下,PC只支持收发UNTAG的数据帧,所以,连接PC的端口只需要加入一个VLAN,而且,在该VLAN中的属性为UNTAG。
2). 连接Router
  路由器既支持收发TAG数据帧,也支持收发UNTAG数据帧。通常情况下,不同的VLAN数据帧都能通过该端口与路由器互通。所以连接路由器的端口可以属于多个VLAN,而且,只能在一个VLAN中的属性是UNTAG的,在其他的VLAN中都是TAG的。
3). 连接Switch
  也就是交换机的级联。通常情况下是不同性能的交换机进行级联。这种情况和连接路由器的情况基本相同。

交换机收发数据帧的处理总结
分几种情况讨论交换机的接收和发送处理:接收端口和发送端口在VLAN中属性;收到的数据帧是TAG的还是UNTAG的。
1). 端口接收到数据帧
  a). 如果是TAG的数据帧,检查该接收端口是否在该VLAN(数据帧中所携带的VLAN TAG)中
   - 接收端口在该VLAN中,则在该VLAN中根据交换原理(即,'源MAC学习,目的MAC转发'的原理)交换该数据包
   - 接收端口不在该VLAN中,丢弃该数据帧
 b). 如果是UNTAG的数据帧,检查该接收端口是否在某个VLAN中的属性是UNTAG
   - 接收端口在某个VLAN中的属性是UNTAG的,则在该VLAN中根据交换原理交换该数据包
   - 接收端口在任何VLAN中的属性都不是UNTAG的,丢弃该数据包
注:根据这个原理可知,一个端口最多在一个VLAN中的属性是UNTAG的,否则,收到一个UNTAG的数据帧之后,就无法确定在哪个VLAN中进行交换。

2). 端口发送数据帧
 a).检查该端口在该VLAN(就是交换该数据帧的VLAN)中的属性
    - 该端口在该VLAN种的属性是TAG的,发送的数据帧为TAG的数据帧
    - 该端口在该VLAN种的属性是UNTAG的,发送的数据帧为UNTAG的数据帧
注:由于数据已经被交换到该端口,说明该端口肯定在该VLAN里。

PVID

  PVID为Port-base Vlan ID,也就是端口的虚拟局域网ID号,关系到端口收发数据帧时的VLAN TAG 标记。

  所有能感知VLAN的交换机,报文在交换机内部转发过程中都是带Tag的。在交给交换芯片处理之前,或者交换芯片交给端口时会根据端口的设置添加或去掉Tag。

  如果没有进行配置,默认所有的端口都处于Access模式。一般来说,对端口来说与VLAN相关的有三个属性,PVID、Tag Vlan、Untag Vlan。PVID有且只有一个,Tag Vlan和Untag Vlan可能有一个,多个,也可以没有,但两个至少其中一个有一个。PVID的作用是:如果此端口收到一个Untag的报文,则交换机会根据PVID的值给此报文打上等于PVID的Tag,然后交给交换芯片处理;如果交换芯片要将一个报文从此端口发送,发现此报文的Tag值与PVID相同,则会将Tag去掉,然后从此端口发送出去。Tag Vlan和Untag Vlan主要是用于报文发送的处理,如果交换芯片要将报文从此端口发送,发现报文的Tag在此端口的Tag Vlan中,且不等于PVID,则此报文将以Tag的形式发送出去,如果在Untag Vlan中,则以Untag形式发出去。如果报文的Tag既不在Tag Vlan中,也不在Untag Vlan中,则只有一种可能,交换芯片出毛病了。这就是交换机处理Vlan Tag的基本原则了。

端口

Access端口负责接终端设备,它收到一个帧的时候,如果这个帧没有标记它就用自己的pvid给他打上标记,它在发出一个帧时如果VID=PVID就去掉标记以保证传送给终端设备的帧没有被变动过,pvid是在划分vlan时候每个端口都有的属性,默认情况下思科交换机中每个端口初始pvid是1,表示他是vlan1的成员们如果你给他划分了其他VLAN那么PVID相应会发生更改ACCESS端口的特点是 只允许符合PVID的流量通过。

Trunk的意思是,它是一条中继链路,允许各种VLAN通过。它的规则和Access差不多,当收到一个没有tag的标记的时候就用自己的pvid给他标记,当发送一个帧时候如果vid=pvid则去掉pvid,与Access不同的是,Trunk有一个属于自己的本征VLAN,用来发送一些cdp,bpdu等交换机间联系的数据或者管理流量,从交换机自身产生的帧在发出去的时候是不会带标记的,因为VID=pvid所以标记被去掉,而对端接收到没有标记的帧时候就会用自身本征VLAN的信息给他加上标记,然后查看交换表如果发现目的地址是自己则去掉标记,如果发现目的mac地址不是自己则继续转发给其他Trunk同时去掉标记(因为一个交换机只有一个本征VLAN所有pvid=vid去掉标记)

Hybrid是Access与Trunk的混合模式,它允许VID=pvid。Hybrid与Trunk一样,在该端口上可以传送多个vlan的包,一般用于交换机与交换机之间,或者交换机与服务器之间的链接。如果收到的数据包不带vlan,则加上pvid进行转发;如果收到的数据包带vlan,则判断该端口是否允许该vlan进入,如果可以则进行转发,否则丢弃。

802.1Q帧格式

现在使用最广泛的VLAN协议标准是 IEEE 802.1Q,许多厂家的交换机/路由器产品都支持IEEE 802.1Q标准。

802.1Q Tag的长度是4 bytes,它位于以太网帧中源MAC地址和长度/类型之间。802.1Q Tag包含4个字段。

  • 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是保留值,不能给用户使用。

VLAN的更多相关文章

  1. Configure a VLAN on top of a team with NetworkManager (nmcli) in RHEL7

    SOLUTION VERIFIED September 13 2016 KB1248793 Environment Red Hat Enterprise Linux 7 NetworkManager ...

  2. Configure a bridge interface over a VLAN tagged bonded interface

    SOLUTION VERIFIED February 5 2014 KB340153 Environment Red Hat Enterprise Linux 6 (All Versions) Red ...

  3. Create a bridge using a tagged vlan (8021.q) interface

    SOLUTION VERIFIED April 27 2013 KB26727 Environment Red Hat Enterprise Linux 5 Red Hat Enterprise Li ...

  4. Configure a VLAN (on top of a bond) with NetworkManager (nmcli) in RHEL7

    not on top of a bond Environment Red Hat Enterprise Linux 7 NetworkManager Issue Need an 802.1q VLAN ...

  5. Set up VLAN (802.1q) tagging on a network interface?

    SOLUTION VERIFIED October 13 2015 KB39674 KB741413 environment Red Hat Enterprise Linux 4 Red Hat En ...

  6. Python黑帽编程 3.4 跨越VLAN

    Python黑帽编程 3.4 跨域VLAN VLAN(Virtual Local Area Network),是基于以太网交互技术构建的虚拟网络,既可以将同一物理网络划分成多个VALN,也可以跨越物理 ...

  7. CISCO VLAN ACL

    对于cisco VLAN ACL 首先得定义 standard ACL或 extented ACL用于抓取流量 注意这里的抓取流量不是最终的对流量的操作,而是决定什么样的流量用VLAN ACL 来处理 ...

  8. 创建第二个 vlan network "vlan101" - 每天5分钟玩转 OpenStack(96)

    前面我们创建了 vlan100,并部署了 instance,今天将继续创建第二个 vlan network "vlan101". subnet IP 地址为 172.16.101. ...

  9. 创建第一个 vlan network "vlan100" - 每天5分钟玩转 OpenStack(94)

    上一节我们在 ML2 配置中 enable 了 vlan network,今天将创建 vlan100 并讨论底层网络变化. 打开菜单 Admin -> Networks,点击 “Create N ...

  10. 在 ML2 中配置 Vlan Network- 每天5分钟玩转 OpenStack(93)

    上一节我们学习了 Neutron Vlan Network 的原理,今天讨论如何在 ML2 配置中 enable 它. 首先在 /etc/neutron/plugins/ml2/ml2_conf.in ...

随机推荐

  1. [转]javascript 快速隐藏/显示万行表格列的方法

    原文地址:javascript 快速隐藏/显示万行表格列的方法 隐藏表格列,最常见的是如下方式: td.style.display = "none"; 这种方式的效率极低.例如,隐 ...

  2. Sublime Text3 常用快捷键

    1. 更改变量名的几种方法 a.选中变量,ctrl+d 一个个选择 b.选中变量,alt+F3   2.查找打开过的文件:Ctrl+P,然后输入最近的文件名就可以即时预览到文件内容. 3.ctrl+r ...

  3. Visual Studio中编写C程序

    相信很多科班出身的程序猿和我一样,第一个接触到的编程语言是C语言,第一个写的程序是“Hello World!”. 对于一个.Net程序猿,VS肯定是个非常熟悉的工具,但是如何使用VS编写一个C语言程序 ...

  4. php递归遍历目录计算其大小(文件包括目录和普通文件)

    <?php function countdir($path){ $size = 0; //size = 0; 跟 size = null; 怎么结果不一样 $path = rtrim($path ...

  5. linux环境下配置java WEB项目运行环境,jdk8+tomcat8+mysql5.7.11 新手向

    一:安装jdk 1.下载jdk  在oracle下载东西的时候因为oracle的一些验证机制,所以需要在链接前面添加一些参数 wget --no-check-certificate --no-cook ...

  6. RDIFramework.NET V2.9版本多语言的实现

    RDIFramework.NET V2.9版本多语言的实现 现在是国际化时代,软件也不能落后.一个公司里很可能会有老外,也可能有台湾的朋友,他们用软件的习惯都不一样,若同样一个软件同时能适应多种语言文 ...

  7. grunt安装、配置、在webstrom中使用

    1.全局范围安装 Grunt命令行(CLI) npm install -g grunt-cli Grunt CLI的任务很简单:调用与Gruntfile在同一目录中 Grunt.这样带来的好处是,允许 ...

  8. 非空二叉树的一个有趣的性质:n0 = n2 + 1

    对任何非空二叉树T,若n0 表示叶结点的个数.n2 表示度为2 的非叶结点的个数,那么两者满足关系n0 = n2 + 1. 这个性质很有意思,下面我们来证明它. 证明:首先,假设该二叉树有N 个节点, ...

  9. cookie的三种操作方法

    1,jquery.cookie.js 这一篇文章已经写的很详细了: http://www.cnblogs.com/afuge/archive/2013/07/03/3169048.html 2,原生j ...

  10. background-clip,background-origin

    开门见山,简单来说 background-origin定义了background的绘制区域(就是从什么地方开始绘制),三个属性 padding-box 背景图像相对于内边距框来绘制border-box ...