2.2 配置VTP Pruning

         SW1# vlan database

SW1(vlan)#vtp pruning

Pruning switched ON

SW1(vlan)#exit

APPLY completed.

Exiting....

SW1#

        

        

       这个时候,根据拓扑可以看出,VTP 修剪只会在SW_ACCESS交换机上有效果,要注意的是 VLAN 1 是不应该被裁剪的,而且也不支持裁剪,默认裁剪的范围是VLAN 2-1005。我们可以通过命令Show interface trunk 来查看哪些TRUNK链路上的哪些VLAN被裁剪:

SW1show interface trunk

SW1#sh inter trunk

 

Port      Mode         Encapsulation  Status        Native vlan

Fa0/11    on           802.1q         trunking      1

 

Port      Vlans allowed on trunk

Fa0/11    1-1005

 

Port      Vlans allowed and active in management domain

Fa0/11    1,10,20

 

Port      Vlans in spanning tree forwarding state and not pruned

Fa0/11    1,10,20

//可以看到并没有任何VLAN被裁剪因为去往VLAN 10 20的流量都会走F0/11

SW2show interface trunk

SW2#sh interfaces trunk

 

Port      Mode         Encapsulation  Status        Native vlan

Fa0/12    on           802.1q         trunking      1

 

Port      Vlans allowed on trunk

Fa0/12    1-1005

 

Port      Vlans allowed and active in management domain

Fa0/12    1,10,20

 

Port      Vlans in spanning tree forwarding state and not pruned

Fa0/12    1,10,20

//可以看到并没有任何VLAN被裁剪因为去往VLAN 10 20的流量都会走F0/12

SW_ACCESSshow interface trunk

SW_ACCESS#sh interfaces trunk

 

Port      Mode         Encapsulation  Status        Native vlan

Fa0/1     on           802.1q         trunking      1

Fa0/11    on           802.1q         trunking      1

Fa0/12    on           802.1q         trunking      1

 

Port      Vlans allowed on trunk

Fa0/1     1-1005

Fa0/11    1-1005

Fa0/12    1-1005

 

Port      Vlans allowed and active in management domain

Fa0/1     1,10,20

Fa0/11    1,10,20

Fa0/12    1,10,20

 

Port      Vlans in spanning tree forwarding state and not pruned

Fa0/1     1,10,20

Fa0/11    1,10

Fa0/12    1,20

//可以看到,VTP修剪已经在SW_ACCESS上生效了,因为SW1上只配置了SVI10,交换机会把SVI10当做VLAN 10的直连接口,但是没有配置VLAN 20 SVI接口,所以SW1会认为自己没有VLAN20的客户,所以SW_ACCESS会在去往SW1TRUNK 接口F0/11上面把VLAN 20给裁剪掉。

SW2SW1类似,我们也可以看到和R1连接的TRUNK接口F0/1上面没有进行裁剪,但为什么SW_ACCESS知道对端的R1需要VLAN 10 20的流量呢?因为在启用了VTP Pruning的交换机上面,如果一个TRUNK接口没有VTP消息传过来,是不会对这个接口进行VTP Pruning的。

 

2.3 配置SW_ACCESS VTP Transparent

配置SW_ACCESS

SW_ACCESS#vlan database

SW_ACCESS(vlan)#vtp transparent

Setting device to VTP TRANSPARENT mode.

SW_ACCESS(vlan)#exit

APPLY completed.

Exiting....

SW_ACCESS#

 

这时我们再看VTP Pruning情况:

SW_ACCESS

SW_ACCESS#show interfaces trunk

 

Port      Mode         Encapsulation  Status        Native vlan

Fa0/1     on           802.1q         trunking      1

Fa0/11    on           802.1q         trunking      1

Fa0/12    on           802.1q         trunking      1

 

Port      Vlans allowed on trunk

Fa0/1     1-1005

Fa0/11    1-1005

Fa0/12    1-1005

 

Port      Vlans allowed and active in management domain

Fa0/1     1,10,20

Fa0/11    1,10,20

Fa0/12    1,10,20

 

Port      Vlans in spanning tree forwarding state and not pruned

Fa0/1     1,10,20

Fa0/11    1,10,20

Fa0/12    1,10,20

//可以看到把SW_ACCESS配置成透明模式后,VTP 修剪已经失效

 

SW1

SW1#sh inter trunk

 

Port      Mode         Encapsulation  Status        Native vlan

