【IT168 专稿】企业网络组建和改造项目中,很少有企业只采用一台交换机上实现吧?如果企业规模扩大了,在原来的交换机网络中,如果新添加一台交换机,很可能出来新的问题来,让我们来看看本小节的实际例子。
场景描述:VLAN创建的问题
某平面广告公司原有20多名员工,共有19个客户端计算机接入了公司的交换机。广告公司公司规模较小,并且没有配网络管理员,公司的网络由集成商组建后一直比较稳定的运行着。由于业务的拓展,公司从平面广告业务发展到影视制作等多种媒介资源的为一体的企业。各个部门都招聘了员工,人员从20多名增加到40多名,客户端计算机的数量也翻了一倍,原有的24口交换机已经不能满足现在的需求。
公司新购置了一台24口交换机,一位网络技术相对较好的老员工被安排负责此项工作。这位老兄在之前的网络集成时就负责本公司和集成商的配合工作,此次他按照原来留下的配置文档再新交换机上也敲了一遍。
第1步:创建VLAN
Switch2#vlan database
Switch2(vlan)#vlan 2 name meijie //建立媒介部VLAN
Switch2(vlan)#vlan 3 name shangwu //建立商务部VLAN
Switch2(vlan)#vlan 4 name caiwu //建立财务部VLAN
第2步:把端口分配到VLAN
Switch2(config)#interface range fastEthernet 0/5 – 8
Switch2(config-if)#Switchport access vlan 2 //将5至8端口放入VLAN2中
Switch2(config)#interface range fastEthernet 0/9 – 11
Switch2(config-if)#Switchport access vlan 3 //9至11端口放入VLAN3中
…后续步骤省略
应该注意,interface range fastEthernet X/X –X是应用在Cisco IOS软件12.1以上的版本,如果你使用的是Cisco IOS软件12.1以前的发布的版本的话,应该用命令:Switchport access vlan vlanID,把端口加入VLAN。
完成上述步骤后,将所有客户端从配线架上用跳线接入到交换机的不同端口,并用一条跳线连接了Switch1的fastEthernet 0/2和Switch2的fastEthernet 0/1端口。本以为这项工作就这样顺利完成了,但不同交换机中同一部门的客户端就是无法通信。
起初以为是IP地址配置的问题,但检查客户端之后,发现同一台交换机中(同一VLAN)的客户端通信一点问题也没有。在尝试了一切可能的办法之后,还无法解决问题,所以只能求助原理负责系统集成那家公司前来帮忙。
工程师到达广告公司之后,首先在新交换机上检查了VLAN的配置,发现VLAN的配置没有问题。在特权模式下使用命令用show vlan来检查是否将端口分配给正确的VLAN:
VLAN Name Status Ports
==== =============== ====== =======================
1 default active Fa0/2, Fa0/4, Fa0/16, Fa0/17
Fa0/18, Fa0/19, Fa0/20,
Fa0/22, Fa0/23, Fa0/24,
Gi0/1 Gi0/2
2 meijie active Fa0/5, Fa0/6, Fa0/7, Fa0/8
3 shangwu active Fa0/9, Fa0/10, Fa0/11
4 caiwu active Fa0/12, Fa0/13, Fa0/14, Fa0/15
1002 fddi-default active
1003 token-ring-default active
1004 fddinet-default active
1005 trnet-default active
既然已经分配了正确的VLAN名称和接口,为什么在两台交换机之间无法通信呢?要得出新交换机的客户端和原有交换机不能通信的真正原因,还要从VLAN工作的原理中找出答案。
Trunking 技术的实现
在“7.1.2 VLAN的实现原理”部分看到,要传输多个VLAN的通信,就需要用专门的协议封装或者加上标记(tag),以便接收设备能区分数据所属的VLAN。VLAN标识从逻辑上定义了,数据包使用哪种协议进行封装。而最常用到的是IEEE 802.1Q和CISCO私有的ISL协议。
除IEEE 802.1Q、ISL协议外还有两种封装技术:IEEE 802.10和ATM LAN仿真(LANE)。IEEE 802.10常用于光纤分布接口(FDDI)帧内传达VLAN的信息。而LANE则用于异步传输模式(ATM)网络中传输VLAN。下面介绍IEEE 802.1Q和ISL协议,以替代ISL的动态中继协议。
1.ISL(交换机间链路)
是一种CISCO专用的协议,用于连接多个CISCO交换机。使用ISL后,每个数据帧头部都会被附加26字节的“ISL包头(ISL Header)”,并且在帧尾携带上包括ISL包头在内的整个数据帧进行计算后得到的4字节CRC值。换而言之,就是总共增加了30字节的信息,如图7-5所示。在使用ISL的环境下,当数据帧离开汇聚链路时,只要简单地去除ISL包头和新CRC就可以了。由于原先的数据帧及其CRC都被完整保留,因此无须重新计算CRC。ISL有如用ISL包头和新CRC将原数据帧整个包裹起来,因此也被称为“封装型VLAN(Encapsulated VLAN)”。图7-8中显示了ISL的数据帧。
图7-8 ISL的数据帧
2.IEEE 802.1Q(虚拟桥接局域网标准)
IEEE 802.1Q,俗称“Dot One Q”,正式名称是虚拟桥接局域网标准,用在不同的产家生产的交换机之间。一个IEEE 802.1Q干道端口同时支持加标签和未加标签的流量。一个802.1Q干道端口被指派了一个默认的端口Vlan ID(PVID),并且所有的未加标签的流量在该端口的默认PVID上传输。一个带有和外出端口的默认PVID相等的Vlan ID的包发送时不被加标签。所有其他的流量发送是被加上Vlan标签的。
IEEE 802.1Q所附加的VLAN识别信息,位于数据帧中“发送源MAC地址”与“类别域(Type Field)”之间。具体内容为2字节的TPID和2字节的TCI,共计4字节。在数据帧中添加了4字节的内容,那么CRC值自然也会有所变化。这时数据帧上的CRC是插入TPID、TCI后,对包括它们在内的整个数据帧重新计算后所得的值。
而当数据帧离开汇聚链路时,TPID和TCI会被去除,这时还会进行一次CRC的重新计算。TPID的值,固定为0x8100。交换机通过TPID,来确定数据帧内附加了基于IEEE 802.1Q的VLAN信息。基于IEEE 802.1Q附加的VLAN信息,就像在传递物品时附加的标签。因此,它也被称作“标签型VLAN(Tagging VLAN)”。图7-9中显示了IEEE 802.1Q的数据包。
图7-9 IEEE 802.1Q的数据帧
不论是IEEE 802.1Q的“Tagging VLAN”,还是ISL的“Encapsulated VLAN”,都不是很严密的称谓。不同的书籍与参考资料中,上述词语有可能被混合使用,因此需要大家在学习时格外注意。
3.动态中继协议
动态中继协议DTP,是 VLAN 组中思科的私有协议,主要用于协商两台设备间链路上的中继过程及中继封装 802.1Q 类型。DTP的用途是取代动态ISL(Dynamic ISL,DISL)。
下列是DTP可以配置的几种不同的状态:
* Access:使某个接口无条件进入Access模式,无DTP功能。
* Trunk:使某个接口无条件进入trunk模式并进行trunk链路协商,无论其邻居接口处于何种模式。
* Nonegotiate:指定DTP协商报文不允许在二层接口上发送。非协商状态,使接口成为永久的中继接口。由于接口不使用DTP信息帧进行通信,因此不会有协商发生。如果与非交换机设备相连的交换机接口存在DTP问题,那么在使用trunk之后可以使用nonegotiate,使得接口可以继续中继,但不会发送任何DTP信息。
* Dynamic desirable:使某个接口既主动发送DTP报文,也允许对DTP报文进行响应,这是以太网接口的默认状态。如果邻居接口是中继接口,并且被设置为on,desirable或auto,那么希望desirable状态下的这个接口成为中继接口。
* Dynamic auto:使某个接口可以响应DTP报文,但不允许主动发送DTP报文。只有在相邻接口要求该接口成为中继接口时才会成为中继接口。这是所有交换机接口的默认配置。auto接口不会主动要求对方,如果两个接口都被配置成auto状态,那么这两个接口都不会成为中继端。
* On:无论对端配置如何,该接口始终为中继接口。使用on状态时,必须指明帧的标记方式,因为此状态下接口不与对端进行协商。
* Off:该拉口永远是非中继接口。
隧道技术的用途
在前面已经出现了很多次Trunk这个词汇,但并没有详细的进行解答。我们知道交换机的接口可以运行在接入模式(Access Mode)或者干道模式(Trunk Mode)。交换机接口所连接的链路也被相应地称为接入链路和trunk链路。在接入模式下,接口属于且仅属于一个VLAN。
而Trunk(干道)是一种封装技术,它是一条点到点的链路,主要功能就是仅通过一条链路就可以连接多个交换机从而扩展已配置的多个VLAN,如图7-10所示。
同时trunk链路可以连接一台交换机或者路由器或者服务器(特殊网卡),还可以采用通过trunk技术和上级交换机级联的方式来扩展接口的数量,可以达到近似堆叠的功能,节省了网络硬件的成本。
提示:trunk链路不属于任何一个VLAN,它只是在网络中起到了管道的作用。Trunk承载的VLAN范围,默认下是1~1005,可以修改,但必须有1个Trunk协议。使用Trunk时,两台交换机连接接口上的协议要一致。配置为Trunk链路的接口,通常都是交换机上支持最大带宽的带宽口。
表7-6列出了和Trunk操作有关的命令。
表7-6 在基于IOS的交换机上配置trunk
步 骤 | 命 令 | 解 释 |
1 | Switch#configure terminal | 进入全局配置模式 |
2 | Switch(config)# interface interface-id | 进入要分配的接口 |
3 | Switch(config-if)#switchport mode trunk | 将端口设置为trunk模式 |
3(1) | Switch(config-if)#switchport mode dynamic desirable | 在仅支持802.1Q封装,但支持DTP功能的交换机上主动尝试转换为trunk模式 |
3(2) | Switch(config-if)#switchport mode dynamic auto | 在仅支持802.1Q封装,但支持DTP功能的交换机上转换为trunk模式,由邻居接口决定 |
3(3) | Switch(config-if)#switchport nonegotiate | 在仅支持802.1Q封装,但支持DTP功能的交换机上将接口永久设置为trunk模式,但禁止产生DTP帧 |
4 | Switch(config-if)#switchport trunk encapsulation {isl | dot1q} | 配置接口是使用ISL或者802.1Q封装,两端链路必须采用相同的封装格式 |
5 | Switch(config-if)#switchport trunk allowed vlan remove vlan-list | 要限制trunk传送的VLAN,从允许的VLAN 列表中去除某些VLAN |
6 | Switch(config-if)#end (Ctrl+Z) | 返回到特权模式 |
7 | Switch#show interface interface-id Switchport | 对配置进行检验。一定要加上Switchport关键字,否则会出现show interface输出结果 |
8 | Switch#copy running-config startup-config | 保存配置 |
在默认状态下,Trunk接口允许所有VLAN的发送和接口传输。当然,根据需要,我们也可以将拒绝某些VLAN通过Trunk传输,从而将该VLAN限制与其他交换机的通信,或者拒绝某些VLAN对敏感数据的访问。需要注意的是,不能从Trunk中移除默认的VLAN1。
Switch(config-if)# switchport trunk allowed vlan {add | all | except | remove} vlan-list要限制trunk传送的VLAN,从允许的VLAN 列表中去除某些VLAN。如执行Switch2(config-if)#switchport trunk allowed vlan remove 10 之后,VLAN 10的将不被传递。
配置Trunk上允许的VLAN列表。使用add(添加)、all(所有)、except(除外)和remove(移除)关键字,可以定义允许在Trunk上传输的VLAN。VLAN列表既可以是一个VLAN,也可以是一个VLAN组。当同时指定若干VLAN时,不要在“,”或“-”间使用空格。
利用Trunk解决问题
当多台交换机同时被划分为两个或两个以上VLAN时,需要创建Trunk,使不同交换机之间的VLAN能够借助于一链路进行通信,否则,VLAN将被限制在交换机内,无法与其他交换机进行通信。默认状态下,第二层接口自动处于动态的Switchport模式,当相邻接口(即借助于双绞线或光纤连接在一起的两个接口)支持Trunk,并且配置为Trunk或动态匹配模式,该链接将作为Trunk。
1.建立Trunk隧道
工程师在排除问题的过程中,对Switch1的fastEthernet 0/2和Switch2的fastEthernet 0/1接口分别设置为Trunk,并在每一个接口都采用dot1q协议进行干道封装。
下面是Switch2的配置:
Switch2(config)# interface fastEthernet 0/1
Switch2(config-if)#Switchport mode trunk //设置接口为Trunk模式
Switch2(config-if)#Switchport trunk encapsulation dot1q //设置封装的类型
对于Switch1上的fastEthernet 0/2接口,请和上面的Switch2交换机配置相同的封装协议,这样可以避免很多Trunk不匹配的问题。
需要注意的是,Trunk 端口默认情况下会传送所有的VLAN的通信。要查看Trunk接口的信息和允许通过此接口的VLAN,可以使用命令:show interfas interface-id switchport输出结果:
Name: Fa0/1
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)
Trunking VLANs Enabled: ALL
Pruning VLANs Enabled: 2-1001
Protected: false
Unknown unicast blocked: disabled
Unknown multicast blocked: disabled
Voice VLAN: none (Inactive)
Appliance trust: none
2.测试连通性
工程师在调试完两边的Trunk封装之后,在Switch2交换机VLAN2中有一台主机Host A将IP地址设置为:192.168.0.1/24,在Switch1交换机的VLAN2中也有一台主机Host B其IP地址设置为:192.168.0.2/24,如果在连接Host A可以Ping通,对Host B的话,就可以证明隧道配置没有问题,并已经起到了作用。
但是如果在这两台交换机之中,两个工作站分别在不同的VLAN之中,则相互Ping对方的话,是不能通信的。
从而说明:不同交换机之间的工作站通过Trunk相连接,只有这些工作站在同一个VLAN之中才可以相互通信,而不同VLAN中的工作站是不能通过Trunk来通信的。VLAN技术将一个大的局域网划分为若干个小的虚拟子网,从而使每一个子网都成为一个单独的广播域,子网之间进行通信必须通过三层设备。当VLAN在交换机上划分后,不同VLAN间的设备就如同是被物理地分割。也就是说,连接到同一交换机、然而处于不同VLAN的设备,就如同被物理地连接到两个位于不同网段的交换机上一样,彼此之间的通信一定要经过路由设备;否则,他们之间将无法得知对方的存在,将无法进行任何通信。