802.1Q VLAN技术原理
文章出处:http://hi.baidu.com/x278384/item/d56b0edfd4f56a4eddf9be79
在数据通信和宽带接入设备里,只要涉及到二层技术的,就会遇到VLAN。而且,通常情况下,VLAN在这些设备中是基本功能。所以不管是刚迈进这个行业的 新生,还是已经在这个行业打拼了很多年的前辈,都要熟悉这个技术。在论坛上经常看到讨论各种各样的关于VLAN的问题,在工作中也经常被问起关于VLAN 的这样或那样的问题,所以,有了想写一点东西的冲动。
大部分童鞋接触交换这门技术都是从思科技术开始的,讨论的时候也脱离不了思科的影子。值得说明的是,VLAN是一种标准技术,思科在实现VLAN的时候加
入了自己的专有名词,这些名词可能不是通用的,尽管它们已经深深印在各位童鞋们的脑海里。本文的描述是从基本原理开始的,有些说法会和思科技术有些出入,
当然,也会讲到思科交换中的VLAN。
1. 以太网交换原理
VLAN的概念是基于以太网交换的,所以,为了保持连贯性,还是先从交换原理讲起。不过,这里没有长篇累牍的举例和配置,都是一些最基本的原理。
本节所说的以太网交换原理,是针对‘传统’的以太网交换机来说的。所谓‘传统’,是指不支持VLAN。
简单的讲,以太网交换原理可以概括为 ‘源地址学习,目的地址转发’。考虑到IP层也涉及到地址问题,为了避免混淆,可以修改为
‘源MAC学习,目的MAC转发’。从语文的语法角度来讲,可能还有些问题,就再修改一下
‘根据源MAC进行学习,根据目的MAC进行转发’。总之,根据个人习惯了。本人比较喜欢 ‘源MAC学习,目的MAC转发’的口诀。
稍微解释一下。
所谓的‘源MAC学习’,是指交换机根据收到的以太网帧的帧头中的源MAC地址来建立自己的MAC地址表,‘学习’是业内的习惯说法,就如同在淘宝上买东西都叫‘宝贝’一样。
所谓的‘目的MAC转发’,是指交换机根据收到的以太网帧的帧头中的目的MAC地址和本地的MAC地址表来决定如何转发,确定的说,是如何交换。
这个过程大家应该是耳熟能详了。但为了与后面的VLAN描述对比方便,这里还是简单的举个例子。
Figure 1-1:
|-------------------------------|
| SW1 (Ethernet Switch) |
|-------------------------------|
| |
|port1 |port 2
| |
|-------| |-------|
| PC1| | PC2|
|-------| |-------|
简单描述一下PC1 ping PC2的过程:(这里假设,PC1和PC2位于同一个IP网段,IP地址分别为IP_PC1和IP_PC2,MAC地址分别为MAC_PC1和MAC_PC2)
1). PC1首先发送ARP请求,请求PC2的MAC。目的MAC=FF:FF:FF:FF:FF:FF(广播);源MAC=MAC_PC1。
SW1收到该广播数据帧后,根据帧头中的源MAC地址,首先学习到了PC1的MAC,建立MAC地址表如下:
MAC地址 端口
MAC_PC1 PORT 1
2). 由于ARP请求为广播帧,所以,SW1向除了PORT1之外的所有UP的端口广播。
注意,该帧没有任何变化。换句话说,交换机没有对帧做任何修改。这就是传说中的透明传输。
3). PC2收到该ARP请求帧,本地建立ARP表项,同时单播回送ARP应答帧。目的MAC=MAC_PC1;源MAC=MAC_PC2。
SW1收到该单播帧手,根据帧头中的源MAC地址,学习到了PC2的MAC,建立MAC地址表如下:
MAC地址 端口
MAC_PC1 PORT 1
MAC_PC2 PORT 2
4). SW1根据帧头中的目的MAC地址(MAC_PC1)将数据帧从PORT 1转发。
5). PC1收到ARP响应,ARP交互过程成功。接下来进行单播PING包交互。
SW1根据数据帧的目的MAC进行透明转发单播帧,同时刷新本地MAC地址表的老化定时器。
2. 802.1Q VLAN的基本原理
严格来说,802.1Q VLAN不是一个协议,因为互连的设备之间没有协议层面的报文交互。802.1Q
VLAN只定义了数据帧的封装格式,即,在以太网帧头中插入了4个字节的VLAN字段。其主要内容为VLAN
TAG,紧随其后的数据类型和802.1p报文优先级的标识。
本人所理解的VLAN技术要点主要有两点:1.支持VLAN的交换机的内部交换原理;2.设备之间(交换机之间,交换机与路由器之间,交换机与主机之间)交互时,VLAN TAG的添加和移除。下面就按照这个思路来描述。
2.1 支持VLAN的交换机的交换原理
引入VLAN概念后,数据帧只在相应的VLAN进行交换。用通俗一点的话来讲,一个交换机被虚拟出了多个逻辑交换机,每一个VLAN内的端口都是一个逻辑上的交换机。用专业一点的话来讲,一个交换机被划分了多个不同的广播域,每一个VLAN内的端口,在同一个广播域内。
引入VLAN后的交换原理与传统的交换原理相比,并没有本质上的改变,同样遵循‘源MAC学习,目的MAC转发’的基本原则。唯一不同的是,学习和转发都只在同一个VLAN中进行,数据帧不能跨VLAN交换或转发。
2.1.1 数据帧该在哪个VLAN中进行交换?
前面提到,支持VLAN的交换机将数据帧限制在同一个VLAN中进行交换,那么数据帧到底该在哪个VLAN中交换呢?
如果收到的数据帧携带了VLAN信息 (通常称为’TAGED数据帧‘,前面已经介绍了带VLAN TAG的以太帧格式),该VLAN信息中的VLAN TAG就是交换该帧的VLAN。
如果收到的数据帧没有携带VLAN信息(通常称为‘ UNTAGED数据帧‘),收到该帧的端口的PVID就是交换该帧的VLAN。
该规则在2.2.3节中有详细的描述。
根据上面的原则,也定义了PVID的概念。当端口收到一个UNTAGED数据帧时,无法确定在哪个VLAN中进行交换,PVID定义了在这种情形下交换该帧的VLAN。从某种意义上讲,可以把PVID理解为端口的default VLAN。在支持VLAN的交换机中,每个端口都有一个PVID值,该值有一个缺省值,当然你也可以更改它。
引入VLAN概念后,MAC地址的学习也在相应的VLAN中进行。从某种意义上理解,一台交换机有多张MAC地址表,每个VLAN一张表,在交换数据帧进行查表时,只需要在相应的VLAN中进行查找。
很显然,MAC地址表项中,增加了VLAN TAG属性。
VLAN MAC地址 端口
VLAN1 MAC_PC1 PORT 1
VLAN1 MAC_PC2 PORT 2
VLAN2 MAC_PC1 PORT 1
VLAN2 MAC_PC2 PORT 2
2.2 VLAN TAG的添加和移除规则
为了保证设备之间的互联互通,需要理解VLAN TAG的添加和移除规则。也就是说,交换机在转发数据帧时,什么时候应该打TAG,什么时候应该不打TAG,什么时候又会丢弃数据帧。
为什么要有这么‘复杂’(其实也没那么复杂)的规则呢?为什么不把所有的数据帧都打上TAG呢,这样不是简单多了?其实,这样做也是为了适应不同设备的工作原理,有些设备是不支持VLAN TAG的。
2.2.1 典型设备
先介绍一下几种典型的设备:
PC:大部分的PC(专用的,或用于测试的除外)是工作在应用层的,缺省情况下是不支持(其实也不需要)VLAN TAG的。也就是说,PC发出的都是UNTAGED数据帧。
Router:路由器是支持VLAN TAG的。也就是说,路由器可以发出TAGED数据帧,也可以发出UNTAGED数据帧。需要说明的是,路由器是处理数据包的三层信息的,对于二层信息(包括VLAN信息),路由器只是检查其有效性,之后将其剥离。这个过程就是我们常说的‘终结’,也就是说,路由器会终结掉报文的VLAN信息的。
Switch:这里的switch是指以太网交换机。VLAN技术就是主要针对于交换机提出的,所以,在讨论VLAN概念时都是立足于交换机来讨论。很显然,交换机既支持收发TAGED数据帧,也支持收发UNTAGED数据帧。从严格意义上讲,引入VLAN后,交换机的行为不再是‘透明传输’,因为数据帧经过交换机后可能发生了变化。
了解了几种典型设备的工作原理后,就应该觉得交换机上TAG的添加和移除原则的必要性了。
2.2.2 VLAN中的端口属性
一个VLAN可以包含多个端口,而一个端口也可以属于多个VLAN。一个端口在一个VLAN中有不同的属性,TAG的添加和移除原则就是根据这个属性而定的。
TAGED:如果一个端口在一个VLAN中的属性是TAG的,那么,从该端口转发出去的数据帧就是TAGED。(当然,该数据帧是在该VLAN中交换的)
UNTAGED:如果一个端口在一个VLAN中的属性是UNTAG的,那么,从该端口转发出去的数据帧就是UNTAGED。(当然,该数据帧是在该VLAN中交换的)
2.2.3 交换机收发数据帧的处理总结
我们分几种情况讨论交换机的接收和发送处理:接收端口和发送端口在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中进行交换。其实,端口UNTAG所在的VLAN,就是2.1.1节中所提到的PVID的概念。
2). 端口发送数据帧
a).检查该端口在该VLAN(就是交换该数据帧的VLAN)中的属性
- 该端口在该VLAN种的属性是TAG的,发送的数据帧为TAG的数据帧
- 该端口在该VLAN种的属性是UNTAG的,发送的数据帧为UNTAG的数据帧
注:由于数据已经被交换到该端口,说明该端口肯定在该VLAN里。
2.2.4 典型配置
简单介绍一下,交换机连接不同典型设备时的常用配置。
1). 连接PC
上面介绍了在通常情况下,PC只支持收发UNTAG的数据帧,所以,连接PC的端口只需要加入一个VLAN,而且,在该VLAN中的属性为UNTAG。
2). 连接Router
路由器既支持收发TAG数据帧,也支持收发UNTAG数据帧。通常情况下,不同的VLAN数据帧都能通过该端口与路由器互通。所以连接路由器的端口可以属于多个VLAN,而且,只能在一个VLAN中的属性是UNTAG的,在其他的VLAN中都是TAG的。
3). 连接Switch
也就是交换机的级联。通常情况下是不同性能的交换机进行级联。这种情况和连接路由器的情况基本相同。
2.2.5 思科交换机的端口类型
TAG和UNTAG应该是一般性的说法,但讨论路由交换技术时,不能忽略思科技术,因为它毕竟是这个行业的引导者(你也可以说它是先入为主)。
通常情况下,理解VLAN的概念都是以VLAN为立足点,然后将端口加入该VLAN,并赋予端口某种属性。这种思路似乎不适用于思科的交换技术。
在思科的交换机上,都是以端口为立足点的,然后配置该端口的类型和所属的VLAN。
这里介绍思科的两种端口类型,Access和Trunk。理解了这两种类型,也就理解了思科交换的VLAN基本原理。
1). Access端口
思科的Access端口是为了连接PC(终端设备)而设计的。由于大部分终端设备都不支持(其实也不需要)VLAN TAG的,所以连接终端设备的端口只需要在一个VLAN中,而且是UNTAG的。Access端口就是这样的。
如果将端口配置为Access模式,该端口就只能在一个VLAN中(也就是Access VLAN),而且该端口在该VLAN中的属性是UNTAG的。从某种意义上说,该VLAN也就是该端口的PVID。
2). Trunk端口
思科的Trunk端口是为了连接上行设备(路由器,交换机等支持多VLAN的设备)。通常情况下,上行端口需要汇聚多个VLAN的流量,所以该端口应该属于多个VLAN。
如果将端口配置为Trunk模式,该端口可以属于多个VLAN,在思科技术中,习惯称该端口可以允许多个VLAN通过。该端口在一个VLAN中是UNTAG的,也就是该端口的PVID,在思科技术中,称为Native VLAN。该端口在其他的VLAN中都是TAG的。
可以说,思科在VLAN的一般性原理上多增加了一层开发。如果理解了其本质原理,可以看出是和2.2.3节完全吻合的。
2.3 交换机对VLAN的支持的发展历程
从技术发展为产品总是需要一个过程,在接触过早期交换机的童鞋们应该会知道,当时的交换机对VLAN的支持有两种模式,SVL和IVL。
SVL: Shared VLAN Learning 共享式VLAN学习
IVL: Independent VLAN Learning 独立VLAN学习
从通俗而简单的角度来说,IVL就是每个VLAN有一个MAC-端口映射表,同一个MAC可以出现在多个表里面(也就是不同的VLAN里面);而SVL是
在交换机内建一张大表,映射关系是MAC-VLAN-端口,而且,一个MAC在表中只出现一次,只属于一个VLAN。
显然,SVL应该更容易实现一点,看起来是一种打补丁的实现方式,貌似不是真正的VLAN。早期的VLAN交换机中,有很多是SVL模式的。
我们前面2.1和2.2节所介绍的原理,都是针对IVL来讲的。
从网络上看到一位仁兄从专业的角度上总结了SVL和IVL的工作原理,非常准确而精辟,故我就不再加以润色,直接引用了。
IVL,网上大部分资料都说为每个VLAN建一个表,看起来好像有很多表,其实这里所说的表是指逻辑上的表,实际上在交换机中还是只有一个表,如果将VID相同的记录都提取出来组成一个表,那么就一个物理上的表在逻辑上就可以认为是多个表了。
2.3.1 IVL (Independent VLAN Learning)
在MAC表中以MAC+VID为主键进行储存。这样,同一个MAC就可能由于VID的不同而在MAC表中存在多条记录。
1).根据MAC+VID在MAC表中寻找,找不到转3)
2).向找到的port转发packet,end.
3).向packet携带的vid对应的整个VLAN的port转发,end.
2.3.2 SVL(Shared VLAN Learning)
在MAC表中以MAC为主键进行储存,也就是说同一个MAC在SVL方式下只能存在一个记录在MAC表中。
1).在MAC中先根据MAC寻找相应的记录,找不到转4)
2).记录中的VID与packet中携带的VID一样,得到相应的port;不一样转5)
3).将packet转发到相应的port,end.
4).向packet携带的vid对应的整个VLAN的port转发,end.
5).drop,end.
这个过程还是需要一点基础的,如果看的有点虚无缥缈,大可以略过该节,因为当今市场上,很少看到SVL的交换机了。
802.1Q VLAN技术原理的更多相关文章
- vlan 以及 Linux实现的IEEE 802.1Q VLAN
vlan 以及 Linux实现的IEEE 802.1Q VLAN Vlan的概念 VLAN技术介绍 VLANVLAN概述 以太网是一种基于CSMA/CD(Carrier Sense Multiple ...
- 802.1q VLAN
VLAN(Virtual Local Area Network),是一种通过将局域网内的设备逻辑地而不是物理地划分成一个个网段从而实现虚拟工作组的技术. 以一个网络接口为主设备,可以创建多个虚拟网络接 ...
- 管理型交换机IEEE 802.1Q VLAN设置应用实例
转载标注: IEEE802.1Q 我粗略理解为对交换机入口规则和出口规则设置,入口打上VID,设置从哪些口可以出去,并且是否带标签. 一 VLAN的概念 VLAN(Virtual Local Area ...
- 如何在centos上配置802.1Q VLAN标记,linux单网卡多vlan多网段Ip配置案例
介绍 VLAN使将大型网络分成较小且易于管理的网络成为可能.802.1Q是所有供应商都在其网络设备中实施的标准.某些交换机能够将多个VLAN分配给单个网络端口.使用此功能,您可以将多个VLAN分配给单 ...
- (四)802.1Q VLAN
- 网络工程知识(二)VLAN的基础和配置:802.1q帧;Access、Trunk、Hybrid接口工作模式过程与配置;VLANIF的小实验
介绍-VLAN VLAN(Virtual Local Area Network)即虚拟局域网,工作在数据链路层. 交换机将通过:接口.MAC.基于子网.协议划分(IPv4和IPv6).基于策略的方式划 ...
- Vlan技术总结
VLAN主要有两个作用: vlan可以有效的控制广播域的范围 vlan可以分组设备,增强局域网的安全性(业务隔离) vlan的范围: 一共有4096个vlan,vlan 1为默认vlan.但其中vla ...
- VLAN技术 & ACL访问控制
VLAN介绍与配置 VLAN概述 交换网络中的问题 VLAN(Virtual Local Area Network) 在物理网络上划分出逻辑网 ,对应OS模型第二层 VLAN划分不受端口物理位置限制, ...
- Linux实现的IEEE 802.q VLAN
本文转载自: http://blog.chinaunix.net/uid-20786208-id-4291059.html Technorati 标签: Linux VLAN ---------- ...
随机推荐
- 后台方庄List razor 循环
后台: //1.查询所有年卡类型 StringBuilder sqlStr = new StringBuilder(); sqlStr.Ap ...
- 定宽块状元素居中 1记(text-align/margin:0 auto)
对于text-align:center的用法只是针对文本相对于父元素的居中,例如: #jz2{ width:300px; margin: 10px auto; border:2px solid red ...
- Python的变量参数
- 今天的第一个程序-南阳acm输入三个数排序
#include<stdio.h>main(){ int a,b,c,t; scanf("%d%d%d",&a,&b,&c); ...
- Spring - bean的依赖关系(depends-on属性)
depends-on是bean标签的属性之一,表示一个bean对其他bean的依赖关系.乍一想,不是有ref吗?其实还是有区别的,<ref/>标签是一个bean对其他bean的引用,而de ...
- 国际化:Java平台下的Locale类
Locale类有如下几个构造器: Locale(String language) Locale(String language, String country) Locale(String langu ...
- 谈谈浏览器http缓存
请求头 user-agent pragma Cache-control Referer Accept Cookit If-Modified-Since If-None-Match 响应头 conten ...
- 02-windows 安装以太坊 ethereum 客户端 (win7-64)-大叔思维
以太坊(Ethereum)是一个运行智能合约的去中心化平台(Platform for Smart Contract),平台上的应用按程序设定运行,不存在停机.审查.欺诈.第三方人为干预的可能.以太坊平 ...
- String,StringBuffer,StringBuilder的区别及其源码分析
String,StringBuffer,StringBuilder的区别这个问题几乎是面试必问的题,这里做了一些总结: 1.先来分析一下这三个类之间的关系 乍一看它们都是用于处理字符串的java类,而 ...
- PHPFastCGI进程管理器PHP-FPM详解
PHP-FPM是一个PHPFastCGI进程管理器,是只用于PHP的. PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中.必须将它patch到你的PH ...