| |
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.3或EthII。
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
也就是交换机的级联。通常情况下是不同性能的交换机进行级联。这种情况和连接路由器的情况基本相同。
交换机对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的基本原则了。可以如图所示,即Tag处理只在交换芯片的进、出时刻。
这里做了简化,假设一个报文从Port1入,从Port2出,期间可能经过的环节如上所示的1-5。
报文的Tag处理主要在1、5
环节1:如果报文的是Untag的,则报文被加上Port1的PVID的tag,然后送给2层转发引擎L2。如果报文的Tag不是Port1所属的VLAN,则报文丢弃。
环节5:如果报文此时的Tag等于Port2的PVID,则报文去Tag,变为Untag的,如果报文的Tag在端口的Untag列表里,报文去掉Tag,变为Untag。如果报文的Tag不是Port2的PVID,但在端口的Tag列表里,报文Tag不变。
对于任意端口来说,只能是三种类型的一种:Access,Trunk,Multi。
如果是Access,端口只能属于特定VLAN,只能有一个Untag的VLAN,且其等于PVID,没有Tag的VLAN。因此Access端口只能接收Untag的报文或所属的VLAN,即等于PVID的VLAN。出去的报文都是Untag的。
如果是Trunk端口,端口只能有一个Untag的VLAN,且其等于PVID,有多个Tag的VLAN。端口可以接收在所有允许的VLAN和Untag的报文,如果是Untag的报文,则在PVID所在的VLAN转发。报文发送时,按上述规则转发,即可能是Tag的,也可能是Untag的。
Multi端口是一种特殊的端口,任何VLAN可能属于此端口的Untag的,也可以属于Tag的。PVID可能等于Tag
VLAN中的一个,也可能属于Untag VLAN中的一个。因此这里就有矛盾的是,如果PVID是Tag VLAN中的一个,转发时仍按PVID来处理,也就是上述的规则,先进行报文的Tag与PVID的比较,只要相等就给Untag。
可以再简要分析几种转发情况。
如果报文从Port1入,如果报文是Untag的,或者报文的Tag是Port1所属的VLAN,则报文是合法的。如果报文的MAC地址不等于端口的VLAN的MAC地址,则进行二层转发。如果L2引擎查找到目的MAC的表项,则按端口转发,否则在VLAN内广播。
如果报文的MAC地址等于端口的VLAN的MAC地址,且此VLAN的三层接口是UP的,则会进行三层转发。报文通过环节3到三层转发引擎,如果三层转发引擎匹配到了目的IP,则硬件直接转发,从环节5出,此时Tag已经变成出接口VLAN的Tag,然后在按照端口转发原则进行转发。因此,三层报文如果从Trunk端口出,可能是Tag的,也可能是Untag的,如果是Untag的,那肯定是报文出接口的PVID所对应的VLAN。
这里还有一个细节是交换机如何对协议报文的处理,最频繁的应该是ARP的请求报文,其余还有一些路由协议或其他协议报文。ARP报文的目的MAC是广播的,不等于VLAN的目的MAC,因此会将此报文在VLAN内广播,对所有VLAN来说,cpu也是其的一个端口。因此CPU是可以收到其他主机或网络设备对其IP的ARP请求,正确处理之后,其他主机或网络设备以后就可以使用此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所在的VLAN,2). 端口发送数据帧
a).检查该端口在该VLAN(就是交换该数据帧的VLAN)中的属性
- 该端口在该VLAN种的属性是TAG的,发送的数据帧为TAG的数据帧
- 该端口在该VLAN种的属性是UNTAG的,发送的数据帧为UNTAG的数据帧
注:由于数据已经被交换到该端口,说明该端口肯定在该VLAN里。