# vlan (virtual LAN )
# 一台未设置任何VLAN的二层交换机上,任何广播帧都会被转发给除接收端口外的所有其他端口(Flooding)。VLAN通过限制广播帧转发的范围分割了广播域
# 802.1Q也即“Virtual Bridged Local Area Networks”(虚拟桥接局域网,简称“虚拟局域网”)协议,公有协议
# ISL&DISL思科交换链路内协议和动态 ISL协议(ISL & DISL:Cisco Inter-Switch Link Protocol and Dynamic ISL Protocol) 交换链路内协议(ISL),是思科私有协议
# 802.1Q和ISL主要区别:
# ISL 思科私有标准,只用于思科设备之间互联,在数据帧头部和尾部封装30byte的开销;
# 802.1Q 国际标准协议,适用于各个厂商生产的交换机,在数据帧内部增加4byte的开销;
# 以太网帧结构和802.1Q帧结构
# 以太网帧格式
 |-----------------------------------------------------------------------------|
 | DMAC(6bytes) | SMAC(6bytes) | Ether-Type(2bytes) | DATA |
 |-----------------------------------------------------------------------------|
# 802.1Q 以太网帧格式
 |--------------------------------------------------------------------------------------------|
 | DMAC(6bytes) | SMAC(6bytes) | Ether-Type(0x8100)| VLAN(4bytes) | Ether-Type(2bytes) | DATA |
 |--------------------------------------------------------------------------------------------|

 # VLAN TAG的格式
 |--------------------------------------------------------------------------------------|
 | Ether-Type(0x8100)| PRI(3bits) | CFI(1bit) | TAG(12bits) | Ether-Type(2bytes) | DATA |
 |--------------------------------------------------------------------------------------|
# PRI:帧优先级,就是通常所说的802.1p,(LAN Layer 2 QoS/CoS Protocol for Traffic Prioritization ) 有关流量优先级LAN第二层QoS/CoS协议
# 1(background),0(默认,没有优先级),2 (excellent effort),3(关键应用),4 (视频),5 (语音),6 (网间控制),7 (网络控制)
# CFI:规范标识位,0为规范格式,用于802.3或EthII。1为非规范格式,它被用在令牌环/源路由FDDI介质访问方法中来指示封装帧中所带地址的比特次序信息
# TAG:就是我们通常说的VLAN ID,12bit,指明VLAN的ID,一共4096个
# 12bit 0-4095
#  1:系统vlan
#  2-1001:以太vlan
#  1002/1003/1004/1005: tocken ring
#  1006-2095:扩展vlan vtp3 vtp1/2 transparant
# Ether-Type:标识紧随其后的数据类型。
# VLAN TAG处理过程
# PC    :大部分的PC(专用的,或用于测试的除外)是工作在应用层的,缺省情况下是不支持(其实也不需要)VLAN TAG的。也就是说,PC发出的都是UNTAGED数据帧。

# Router:路由器是支持VLAN TAG的。也就是说,路由器可以发出TAGED数据帧,也可以发出UNTAGED数据帧。需要说明的是,路由器是处理数据包的三层信息的,对于二层信息#        (包括VLAN信息),路由器只是检查其有效性,之后将其剥离。这个过程就是我们常说的‘终结’,也就是说,路由器会终结掉报文的VLAN信息的。

# Switch:以太网交换机。VLAN技术就是主要针对于交换机提出的,所以,在讨论VLAN概念时都是立足于交换机来讨论。很显然,交换机既支持收发TAGED数据帧,
#        也支持收发UNTAGED数据帧。从严格意义上讲,引入VLAN后,交换机的行为不再是‘透明传输’,因为数据帧经过交换机后可能发生了变化。

# 所有能感知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处理只在交换芯片的进、出时刻。


# 如果是Trunk,端口只能有一个Untag的VLAN,且其等于PVID,有多个Tag的VLAN。端口可以接收在所有允许的VLAN和Untag的报文,如果是Untag的报文,则在PVID所在的VLAN转发。报文发送时,按上述规则转发,即可能是Tag的,也可能是Untag的。
# 交换机互联为trunk模式
IOU1#interface Ethernet3/3
IOU1#switchport trunk encapsulation dot1q
IOU1#switchport mode trunk
IOU1#duplex auto

