802.1Q VLAN原理- 求是的日志- 网易博客

802.1Q VLAN原理

2010-06-14 09:23:47 阅读6 评论0 字号:

在数据通信和宽带接入设备里,只要涉及到二层技术的,就会遇到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的过程:(这里假设,PC1PC2位于同一个IP网段,IP地址分别为IP_PC1IP_PC2MAC地址分别为MAC_PC1MAC_PC2

     1). PC1首先发送ARP请求,请求PC2MAC。目的MAC=FF:FF:FF:FF:FF:FF(广播);源MAC=MAC_PC1

     SW1收到该广播数据帧后,根据帧头中的源MAC地址,首先学习到了PC1MAC,建立MAC地址表如下:

MAC地址             端口

MAC_PC1             PORT 1

     2). 由于ARP请求为广播帧,所以,SW1向除了PORT1之外的所有UP的端口广播。

     注意,该帧没有任何变化。换句话说,交换机没有对帧做任何修改。这就是传说中的透明传输。

     3). PC2收到该ARP请求帧,本地建立ARP表项,同时单播回送ARP应答帧。目的MAC=MAC_PC1;源MAC=MAC_PC2

     SW1收到该单播帧手,根据帧头中的源MAC地址,学习到了PC2MAC,建立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报文优先级的标识。

Figure 2-1 以太网帧格式

|-----------------------------------------------------------------------------|

| DMAC(6bytes) | SMAC(6bytes) | Ether-Type(2bytes) | DATA |

|-----------------------------------------------------------------------------|

Figure 2-2 VLAN TAG的以太网帧格式

|-------------------------------------------------------------------------------------------------|

| DMAC(6bytes) | SMAC(6bytes) | Ether-Type(0x8100) | VLAN(4bytes) | DATA |

|-------------------------------------------------------------------------------------------------|

Figure 2-3 VLAN TAG的格式

|---------------------------------------------------------------------------------|

| PRI(3bits) | CFI(1bit) | TAG(12bits) | Ether-Type(2bytes) | DATA |

|---------------------------------------------------------------------------------|

PRI:帧优先级,就是通常所说的802.1p

CFI:规范标识位,0为规范格式,用于802.3EthII

TAG:就是我们通常说的VLAN ID

Ether-Type:标识紧随其后的数据类型。

     本人所理解的VLAN技术要点主要有两点:1.支持VLAN的交换机的内部交换原理;2.设备之间(交换机之间,交换机与路由器之间,交换机与主机之间)交互时,VLAN TAG的添加和移除。下面就按照这个思路来描述。

        2.1 支持VLAN的交换机的交换原理

        引入VLAN概念后,数据帧只在相应的VLAN进行交换。用通俗一点的话来讲,一个交换机被虚拟出了多个逻辑交换机,每一个VLAN内的端口都是一个逻辑上的交换机。用专业一点的话来讲,一个交换机被划分了多个不同的广播域,每一个VLAN内的端口,在同一个广播域内。

        引入VLAN后的交换原理与传统的交换原理相比,并没有本质上的改变,同样遵循MAC学习,目的MAC转发的基本原则。{wy}不同的是,学习和转发都只在同一个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值,该值有一个缺省值,当然你也可以更改它。

       2.2.2 MAC地址学习和MAC地址表

        引入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 思科交换机的端口类型

         TAGUNTAG应该是一般性的说法,但讨论路由交换技术时,不能忽略思科技术,因为它毕竟是这个行业的引导者(你也可以说它是先入为主)

         通常情况下,理解VLAN的概念都是以VLAN为立足点,然后将端口加入该VLAN,并赋予端口某种属性。这种思路似乎不适用于思科的交换技术。

         在思科的交换机上,都是以端口为立足点的,然后配置该端口的类型和所属的VLAN

         这里介绍思科的两种端口类型,AccessTrunk。理解了这两种类型,也就理解了思科交换的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节xx吻合的。

2.3 交换机对VLAN的支持的发展历程

         从技术发展为产品总是需要一个过程,在接触过早期交换机的同学们应该会知道,当时的交换机对VLAN的支持有两种模式,SVLIVL

         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.12.2节所介绍的原理,都是针对IVL来讲的。

          从网络上看到一位仁兄从专业的角度上总结了SVLIVL的工作原理,非常准确而精辟,故我就不再加以润色,直接引用了。

         IVL,网上大部分资料都说为每个VLAN建一个表,看起来好像有很多表,其实这里所说的表是指逻辑上的表,实际上在交换机中还是只有一个表,如果将VID相同的记录都提取出来组成一个表,那么就一个物理上的表在逻辑上就可以认为是多个表了。

        2.3.1 IVL (Independent VLAN Learning)

         MAC表中以MACVID为主键进行储存。这样,同一个MAC就可能由于VID的不同而在MAC表中存在多条记录。

        1).根据MACVIDMAC表中寻找,找不到转3)

        2).向找到的port转发packetend.

        3).packet携带的vid对应的整个VLANport转发,end.

         2.3.2 SVL(Shared VLAN Learning)

         MAC表中以MAC为主键进行储存,也就是说同一个MACSVL方式下只能存在一个记录在MAC表中。

        1).MAC中先根据MAC寻找相应的记录,找不到转4)

        2).记录中的VIDpacket中携带的VID一样,得到相应的port;不一样转5)

        3).packet转发到相应的portend.

        4).packet携带的vid对应的整个VLANport转发,end.

        5).dropend.

        这个过程还是需要一点基础的,如果看的有点虚无缥缈,大可以略过该节,因为当今市场上,很少看到SVL的交换机了。

<#--{zx1}日志--> <#--推荐日志--> <#--引用记录--> <#--相关日志--> <#--推荐日志--> <#--推荐阅读--> <#--相关文章--> <#--历史上的今天--> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构-->
郑重声明:资讯 【802.1Q VLAN原理- 求是的日志- 网易博客】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——