本节书摘来自异步社区《CCIE路由和交换认证考试指南(第5版) (第1卷)》一书中的第2章,第2.4节VLAN Trunk协议,作者 【美】Narbik Kocharians(那比克 科查理安) , 【斯洛伐克】Peter Paluch(彼得 派拉奇),更多章节内容可以访问云栖社区“异步社区”公众号查看
2.4 VLAN Trunk协议
VTP能够将VLAN配置信息通告给邻居交换机,这样做可以使工程师只在一台交换机上配置VLAN,同一个VTP域中的所有其他交换机动态学习这些VLAN信息。VTP通告VLAN ID、VLAN名称和VLAN类型,以及每个VLAN的状态。然而,VTP不会通告每个VLAN中有哪些接口,所以工程师仍需要在每台独立的交换机上(使用switchport access vlan命令)配置每个VLAN中关联的接口。
VTP协议有三个版本。CatOS和基于IOS的交换平台广泛支持VTPv1和VTPv2。在本书写作时,基于IOS的交换机能够支持VTPv3了。在入门级别的Catalyst交换机上,从IOS版本12.2(52)SE开始支持VTPv3。
基于IOS的企业级交换机支持且启用的默认VTP版本是VTPv1。它只支持传播正常范围的VLAN。
VTPv2在以下方面有所增强。
支持TrCRF和TrBRF(令牌环集中器中继功能和网桥中继功能)类型的VLAN:这些VLAN用来将令牌环网络分段为多个逻辑的环,并互连网桥。在基于以太网的网络中不使用它们。
支持未知的TLV(类型-长度-值)记录:VTP消息中可以包含存储为TLV记录的额外信息元素。运行VTPv1的交换机会从接收的消息中丢弃所有未识别的TLV,不将它们传播给邻居交换机。启用VTPv2的交换机在传播的消息中保留所有的TLV记录,即使未被识别。
优化的VLAN数据库一致性校验:在VTPv1中,当工程师通过CLI、SNMP或VTP修改VLAN数据库时,会执行VLAN数据库一致性校验。在VTPv2中,只有通过接收的VTP消息带来的修改,才会跳过一致性校验;因为这些消息本身是已经处理CLI或SNMP之后的结果。这是一项实施技术上的优化。
关于VTP的透明模式一直存在着混淆的概念。早期Catalyst系列交换机的IOS文档似乎建议透明模式中的VTPv1交换机,只有在其版本和域名与透明交换机上的配置相同时,才转发VTP消息,而据称VTPv2透明交换机无论域名和版本如何,都会转发VTP消息。较新的Catalyst交换机的文档更不清楚,声明VTPv1和VTPv2透明交换机都会检查域名,并只在其域名与透明交换机上配置的域名相同时,才转发消息。
事实上,在多个同时支持VTPv1和VTPv2的Catalyst交换机上进行的实验表明,无论启用哪个VTP版本,VTP域名为NULL(即未配置)的透明交换机都可以转发所有的VTP消息。配置了域名的透明交换机只有域名相同时才转发VTP消息。
VTPv3与VTPv2有以下方面的不同。
修改了服务器角色:VTPv3中有两种服务器类型:主用(Primary)和备用(Secondary)。主用服务器能够修改VTP域中的内容,一个VTP域中同时最多只能有一个主用服务器。备用服务器(通常就直接称为服务器)不能够修改VTP域中的内容,但可以被提升为主用服务器,从已有的主用服务器中夺回角色。主用服务器角色的所有权是一种运行状态,并不储存在配置中;进一步说,必要时工程师可以在特权EXEC模式中进行配置。这种改进极大地减少了VLAN数据库被意外修改的可能性,因为除了主用服务器之外,无法修改数据库内容。
改进了VTPv3密码存储和用途:设备可以使用加密的形式来存储VTP密码,并且不能显示为明文。设备可以把加密字符串转至不同的交换机上,使这些交换机成为域中合法的成员;在备用服务器的角色提升为主用服务器时,要求设备输入明文形式的密码。
VTPv3可以分发包括私有VLAN在内的完整范围内的VLAN信息:在VTPv3中,在使用扩展范围VLAN和私有VLAN时,无需使用透明模式。然而,即使在VTPv3中,修剪仍只适用于正常范围的VLAN。
VTPv3支持off模式,在此模式中交换机不参与VTPv3操作,并会丢弃所有收到的VTP消息:工程师也可以基于每个Trunk关闭VTP。
VTPv3是一种用来分发各种数据库内容的通用机制,并且不仅限于在一组交换机之间同步VLAN信息:例如,VTPv3也可以在一个VTP域中的所有交换机上,分发和同步MST区域配置。
每台Cisco交换机都使用4种VTP模式之一,如表2-6所示。
VTPv1和VTPv2使用以下4种消息类型。
汇总通告:由VTP服务器和客户端每5分钟生成一次这个消息,以及在每次对VLAN数据库进行修改后产生该消息。此消息携带的信息包括VTP域名、修订版本号、最后一次更新者的身份、最后一次更新的时间戳、针对VLAN数据库计算的MD5和VTP密码(若配置),以及汇总通告之后可选的子集通告消息的数量。汇总通告消息不携带VLAN数据库的内容。
子集通告:在修改VLAN数据库之后,由VTP服务器和客户端服务器生成这个消息。子集通告携带完整的VLAN数据库内容。一个子集可以携带多个VLAN数据库条目。然而,如果VLAN数据库较大,可能需要多个子集进行通告。
通告请求:由VTP服务器或客户端生成这个消息,用来请求邻居发送完整或部分的VLAN数据库。当VTP客户端交换机重启后,交换机进入客户端模式,或当服务器或客户端交换机收到汇总通告后,发现它的修订版本号比自己的高时,就会发送通告请求。
加入:若启用VTP修剪,由每个VTP服务器和客户端交换机每6秒一次周期性地生成这个消息。对于正常范围的每个VLAN来说,加入消息中包含1比特字段,用来表示这个VLAN是活跃的还是未使用的(即被修剪的)。
在本书出版时,VTPv3消息类型的详情未被公布。
注释:
在任意的VTP版本中,交换机只在Trunk接口上传输和接收VTP消息。Access接口不发送也不接收VTP消息。为了使两台交换机在VTP中通信,它们必须首先通过工作的Trunk链路互连。
2.4.1 VTP处理及修订版本号
首先来看一看VTPv1和VTPv2的更新过程,VTPv3中的区别将在之后解释。
在VTPv1和VTPv2中,更新的过程开始于:交换机管理员在一台VTP服务器交换机上添加、删除或更新VLAN。当新的配置出现时,VTP服务器将旧的VTP修订版本号加1,并通告完整的VLAN配置数据库以及新的修订版本号。
通过使用VTP修订版本号的概念,交换机能够获知VLAN数据库的变化。交换机在收到VTP更新后,如果这个VTP更新中的修订版本号比交换机当前的修订版本号大,交换机就认为有新版本的VLAN数据库。图2-7中显示出旧的VTP修订版本号是3;服务器增加了一个新的VLAN(将修订版本号增加至4),然后传播VTP数据库给其他交换机。
Cisco交换机默认使用VTP服务器模式,但直到工程师配置了VTP域名后,它们才开始发送VTP更新。这时,服务器会开始发送VTP更新,每次VLAN的配置有变更时,交换机都会使用更新的数据库和修订版本号。然而,图2-7中的VTP客户端事实上不需要配置VTP域名。若未配置,客户端假设自己应该使用第一个收到的VTP更新中的VTP域名。不过工程师需要配置客户端的VTP模式,使用vtp mode全局配置命令。附带说明,交换机之间必须通过Trunk链路互连,因为VTP消息只通过Trunk链路进行交换。
VTP客户端和服务器一样,都会接受来自其他VTP服务器和客户端交换机的VTP更新。为了获得更好的可用性,使用VTP的交换网络需要至少两个VTP服务器交换机。在正常操作的过程中,工程师在一台服务器交换机上更改VLAN信息,另一台VTP服务器(及所有客户端)获知VLAN数据库的变更。获知后,VTP服务器和客户端将独立地将VLAN配置储存在自己Flash中的vlan.dat文件中;它们不在NVRAM中存储VLAN配置。
当一个LAN中安装了多个VTP服务器时,有可能发生意外重写网络中的VTP配置。如果Trunk链路失效了,然后工程师在多个VTP服务器上进行了更改,VTP配置数据库可能会相互有所区别,且分别使用不同的配置版本号。当工程师把之前分离的LAN部分使用Trunk重新连接后,会有更高修订版本号的VTP数据库在VTP域中传播,替换一些交换机中的VTP数据库。还需要注意的是,因为VTP客户端可以生成VTP更新,在一些情况下,VTP客户端可以更新另一台VTP客户端或服务器上的VTP数据库。总之,为了使新连接的VTP服务器或客户端更改其他交换机的VTP数据库,以下条件必须成立:
连接新交换机的新链路是Trunk;
新交换机与其他交换机使用相同的VTP域名;
新交换机的修订版本号比已有交换机的高;
若已有交换机配置了密码,新交换机必须配置相同的密码。
为了保护VTP域中不会加入未经授权的交换机,工程师应该使用VTP密码。VTP汇总通告中会携带一个MD5散列值,这个值是根据VLAN数据库以及VTP密码(若配置)计算出的。交换机在以汇总通告和至少一个子集通告的形式,收到VLAN数据库更新后,它会使用这些消息重建的VLAN数据库,以及自己的VTP密码来计算MD5散列值,并与汇总通告中的MD5散列值进行比较。为了使MD5散列值的计算结果相同,发送方和接收方交换机必须使用相同的VTP密码,且消息必须真实(即在传输过程中未被修改或伪造)。跟大家认为的有些不同,汇总通告中的MD5散列值并不是只是根据VTP密码计算出的。而且,MD5散列值——只在汇总通告中出现——也并不是用来保护VTP消息本身的。在有些环境中,工程师在所有交换机上使用VTP透明或off模式,避免交换机监听其他交换机的VTP更新,进而错误地修改自己的VLAN数据库。
VTPv3通过引入主用服务器(primary server)的概念,解决了无意(或有意)重写VLAN数据库的问题。主用服务器是在一个VTPv3域中,唯一可以在域中传播VLAN数据库的交换机。VTPv3服务器及客户端只有在使用相同的域名和主用服务器身份(由MAC地址表示)时,才共享VLAN数据库。工程师只能在主用交换机上修改VLAN数据库。
其他配置为服务器的VTPv3交换机被称为备用交换机(secondary server)。与VTPv1/VTPv2不同,在VTPv3中,工程师不能修改备用交换机的VLAN数据库;被用交换机可以备提升为主用服务器的角色,从已有的主用服务器手中夺取角色。工程师不能修改VTPv3客户端的VLAN数据库,客户端也不能被提升为主用服务器的角色。备用服务器和客户端都会存储一份主用服务器VLAN数据库的副本,并与它们的邻居服务器和客户端共享VLAN数据库,前提是它们对于主用服务器的身份达成了一致。这意味着即使在VTPv3中,有更高修订版本号的备用服务器或客户端交换机都能重写邻居的VLAN数据库,但为了能够实现这种行为,这些交换机的域名、主用服务器身份和VTP密码必须相同。
在VTPv3域中,如果两个或多个服务器或客户端交换机对于主用服务器的身份有着不同意见,这种状态称为冲突(Conflict)。冲突交换机之间不会同步VLAN数据库,即使所有其他VTP参数都相同。这个冲突的概念是VTPv3用来对抗无意VLAN数据库重写的核心。因为工程师只能在主用服务器上进行VLAN数据库的更改,对于主用服务器身份达成一致的交换机也立刻共享主用服务器的数据库。如果交换机从网络中断开连接,那么除非它是主用服务器本身,否则断开连接的交换机只有在角色被提升为主用服务器后,工程师才能修改它的VLAN数据库。在交换机重新连回到网络后,它认为的主用服务器与邻居所知道的主用服务器不同;这时就产生了冲突。因此,即使它的VLAN数据库修订版本号更高,它的VLAN数据库也不会被邻居交换机接受。这样一来,虽然不能完全避免,但已经在很大程度上减小了无意的VLAN数据库重写的可能性。
一个VTPv3域中最多有一个主用服务器。只有配置为VTPv3服务器的交换机才能被提升为主用服务器的角色,提升过程总是由工程师在特权EXEC模式中通过命令vtp primary执行的。因而主用服务器的状态是易失的运行状态,并不能被永久地存储在配置中。在主用服务器重启之后,它默认只能成为备用服务器。工程师可以通过vtp primary命令重新把交换机提升为主用服务器角色,之后它会向邻居泛洪自己的VLAN数据库;这时就算新的主用服务器的修订版本号更低,邻居也会接受并进一步泛洪。这样,新的主用服务器数据库就在VTP域中声明完成了。
在使用VTPv3时,工程师无法再通过将交换机设置为透明模式,之后再恢复原来的设置,意图把配置修订版本号重置为0了。只有通过修改VTP域名或配置VTP密码,才能将修订版本号重置为0。
如果一台VTPv3交换机检测到其接口上连接有运行VTPv1或VTPv2的较老的交换机,它会把该接口上的操作恢复为VTPv2操作,使较老的交换机能够在VTPv2中进行操作。VTPv3和只支持VTPv1的交换机之间的协作是无法支持的。
2.4.2 VTP配置
VTP默认向所有活跃的Trunk接口(ISL或802.1Q)发出更新。然而,在Cisco设备的所有默认设置中,如果交换机为服务器模式,但未配置VTP域名,则它们不会发送任何VTP更新。在交换机可以从另一台交换机获知VLAN信息之前,工程师必须使用工作Trunk将其互连,且至少有一台交换机有最基本的VTP服务器配置——具体地说,就是域名配置。
例2-10显示了工程师为Switch3配置VTP域名,将其设置为VTP服务器,并通告其配置的VLAN。示例中也列出了几个关键的VTP show命令(注意示例以Switch3上的VLAN 21和22配置开始,所有四台交换机全部都使用默认设置。还需记住,根据设备运行的IOS版本和支持/运行的VTP版本的不同,这些show命令的输出内容也可能有所不同)。
例2-10 VTP配置和show命令示例
! First, Switch3 is configured with a VTP domain ID of CCIE-domain.
Switch3# conf t
Enter configuration commands, one per line. End with CNTL/Z.
Switch3(config)# vtp domain CCIE-domain
Changing VTP domain name from NULL to CCIE-domain
! Next, on Switch1, the VTP status shows the same revision as Switch3, and it
! learned the VTP domain name CCIE-domain. Note that Switch1 has no VTP-related
! configuration, so it is a VTP server; it learned the VTP domain name from
! Switch3.
Switch1# show vtp status
VTP Version capable : 1 to 3
VTP version running : 1
VTP Domain Name : CCIE-domain
VTP Pruning Mode : Disabled
VTP Traps Generation : Disabled
Device ID : 0023.ea41.ca00
Configuration last modified by 10.1.1.3 at 9-9-13 13:31:46
Local updater ID is 10.1.1.1 on interface Vl1 (lowest numbered VLAN interface
found)
Feature VLAN:
--------------
VTP Operating Mode : Server
Maximum VLANs supported locally : 1005
Number of existing VLANs : 7
Configuration Revision : 2
MD5 digest : 0x0E 0x07 0x9D 0x9A 0x27 0x10 0x6C 0x0B
0x0E 0x35 0x98 0x1E 0x2F 0xEE 0x88 0x88
! The show vlan brief command lists the VLANs learned from Switch3.
Switch1# show vlan brief
VLAN Name Status Ports
---- -------------------------------- --------- -------------------------------
1 default active Fa0/1, Fa0/2, Fa0/3, Fa0/4
Fa0/5, Fa0/6, Fa0/7, Fa0/10
Fa0/11, Fa0/13, Fa0/14, Fa0/15
Fa0/16, Fa0/17, Fa0/18, Fa0/19
Fa0/20, Fa0/21, Fa0/22, Fa0/23
Gi0/2
21 VLAN0021 active
22 ccie-vlan-22 active
1002 fddi-default act/unsup
1003 token-ring-default act/unsup
1004 fddinet-default act/unsup
1005 trnet-default act/unsup
例2-11显示了几个VTP配置选项的示例。表2-7列出了最常使用的选项及其解释。
例2-11显示了VTPv3的案例。在运行VTPv3时,最显著的区别是工程师需要指定一个交换机为主用服务器,这需要在能够执行VLAN数据库更改和使用VTP密码之前,使用vtp primary命令进行配置。虽然以下示例中并没有显示,但工程师可以使用命令vtp mode off在交换机上全局关闭VTPv3,或使用命令no vtp基于每个接口关闭(工程师可以使用命令show vtp interface轻松查看每个接口上的VTP状态)。值得注意的是,在将VTP模式从off更改为其他模式后,除IOS中固有的VLAN(1、1002~1005)外,所有现有的VLAN都会被删除。
例2-11 VTPv3使用示例
! To use VTPv3, each switch has to be configured individually for version 3 opera-
! tion. It is assumed that all four switches have been converted to VTPv3. Switches
! 1 and 2 are configured as VTP servers, switches 3 and 4 are configured as VTP
! clients. Only the Switch3 configuration is shown here for brevity purposes.
Switch3(config)# vtp version 3
Switch3(config)#
Sep 9 15:49:34.493: %SW_VLAN-6-OLD_CONFIG_FILE_READ: Old version 2 VLAN configuration file detected and read OK. Version 3
files will be written in the future.
Switch3(config)# vtp mode client
Setting device to VTP Client mode for VLANS.
! An attempt to create a new VLAN on Switch1 will fail, as the Switch1 has not yet
! been promoted to the role of primary server. The example also shows how to
! promote it, and subsequently create the VLAN without further obstacles. The "No
! conflicting VTP3 devices found." statement means that all switches in the VTP
! domain agree on the identity of the current primary server and thus share its
! VLAN database.
Switch1# conf t
Enter configuration commands, one per line. End with CNTL/Z.
Switch1(config)# vlan 23
VTP VLAN configuration not allowed when device is not the primary server for vlan database.
Switch1(config)# do vtp primary
This system is becoming primary server for feature vlan
No conflicting VTP3 devices found.
Do you want to continue? [confirm]
Switch1(config)#
Sep 9 17:06:59.332: %SW_VLAN-4-VTP_PRIMARY_SERVER_CHG: 0023.ea41.ca00 has become the primary server for the VLAN VTP feature
Switch1(config)# vlan 23
Switch1(config-vlan)# name ccie-vlan-23
Switch1(config-vlan)# exit
! On Switch3, the show vtp status shows:
Switch3(config)# do show vtp status
VTP Version capable : 1 to 3
VTP version running : 3
VTP Domain Name : CCIE-domain
VTP Pruning Mode : Disabled
VTP Traps Generation : Disabled
Device ID : 0023.ea93.8e80
Feature VLAN:
--------------
TP Operating Mode : Client
Number of existing VLANs : 8
Number of existing extended VLANs : 0
Maximum VLANs supported locally : 255
Configuration Revision : 2
Primary ID : 0023.ea41.ca00
Primary Description : Switch1
MD5 digest : 0x2A 0x42 0xC5 0x50 0x4B 0x9C 0xB6 0xDE
0x17 0x8E 0xE0 0xB6 0x2E 0x67 0xA4 0x9C
Feature MST:
--------------
VTP Operating Mode : Transparent
Feature UNKNOWN:
--------------
VTP Operating Mode : Transparent
! Trying to promote the Switch3 to the role of primary server would fail, as it is
! configured to operate as a client:
Switch3(config)# do vtp primary
System can become primary server for Vlan feature only when configured as a server
! The password handling in VTPv3 has been improved. The password can be configured
! as being hidden, in which case it will never be displayed again in plaintext:
Switch1(config)# vtp password S3cr3tP4ssw0rd hidden
Setting device VTP password
Switch1(config)# do show vtp password
VTP Password: 8C70EFBABDD6EC0300A57BE402409C48
! This string can be used to populate the password setting on other switches
! without ever knowing the plaintext form, e.g.:
Switch2(config)# vtp password 8C70EFBABDD6EC0300A57BE402409C48 secret
Setting device VTP password
! After the password is configured in the secret form (or originally configured in
! the plain form and marked hidden), any attempt to promote a switch to the primary
! server role will require entering the password in the plaintext form into the
! CLI. Without knowing the plaintext form of the password, it is not possible to
! designate a switch as a primary server:
Switch2(config)# do vtp primary
This system is becoming primary server for feature vlan
Enter VTP Password:
Password mismatch
Switch2(config)# do vtp primary
This system is becoming primary server for feature vlan
Enter VTP Password:
No conflicting VTP3 devices found.
Do you want to continue? [confirm]
Switch2(config)#
Sep 9 17:10:42.215: %SW_VLAN-4-VTP_PRIMARY_SERVER_CHG: 0017.9446.b300 has become
the primary server for the VLAN VTP feature
正常范围和扩展范围的VLAN
因为一些历史原因,有些VLAN编号是正常范围的,而其他的是扩展范围的。正常范围VLAN是VLAN 1~1005,可以通过VTP版本1和2进行通告。工程师可以在VLAN数据库模式和全局配置模式中配置这些VLAN,详细配置将被存储在Flash中的vlan.dat文件中。
扩展范围VLAN是1006~4094。如果使用VTPv1或VTPv2,工程师不能在VLAN数据库模式中配置这些额外的VLAN,它们也不能被存储在vlan.dat文件中,而且还不能通过VTP进行通告。事实上,为了配置这些VLAN,交换机必须为VTP透明模式(而且,为了兼容基于CatOS的交换机,还要小心使用VLAN 1006~1024)。VTPv3消除了这些限制:VTPv3能够通告正常范围和扩展范围的VLAN。而且对于VTPv3来说,关于所有VLAN的信息都被存在Flash中的vlan.dat文件中。
ISL和802.1Q现在都支持扩展范围的VLAN。起初,ISL只支持正常范围的VLAN,当时只使用ISL头部中预留15位中的10位来标识VLAN ID。后来定义的802.1Q使用12位VLAN ID字段,从而能够支持扩展范围的VLAN。之后,Cisco对ISL进行更改,使用VLAN ID字段中预留15位中的12位,进而支持扩展范围的VLAN。
表2-8总结了VLAN编号并提供了一些额外的注释。
2.4.3 存储VLAN配置
Catalyst IOS在以下位置之一存储VLAN和VTP配置——在称为vlan.dat的Flash文件中储存,或在运行配置中储存(术语“Catalyst IOS”指使用IOS的交换机,而不是Catalyst OS,后者常称为CatOS)。IOS在选择存储位置时,一部分基于VTP版本和模式,一部分基于VLAN是正常范围还是扩展范围。表2-9基于配置VLAN使用何种配置模式、VTP模式和VLAN范围描述了将发生的操作(注意VTPv1/VTPv2客户端也在vlan.dat中存储VLAN配置,但它们不理解扩展范围VLAN)。
对于VTPv3来说,情况被极大地简化了:无论模式如何(服务器、客户端、透明或off),正常和扩展范围的VLAN都被储存在vlan.dat文件中。如果工程师选择透明或off模式,VLAN的配置也出现在运行配置(running-config)中。
1交换机重启时,如果VTP模式及vlan.dat文件中的域名与启动配置(startup-config)文件不同,交换机只使用vlan.dat文件的内容进行VLAN配置。
注释:
表2-9中的配置特性不包括接口配置命令switchport access vlan;其中包括创建VLAN(vlan命令)和VTP的配置命令。
对于CatOS配置更有经验的读者可能会感兴趣的是,清除startup-config文件并重启Cisco IOS交换机时,实际上并没有清除正常范围VLAN和VTP配置信息。为了清除VLAN和VTP配置,工程师需要使用EXEC命令delete flash:vlan.dat。还需注意,如果有多台交换机在VTP服务器模式中,删除一台交换机上的vlan.dat并重启,一旦交换机恢复并与邻居建立Trunk链路,它就会通过其他VTP服务器的VTP更新获知旧的VLAN数据库。