Fa0/11    on           802.1q         trunking      1

 

Port      Vlans allowed on trunk

Fa0/11    1-1005

 

Port      Vlans allowed and active in management domain

Fa0/11    1,10,20

 

Port      Vlans in spanning tree forwarding state and not pruned

Fa0/11    1,20

分析:这时就出现问题了,我们知道SW1上面启用的是SVI 10,也就是需要与R1上面的10.1.1.254通信,而这时vlan 10 却在去往SW_ACCESSTrunk接口F0/11上被裁剪了,所以导致了和R1子接口通信失败。

SW2

SW2#sh interfaces trunk

 

Port      Mode         Encapsulation  Status        Native vlan

Fa0/12    on           802.1q         trunking      1

 

Port      Vlans allowed on trunk

Fa0/12    1-1005

 

Port      Vlans allowed and active in management domain

Fa0/12    1,10,20

 

Port      Vlans in spanning tree forwarding state and not pruned

Fa0/12    1,10

//SW1一样,自己需要Vlan 20通往R1却被裁剪了。

 

3、问题原因

但是为什么SW1没有裁剪VLAN20SW2没有裁剪VLAN10

要想真正了解VTP Prung的工作机制,我们需要通过抓包来分析。

正常情况下VTP Pruning功能是通过code0x04join/prue消息来实现的,消息里面not pruned vlan字段指出我需要哪些VLAN的流量。

我们先来看看正常情况下VTP修剪机制是怎么实现的。

一旦启用了VTP Pruing,交换机将会每6秒向所有Trunk接口发送VTP join/prue消息。


 

 

SW1发往SW_ACCESS

 

我们可以看到,源地址为SW1MAC地址:cc04.1584.0000,目的地址组播地址:cc04.1584.0000,这个组播地址被多个协议所使用。VTP协议最下方的通告活动VLAN字段指出了,本地有哪些VLAN是活动的,要注意的是VTP Pruning是对出的流量做过滤。

SW_ACCESS收到这个VTP信息就知道,SW1方向有VLAN 10在活动,所以在正常情况下是应该修剪掉20的,这和前面的正常情况相符合。

SW2发往SW__ACCESS

SW2相应的报告活动的VLAN 20

SW__ACCESS发往SW1/SW2

由于SW_ACCESSR1之间的TRUNK没有VTP信息传输,所以SW_ACCESS会把所有VLAN流量都当做在本交换机上存在,并通告出去。也是因为SW1/SW2都收到了这个VTP消息,在去往SW_ACCESSTrunk接口上都不会对VLAN 10 VLAN 20进行修剪。这也和前面的正常情况的现象相符合。

 

根据前面的抓包可以得出,一旦SW_ACCESS变成透明模式,不会生成VTP消息,但是却会转发VTP消息(注:当网络中有Transparent模式的交换机时,推荐在网络中使用VTP版本2 ,版本1 Transparent模式的交换机只会转发自己相同域且密码一致的VTP消息,而版本2会转发任何VTP消息 。使得SW1F0/11接口上收到了经过SW_ACCESS转发来的SW2VTP消息,但是SW_ACCESS自己没有生成的VTP消息(由于与R1启用了Trunk但却收到不R1方向发来的VTP信息,需要放行所有VLAN),所以SW1在接口F0/11上面只收到了关于VLAN 20VTP消息,所以对VLAN 10进行了裁剪,相反的SW2在接口F0/12上面只收到了SW1关于VLAN 10VTP消息,所以对VLAN 20进行了裁剪,这就导致了SW1SW2R1之间通信出现了问题。

结论

这是由于VTP Transparent模式的特性决定的,所以只有要想避免出现这种问题,如果在网络中启用了VTP Pruning功能,请注意不要把位于拓扑边缘的交换机配置成Transparent模式,这会导致如果VLAN的客户端只存在于这台交换机下的话(在本例中是VLAN 1020),其它交换机将会在与这台透明模式交换机连接的Trunk接口上裁剪掉去往这个VLAN的流量。

可以发现,这种情况是属于比较难见的情况,但是不能否认会发生,我们正常都会把新加入的思科交换机设为VTP Transparent模式,然后才加入到网络中,但是这时要注意,请避免某些VLAN的客户端只存在于这台新加入的且VTP 设为Transparent模式的交换机上,或是在这台Transparent模式的交换机单独新增加VLAN,除非该VLAN只需要在这台交换机上单独使用。