IOU1(config-if)#do sh int e3/3 swi
Name: Et3/3
Switchport: Enabled
Administrative Mode: trunk    
Operational Mode: trunk
Administrative Trunking Encapsulation: dot1q
Operational Trunking Encapsulation: dot1q
Negotiation of Trunking: On
Access Mode VLAN: 1 (default)
Trunking Native Mode VLAN: 1 (default)
Administrative Native VLAN tagging: enabled
Voice VLAN: none
Administrative private-vlan host-association: none 
Administrative private-vlan mapping: none 
Administrative private-vlan trunk native VLAN: none
Administrative private-vlan trunk Native VLAN tagging: enabled
Administrative private-vlan trunk encapsulation: dot1q
Administrative private-vlan trunk normal VLANs: none
Administrative private-vlan trunk associations: none
Administrative private-vlan trunk mappings: none
Operational private-vlan: none
Trunking VLANs Enabled: ALL
Pruning VLANs Enabled: 2-1001
Capture Mode Disabled
Capture VLANs Allowed: ALL
Appliance trust: none

IOU2#interface Ethernet3/3
IOU2#switchport trunk encapsulation dot1q
IOU2#switchport mode trunk
IOU2#duplex auto

-------------------------------------------------------------------------------------------------------------------
1.1.1.3 ----> | access vlan 10 |-----|     trunk      |---->|     trunk      |-----| access vlan 10 |----> 1.1.1.6
              |     port1      | SW1 |     port2      |     |     port1      | SW1 |     port2      |      
-------------------------------------------------------------------------------------------------------------------

# 1、路由R3 发出 UNTAGED 以太帧
Frame 37: 114 bytes on wire (912 bits), 114 bytes captured (912 bits) on interface 0
Ethernet II, Src: aa:bb:cc:00:06:00 (aa:bb:cc:00:06:00), Dst: aa:bb:cc:00:04:00 (aa:bb:cc:00:04:00)
    Destination: aa:bb:cc:00:04:00 (aa:bb:cc:00:04:00)
    Source: aa:bb:cc:00:06:00 (aa:bb:cc:00:06:00)
    Type: IPv4 (0x0800)    # 
Internet Protocol Version 4, Src: 1.1.1.1, Dst: 1.1.1.3
Internet Control Message Protocol

# 2、从SW1 access vlan 10口进入,并从SW1 trunk 口出
Frame 96: 118 bytes on wire (944 bits), 118 bytes captured (944 bits) on interface 0
Ethernet II, Src: aa:bb:cc:00:06:00 (aa:bb:cc:00:06:00), Dst: aa:bb:cc:00:04:00 (aa:bb:cc:00:04:00)
    Destination: aa:bb:cc:00:04:00 (aa:bb:cc:00:04:00)
    Source: aa:bb:cc:00:06:00 (aa:bb:cc:00:06:00)
    Type: 802.1Q Virtual LAN (0x8100)
802.1Q Virtual LAN, PRI: 0, CFI: 0, ID: 10    
    000. .... .... .... = Priority: Best Effort (default) (0)
    ...0 .... .... .... = CFI: Canonical (0)
    .... 0000 0000 1010 = ID: 10        
    Type: IPv4 (0x0800)
Internet Protocol Version 4, Src: 1.1.1.1, Dst: 1.1.1.3
Internet Control Message Protocol

# 3、从SW2 trunk 口入,并从SW2 access vlan 10 口出
Frame 29: 114 bytes on wire (912 bits), 114 bytes captured (912 bits) on interface 0
Ethernet II, Src: aa:bb:cc:00:06:00 (aa:bb:cc:00:06:00), Dst: aa:bb:cc:00:04:00 (aa:bb:cc:00:04:00)
    Destination: aa:bb:cc:00:04:00 (aa:bb:cc:00:04:00)
    Source: aa:bb:cc:00:06:00 (aa:bb:cc:00:06:00)
    Type: IPv4 (0x0800)
Internet Protocol Version 4, Src: 1.1.1.1, Dst: 1.1.1.3
Internet Control Message Protocol


# 如果是Access,端口只能有一个VLAN Tag,且其等于PVID,没有tag的VLAN。因此Access端口只能接收Untag的报文或所属的VLAN,即等于PVID的VLAN。出去的报文都是Untag的。
# 交换机互联为access模式
-------------------------------------------------------------------------------------------------------------------
1.1.1.3 ----> | access vlan 10 |-----| access vlan 10 |---->| access vlan 10 |-----| access vlan 10 |----> 1.1.1.6
              |     port1      | SW1 |     port2      |     |     port1      | SW1 |     port2      |      
-------