hardware_hh的个人空间 https://blog.eetop.cn/hardware [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

VLAN-TAG超经典解释_有种豁然开朗的感觉

已有 40125 次阅读| 2013-10-21 22:22 |个人分类:基础知识


  VLAN技术要点主要有两点:1.支持VLAN的交换机的内部交换原理;2.设备之间(交换机之间,交换机与路由器之间,交换机与主机之间)交互时,VLAN TAG的添加和移除。

  802.1Q VLAN只定义了数据帧的封装格式,即,在以太网帧头中插入了4个字节的VLAN字段。其主要内容为VLAN TAG,紧随其后的数据类型和802.1p报文优先级的标识。
 以太网帧格式
|-----------------------------------------------------------------------------|
| DMAC(6bytes) | SMAC(6bytes) | Ether-Type(2bytes) | DATA |
|-----------------------------------------------------------------------------|
VLAN TAG的以太网帧格式
|------------------------------------------------------------------------------------------|
| DMAC(6bytes) | SMAC(6bytes) | Ether-Type(0x8100) | VLAN(4bytes) | DATA |
|------------------------------------------------------------------------------------------|
 VLAN TAG
的格式
|---------------------------------------------------------------------------------|
| PRI(3bits) | CFI(1bit) | TAG(12bits) | Ether-Type(2bytes) | DATA |
|---------------------------------------------------------------------------------|
PRI:帧优先级,就是通常所说的802.1p
CFI
:规范标识位,0为规范格式,用于802.3EthII
TAG
:就是我们通常说的VLAN ID
Ether-Type
:标识紧随其后的数据类型。

                

 

 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
 
也就是交换机的级联。通常情况下是不同性能的交换机进行级联。这种情况和连接路由器的情况基本相同。

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


这里做了简化,假设一个报文从Port1入,从Port2出,期间可能经过的环节如上所示的15
报文的Tag处理主要在15
环节1:如果报文的是Untag的,则报文被加上Port1PVIDtag,然后送给2层转发引擎L2。如果报文的Tag不是Port1所属的VLAN,则报文丢弃。
环节5:如果报文此时的Tag等于Port2PVID,则报文去Tag,变为Untag的,如果报文的Tag在端口的Untag列表里,报文去掉Tag,变为Untag。如果报文的Tag不是Port2PVID,但在端口的Tag列表里,报文Tag不变。

对于任意端口来说,只能是三种类型的一种:AccessTrunkMulti
如果是Access,端口只能属于特定VLAN,只能有一个UntagVLAN,且其等于PVID,没有TagVLAN。因此Access端口只能接收Untag的报文或所属的VLAN,即等于PVIDVLAN。出去的报文都是Untag的。
如果是Trunk端口,端口只能有一个UntagVLAN,且其等于PVID,有多个TagVLAN。端口可以接收在所有允许的VLANUntag的报文,如果是Untag的报文,则在PVID所在的VLAN转发。报文发送时,按上述规则转发,即可能是Tag的,也可能是Untag的。
Multi
端口是一种特殊的端口,任何VLAN可能属于此端口的Untag的,也可以属于Tag的。PVID可能等于Tag VLAN中的一个,也可能属于Untag VLAN中的一个。因此这里就有矛盾的是,如果PVIDTag VLAN中的一个,转发时仍按PVID来处理,也就是上述的规则,先进行报文的TagPVID的比较,只要相等就给Untag

可以再简要分析几种转发情况。
如果报文从Port1入,如果报文是Untag的,或者报文的TagPort1所属的VLAN,则报文是合法的。如果报文的MAC地址不等于端口的VLANMAC地址,则进行二层转发。如果L2引擎查找到目的MAC的表项,则按端口转发,否则在VLAN内广播。
 
如果报文的MAC地址等于端口的VLANMAC地址,且此VLAN的三层接口是UP的,则会进行三层转发。报文通过环节3到三层转发引擎,如果三层转发引擎匹配到了目的IP,则硬件直接转发,从环节5出,此时Tag已经变成出接口VLANTag,然后在按照端口转发原则进行转发。因此,三层报文如果从Trunk端口出,可能是Tag的,也可能是Untag的,如果是Untag的,那肯定是报文出接口的PVID所对应的VLAN
 
这里还有一个细节是交换机如何对协议报文的处理,最频繁的应该是ARP的请求报文,其余还有一些路由协议或其他协议报文。ARP报文的目的MAC是广播的,不等于VLAN的目的MAC,因此会将此报文在VLAN内广播,对所有VLAN来说,CPU也是其的一个端口。因此CPU是可以收到其他主机或网络设备对其IPARP请求,正确处理之后,其他主机或网络设备以后就可以使用此MAC进行三层通信了。

 
引入VLAN概念后,数据帧只在相应的VLAN进行交换。用通俗一点的话来讲,一个交换机被虚拟出了多个逻辑交换机,每一个VLAN内的端口都是一个逻辑上的交换机。用专业一点的话来讲,一个交换机被划分了多个不同的广播域,每一个VLAN内的端口,在同一个广播域内。
 
引入VLAN后的交换原理与传统的交换原理相比,并没有本质上的改变,同样遵循MAC学习,目的MAC转发的基本原则。唯一不同的是,学习和转发都只在同一个VLAN中进行,数据帧不能跨VLAN交换或转发。
 
如果收到的数据帧携带了VLAN信息 (通常称为'TAGED数据帧',前面已经介绍了带VLAN TAG的以太帧格式),该VLAN信息中的VLAN TAG就是交换该帧的VLAN
 
如果收到的数据帧没有携带VLAN信息(通常称为‘UNTAGED’数据帧),收到该帧的端口的PVID就是交换该帧的VLAN
 
根据上面的原则,也定义了PVID的概念。当端口收到一个UNTAGED数据帧时,无法确定在哪个VLAN中进行交换,PVID定义了在这种情形下交换该帧的VLAN。从某种意义上讲,可以把PVID理解为端口的default VLAN。在支持VLAN的交换机中,每个端口都有一个PVID值,该值有一个缺省值,当然你也可以更改它。
交换机收发数据帧的处理总结
分几种情况讨论交换机的接收和发送处理:接收端口和发送端口在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所在的VLAN2). 端口发送数据帧
 a).
检查该端口在该VLAN(就是交换该数据帧的VLAN)中的属性
    -
该端口在该VLAN种的属性是TAG的,发送的数据帧为TAG的数据帧
    -
该端口在该VLAN种的属性是UNTAG的,发送的数据帧为UNTAG的数据帧
注:由于数据已经被交换到该端口,说明该端口肯定在该VLAN里。

 


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 17

    获赞
  • 16

    评论
  • 1512

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-27 18:09 , Processed in 0.024738 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部