作为一名技术人、老IT图书作者,一直秉持着一个习惯,那就是喜欢“深入背后”,发现大多数人不知道的“秘密”,因为这些才是真正的“干货”。正因如此,每个领域都会许多“Why”要去找答案,但在国内是很难找到的,有的仅是一些人云亦云,连作者自己都不知道说什么的肤浅,甚至是错误的论述。看这类图书或文章,问一万个“为什么”都还嫌少。
这里就举一个实例,就是关于Cisco自己的私有协议VTP中的VTP修剪功能。网上介绍这一功能的文章大把,几乎所有Cisco设备图书也都介绍了这一功能,但很遗憾几乎没有看到正确介绍了这一功能的作用和工作原理的图书或文章。不信,如果你学了这项技术,你自己问一下自己,你知道答案吗?相信至少90%的人答不上,或者连自己都没理解的书上或网上说法。最根本原因就是Cisco自己的官方文档是英文的,而且这方面的原理介绍实在是太简单,真正的理解就全靠自己摸索了。PS一句,思科官网上的错误也比较多,特别是一些命令格式输入不严谨,明明是可选的,但从格式上看却是必选的。这对于初学者来说是很难发现的。
1. VTP修剪与Trunk VLAN许可的区别
说到VTP修剪就很容易与Trunk端口的VLAN许可搞混,甚至认为是一样的,因为表面上看它们都是基于VLAN的许可。其实两者的引入背景,或者说出发点是根本不一样的。
引入VTP修剪功能的出发点是为了限制对于邻居交换机来说没有意义的广播、组播和未知单播流量在中继链路上传输,以节省中继链路的带宽使用,因为交换机上根本没有在这些VLAN中的设备(交换机上没有任何端口的Native VLAN,或者Default VLAN是该VLAN),所以最终这些没有意义的泛洪流量也会在邻居交换机上被丢弃。而引入Trunk VLAN许可功能的目的就是明确规定哪些VLAN中的帧可以在当前中继链路上通过,哪些不可以通过,但其出发点不是为了节省中继教链路的带宽使用,而是为了限制设备或用户间的通信(包括各种通信)。
尽管这两者最终的结果是被限制的VLAN中的帧都不能通过所在中继链路,但VTP修剪实际上仅作用于广播、组播和未知单播之类的泛洪流量,因为此时邻居交换机上没没有连接对应VLAN中的设备,不存在该VLAN内部的单播通信。相反,如果邻居交换机连接了某VLAN中的设备,则该VLAN又不能在连接该交换机的Trunk接口上被VTP修剪。而Trunk端口的VLAN许可是直接进行限制,而且是针对这些VLAN中的各种通信流量。
2. VTP修剪功能的工作原理
那问题又来了,为什么邻居交换机上没有连接到位于VLAN的设备,却有该VLAN中的流量发往该交换机呢?这就又涉及到VTP的功能了。VTP是用来做什么的?是用来在交换网络上进行动态VLAN注册的,类似于通用的GVRP协议。启用了VTP功能后,VTP客户交换机上的VLAN配置就可以与VTP服务器上的VLAN配置保持同步,即使某个客户交换机上根本没有连接位于某VLAN中的设备。也就是很可能在VTP客户交换机上创建了许多根本不需要的VLAN。
如图1所示,VTP服务器SwitchB上创建了VLAN 2~5,共4个VLAN。假设各交换机所连接的设备仅位于图中所示的VLAN中。SwitchA和SwitchC根本没有连接位于VLAN 4~5中的设备,所以这两台交换机上实际上也不需要注册这两个VLAN,但VTP的VLAN动态注册是不能限制的,所以SwitchA和SwitchC同样仍有VLAN 2~5这4个VLAN。可通过执行show vlan brief特权模式命令查看,如图2所示。
图1 VTP修剪配置示例拓扑结构
图2 VTP客户交换机动态创建的VLAN
如果仅是VLAN创建还没多大影响,因为没有位于这些VLAN的用户的话,也就不存在这些VLAN内部的单播通信。但是对于广播、组播、未知单播通信,它们不是从特定的路径发给特定的用户,而是会从所有允许这些VLAN通过的Trunk链路上以泛洪方式向邻居交换机发送,即使这些交换机根本没有位于这些VLAN中的设备。最终的结果就是这些交换机在Trunk端口上收到这些流量后直接丢弃。但这些无用的流量在到达到邻居交换机前还是占用了Trunk链路带宽的,造成了带宽浪费。
启用了VTP修剪功能后,以上问题就可以得到有效解决,因为VTP修剪功能会自动根据邻居交换机是否有成员端口分配到该VLAN来决定是否向此邻居交换机发送该VLAN中的流量(其实是同时包括单播和泛洪流量的,只是邻居交换机上没有位于某VLAN中的设备时,就不会存在该VLAN内的单播流量通过,所以实际上只可能有泛洪流量),以实现对某些VLAN中的泛洪流量进行修剪。
交换机如何获知邻居交换机上是否存在有某VLAN中的成员端口呢?这也是VTP中的功能,就是要启用了VTP协议后,当交换机上的VLAN有加入的成员端口(真正加入,不是仅允许通过)时,它会向邻居交换机发送通告(Advertisement)消息,向上游邻居交换机通知它自己在该VLAN上活动的端口,即所加入的成员端口。这些信息随后由上游邻居交换机存储,并用于决定是否应该通过中继端口将VLAN中的泛洪通信转发到交换机。
3. VTP修剪资格列表
默认情况下,在全局启用了VTP修剪功能后,邻居交换机上已动态创建,但所有无成员端口的VLAN中的泛洪量都将被修剪,不允许向该邻居交换机发送。
如在图1中的示例中,仅在VTP服务器SwitchB上创建了VLAN 2~5,所以VTP服务器向VTP客户交换机上传播的也是这4个VLAN的注册信息,在VTP客户交换机SwitchA和SwitchC上自己创建了这4个VLAN,如图2所示。
但因为SwitchA上没有加入VLAN 3~5的端口(只有E0/2端口加入VLAN 2),所以SwitchB连接SwitchA的E0/1接口上的VTP资格列表是VLAN 3~5,而SwitchC上没有加入VLAN 2、4~5的端口(只有E0/2端口加入VLAN 3),所以SwitchB连接SwitchC的E0/2接口上的VTP资格列表是VLAN 2、4~5。执行show interface pruning命令可以查看,如图3所示。
图3 默认的VTP修剪资格列表
在实际配置中,管理员还可针对具体的Trunk端口(可以在VTP客户交换机上,但更多是在VTP服务器上)进行VTP修剪资格列表配置,手工指定允许进行修剪的VLAN,即修剪资格列表。位于这个列表中的VLAN中的泛洪流量都将不再通过该Trunk接口对应的链路向邻居交换机发送,不在这个列表中的VLAN中的泛洪流量仍然可以向邻居交换机发送,尽管该邻居交换机也没有成员端口分配到这些VLAN中。但是一定要注意,在配置修剪资格列表时,其中包括的VLAN必须是所连邻居交换机上没有分配成员端口的VLAN,否则即使加入了修剪资格列表也起不到泛洪流量修剪的作用。可以修剪的VLAN范围为VLAN 2~1001,VLAN 1、VLAN 1002~1005,以及扩展范围VLAN均不能被修剪。
图4是对VTP服务器SwitchB的E0/1和E0/2接口修改了VTP修剪列表后VTP修剪资格列表。
图4 手工修改的VTP资格列表
至于最终效果的验证,可以在设备上抓包,如ARP广播包,看在启用了VTP修剪后,某些VLAN中设备发出的ARP请求包是否还可以通过Trunk链路向邻居交换机传输。
以上仅主要就VTP修剪功能、修剪原理,以及修剪资格列表配置作了比较具体的介绍,当然VTP协议还涉及到许多更深层次的工作原理,如VTP通告、VTP消息内容和格式、VTP协议交互等,在此就不作具体介绍,因为这涉及到太多内容了,具体在我的会员视频课程中有详细介绍,想要深入了解的,请关注我,并私信咨询。
本公司有国内唯一全面包括华为、H3C和Cisco三大主流品牌的超系统、超实战视频课程(共1200小时以上,1000个以上实战实验),在CSDN学院上的课程中心地址为:https://edu.csdn.net/lecturer/74 ,欢迎试听、选购,有问题可以加学员交流QQ群:398772643 ,或加微信windanet咨询。