如果网络中有多台交换机时,位于不同交换机上的相同VLAN的主机之间是如何通信的呢?这就是本章要解决的问题,即跨交换机的VLAN通信。
在交换网络中,链路有两种类型:接入链路,和中继链路
接入链路:通常属于一个VLAN,如主机与交换机之间连接的链路就是接入链路
中继链路:可以承载多个VLAN,中继链路常用来将一台交换机连接到另一台交换机上,或者将交换机连接到路由器上。
在来说下VLAN的标识。
在以太网中实现中继,可使用以下两种封装类型。
1)ISL(Inter-Switch link,交换机间链路)
ISL是Cisco私有的标记方法
ISL报头封装是26字节,CRC(Cyclic Redundancy Check,循环冗余效验)尾部是4字节,总共30字节。
ISL只对帧进行封装,而没有修改帧中的任何内容。
2)IEEE802.1q
802.1q是公有的标记方法,其他厂商的产品也支持。
无论采用哪种方法,设备的双方都必须一致。
对于802.1q的工作原理就不多阐述了。惭愧,小弟也是新手。大家如果需要可以自行去查找资料。
Trunk的模式和协商
通过前面的介绍可以知道,TRUNK是两台Cisco Catalyst 交换机端口之间或者交换机和路由器之间的一条点对点链路。TRUNK可以传输多个VLAN的数据流,并且允许用户将VLAN从一台交换机扩展到多个交换机。
对ISL和IE802.1q的配置要视Cisco交换的IOS而定。可以指定TRUNK使用ISL封装,802.1Q封装或者自动协商封装。
自动协商是由DTP(Dynamic trunking Protocol 动态中继协议)管理的。为思科专有。它同时支持ISL和802.1q两种中继自动协商,但只能用于交换机之间的中继链路,不能用于交换机和路由器。Cisco Catalyst交换机端口默认开启DTP协商
基于IOS的Catalyst交换机支持的Trunk模式如下图
思科2960只支持802.1q
Trunk配置
1)选择封装类型如下:
Switch(config-if)#switchport trunk encapsulation {isl | dot1q | negotiate }
如果选择negotiate,就是指明端口与邻接端口协商,根据对端的设置改变。
2)将接口配置为Trunk口,命令如下:
Switch(config-if)#switchport mode trunk
另外如不需要Trunk传送某个VLAN的数据,可以从Trunk中删除中删除这个VLAN 如:删除vlan 20 :
Switch(config-if)#switchport trunk allowed vlan remove 20
如要添加某个VLAN。命令如下:
Switch(config-if)#switchport trunk allowed vlan add 20
接下来用一个实验案例更深入的了解下。
拓扑图如下:
左边交换机的配置:
Switch(config)#vlan 10
Switch(config-vlan)#exit
Switch(config)#vlan 20
Switch(config-vlan)#exit
Switch(config)#interface range f0/4 - 10
Switch(config-if-range)#switchport mode access
Switch(config-if-range)#switchport access vlan 10
Switch(config-if-range)#exit
Switch(config)#interface range f0/15 - 20
Switch(config-if-range)#switchport mode access
Switch(config-if-range)#switchport access vlan 20
Switch(config-if-range)#exit
Switch(config)#interface fastEthernet 0/24
Switch(config-if)#switchport mode trunk
接下来就是右边的交换机配置差不多就不写上来了。
查看Trunk的信息
Switch#show interfaces fastEthernet 0/24 switchport
Name: Fa0/24
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)
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 encapsulation: dot1q
Administrative private-vlan trunk normal VLANs: none
Administrative private-vlan trunk private VLANs: none
Operational private-vlan: none
Trunking VLANs Enabled: ALL
Pruning VLANs Enabled: 2-1001
Capture Mode Disabled
Capture VLANs Allowed: ALL
Protected: false
Appliance trust: none
在上面的命令输出中可以看出,在端口F0/24上配置接口模式是Trunk,并且工作模式也是TRUNK,封装协议时dot1q,TRunk可以承载所有的VLAN。
接下来我们把VLAN10从Trunk中删除,让它不传送VLAN10的数据。
命令如下:
Switch(config)#interface fastEthernet 0/24
Switch(config-if)#switchport trunk allowed vlan remove 10
然后在观察Trunk的信息
可能我这模拟器有问题,删除了VLAN 10并没显示出来。不过效果确实出来了。
我用左边VLAN10中的客户机ping右边VLAN 10 的客户机如下:
PC>ping 192.168.2.2
Pinging 192.168.2.2 with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Ping statistics for 192.168.2.2:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
因为开始我们把VLAN 10 从Trunk中删除了,所以它不会为我们传送VLAN10的数据了,现在我们在吧它加回来。命令和效果如下:
Switch(config-if)#switchport trunk allowed vlan add 10
接下来在ping下
如下图
我的问题可能是模拟器的问题。
不知道大家出现过这问题没。