基于GNS3的生成树协议仿真

2018-12-28 08:47孙光懿刘云月
关键词:层交换机网段环路

孙光懿 杨 媛 刘云月

(1.天津音乐学院图书信息中心,天津 300171; 2.天津市宁河区人才交流服务中心,天津 301500)

0 引 言

当今,网络已成为人们日常生产生活不可替代的要素,其可靠性的高低对用户来说显得尤为重要.现实中为了提高网络的可靠性多使用冗余架构,即交换机与交换机之间通过创建多个链接来实现三层链路冗余与二层链路冗余,这样以来就可以有效避免网络中的单点故障,即使其中某条链路出现故障,数据还可以通过另一条冗余链路进行转发.但是二层链路的冗余往往会带来桥接环路,桥接环路的存在对于以太网来说是灾难性的,数据帧会在组成环路的设备间不停的循环转发,这必然会引起交换机CAM表不稳定、相同数据帧传输、产生广播风暴等一系列问题,最终导致交换机内存与CPU资源耗尽,网络彻底瘫痪.这一问题随着1985年 STP协议[1-2]的诞生(早期STP协议的版本为IEEE 802.1D,随着网络技术的发展目前已有多个版本的生成树协议)得到了有效解决,它不仅可以为网络提供二层冗余链路,而且还负责解决二层环路问题.

1 STP[3-4]

1.1 生成树协议的工作原理

STP协议通过应用SPA算法,在存在环路的二层网络创建一个逻辑无环树,从而确保去往任意目标地址只存在一条活动路径.一方面它通过阻塞环路设备上某个特定端口,在逻辑上切断二层桥接环路,防止广播风暴的产生;另一方面承担数据转发的这条链路如果发生故障,STP会再次进行计算,在逻辑上被切断的链路也会重新建立连通性,从而保证数据的正常转发.需要清楚认识到的一点是:二层环路中的各设备应用STP协议后,虽然逻辑上的环路不存在了,但是物理上的环路依然存在.

1.2 桥协议数据单元

桥协议数据单元(BPDU)[5-6]是STP协议定义的一种二层消息帧,拥有配置BPDU和TCN BPDU两种类型.BPDU字段中的TYPE值决定了BPDU的类型,配置BPDU的TYPE值为0x00,TCN BPDU的TYPE值为0x80.配置BPDU主要用来计算STP,一般情况下非根交换机只有根端口才可以获取配置BPDU.而TCN BPDU主要用来向应用STP协议的各交换机通告网络拓扑结构的变化,当其中一台非根交换机发现拓扑结构发生改变后,就会从自己的根端口向根交换机发送TCN BPDU,其它非根交换机收到TCN BPDU后再从自己的根端口转发出去,这样层层的转发直到根交换机收到为止,这时TCN BPDU的使命才算真正完成.收到TCN BPDU的根交换机则会发出一个正常的配置BPDU作为回应.由此可见,应用STP协议的交换机不仅通过BPDU来交换STP信息,而且还使用它来确定网络拓扑结构,以及对网络拓扑变化及时做出回应.通常交换机为了交换最新拓扑信息,每隔2秒钟就会向其所有端口发送BPDU,(端口自身的MAC地址即为源地址,STP协议组播MAC地址01-80-c2-00-00-00即为目的地址)从而快速鉴别二层网络中是否有环路的存在.BPDU消息格式如图1所示.

图1 BPDU消息格式

1.3 根交换机及端口的选举方法

(1)选举根交换机[7]

我们可以把根交换机理解为生成树拓扑结构的逻辑中心,网络中数据流的选路过程都要围绕根交换机来开展.在启用STP协议的二层环路交换机中选举根交换机是一个长久持续的过程,最初每台交换机不仅会向相邻交换机发送BPDU,而且也会接收来自相邻交换机的BPDU,并与自身的BID相比较(BID由交换机的优先级和MAC地址构成,由于MAC地址具有唯一性,因此对每台交换机来说BID也是唯一的),如果接收到的BID值小于自身的BID值,则会认为自身不是根交换机,从而不再向相邻交换机发送BPDU;如果接收到的BID值大于自身的BID值,则会认为自身就是根交换机并继续向相邻交换机发送BPDU.最终,拥有最低优先级的交换机(交换机默认优先级为32768)将会被选举为根交换机.如果出现交换机优先级相同的情况,则会通过比较交换机MAC地址大小的方式来选举根交换机,拥有最低MAC地址的交换机成为根交换机.另外,后期如果有BID更低的交换机加入网络,那么这台交换机会被选举为新的根交换机.

(2)选举根端口[8]

在生成树协议工作过程中根端口发挥着极其重要的作用,不仅承担着将数据流转发到根交换机的重任,而且还负责将收到的数据帧源MAC地址加入到交换机的CAM表中.根端口的选举由非根交换机端口去往根交换机链路开销的大小(默认情况下,链路开销大小基于链路带宽得出)所决定,开销值最小的端口即为根端口.如果非根交换机上出现端口开销值一样的情况,那么拥有最小端口ID(端口ID由端口优先级和端口号构成)的端口就会被选举为这台非根交换机的根端口.需要说明的一点是,根端口只存在于非根交换机上,并且每台非根交换机只有一个根端口.

(3)选举指定端口

二层环路中的每条链路都存在一个向根交换机接收和发送流量的端口,此端口即为指定端口.指定端口通常选择存在于根交换机上(根交换机上所以端口均为指定端口),两台非根交换机的链路之间必定有一个端口为指定端口,指定端口的选举由非根交换机到根交换机的链路开销大小所决定,链路开销最小的非根交换机所在的链路的端口为指定端口.如果两条链路开销相同,则继续比较两台非根交换机的BID,拥有最小BID的非根交换机所在的链路的端口为指定端口.

(4)非指定端口

非指定端口通常处于逻辑阻塞状态,可以接收BPDU,但是不负责转发任何数据帧.在启用STP协议的二层环路中,除根端口及指定端口外的其它端口都属于非指定端口.

2 GNS3网络仿真软件简介

GNS3[9]是一款可以运行在WINDOWS、LINUX及苹果系统中的图形化网络仿真软件,目前最新版本为GNS3-2.0.3.相比思科公司推出的仿真软件Cisco Packet Tracer而言,GNS3由多款软件整合而成并且是开源的,可以实现的功能更多.不仅支持多种型号的思科交换机、路由器以及防火墙等设备的模拟仿真,而且还可以与现实中网络环境进行深度对接,具有免费、真实可信、用户操作性强等特点,适用于模拟各类型复杂网络环境.

GNS3主要包含以下这几款组件Dynamips、Qemu、Dynagen、Wireshark.其中,Dynamips也是一款开源软件,它通过模拟思科设备的实际运行环境,能够直接加载并运行思科IOS镜像,不足的一点是操作界面为命令行模式,当需要模拟大型复杂网络环境时,用户的配置难度会成倍增加.Qemu主要用来在GNS3上模拟PIX防火墙、ASA防火墙等设备.Dynagen是Dynamips的前端程序,它使用类ini配置文件来生成网络拓扑.Wireshark则是一款著名的开源数据包分析软件,支持Linux与Windows操作系统,用户可以通过它实时捕获并分析网络和上层协议的各种信息.

3 仿真实验[10-14]

我们在GNS3网络仿真平台的基础上,使用三台交换机和四台终端计算机模拟构建一个小型局域网.其中SW1为三层交换机,负责数据包的快速交换与路由,局域网内VLAN60与VLAN70两个网段的网关均在其上建立.VLAN60的网关地址为192.168.60.1,VLAN70的网关地址为192.168.70.1.SW2与SW3为两台二层交换机,用以连接局域网内的四台终端计算机即C1、C2、C3和C4,它们之间可以互相访问.三台交换机之间通过trunk链路相连(每条链路带宽均为100 Mbit/s),通过拓扑图不难发现,局域网中有二层环路的存在.为了消除二层环路,保障局域网能够正常工作,我们在三台交换机SW1、SW2、SW3上实施生成树协议,同时将三层交换机SW1设置为VLAN1、VLAN60与VLAN70的根交换机.局域网网络拓扑如图2所示.

图2 局域网网络拓扑

3.1 IP地址分配

局域网内VLAN默认网关及终端计算机IP地址分配如图3所示.

图3 局域网内VLAN默认网关及终端计算机IP地址

3.2 交换机接口配置[6]

我们在三层交换机上建立VLAN 60与VLAN 70两个网段,并启用路由功能,以保证两个网段的用户可以互连互通.

(1)配置三层交换机SW1

SW1#vlan database

SW1(vlan)#vlan 60//建立VLAN 60

SW1(vlan)#vlan 70//建立VLAN 70

SW1(config)#ip routing //启用三层交换机路由功能

SW1(config)#int vlan60

SW1(config-if)#ip add 192.168.60.1 255.255.255.0

SW1(config)#int vlan70

SW1(config-if)#ip add 192.168.70.1 255.255.255.0

SW1(config)#int range f0/0-1

SW1(config-if-range)#sw mode tr //将三层交换机SW1的f0/0与f0/1两个端口设置成TRUNK工作模式

(2)配置二层交换机SW2

SW2#vlan database

SW2(vlan)#vlan 60

SW2(vlan)#vlan 70

SW2(config)#int range f0/0-2

SW2(config-if-range)#sw mode tr //将二层交换机SW2的f0/0、f0/1与f0/2三个端口设置成TRUNK工作模式

SW2(config)#int f0/3//此接口连接计算机C1

SW2(config-if)#sw access vlan 60

SW2(config)#int f0/4//此接口连接计算机C2

SW2(config-if)#sw access vlan 70

(3)配置二层交换机SW3

SW3#vlan database

SW3(vlan)#vlan 60

SW3(vlan)#vlan 70

SW3(config)#int range f0/1-2

SW3(config-if-range)#sw mode tr //将二层交换机SW3的f0/1与f0/2两个端口设置成TRUNK工作模式

SW3(config)#int f0/3//此接口连接计算机C3

SW3(config-if)#sw access vlan 60

SW3(config)#int f0/4//此接口连接计算机C4

SW3(config-if)#sw access vlan 70

3.3 交换机STP配置[7-9]

为了保证三层交换机SW1为VLAN1、VLAN60与VLAN70网段的根交换机,在这里我们有必要为其设置交换机的优先级.如果不为其设置优先级,将不能保证三层交换机SW1为VLAN1、VLAN60与VLAN70网段的根交换机.届时三台交换机的优先级将同为默认值32 768,在交换机优先级相同的情况下,根交换机的选举将由交换机的MAC地址大小来决定,一般来说生产年代越早的交换机其MAC地址越小,也就是说生产年代最早的交换机最有可能成为根交换机,这显然是不合理的.

(1)配置三层交换机SW1

SW1(config)#spanning-tree vlan 1 priority 12288

SW1(config)#spanning-tree vlan 60 priority 12288

SW1(config)#spanning-tree vlan 70 priority 12288

(2)配置二层交换机SW2

SW2(config)#spanning-tree vlan 1

SW2(config)#spanning-tree vlan 60

SW2(config)#spanning-tree vlan 70

(3)配置二层交换机SW3

SW3(config)#spanning-tree vlan 1

SW3(config)#spanning-tree vlan 60

SW3(config)#spanning-tree vlan 70

3.3.1配置PortFast特性

在二层接入交换机Access端口上启用PortFast特性,一方面可以使其端口立即进入转发状态,最大限度的减少等待STP的收敛时间.另一方面可以使端口在发生UP或DOWN状态变化时,不会产生TCN BPDU消息.这一点对于大型网络来说,可以有效避免因大规模PC机开关机,造成大量TCN BPDU消息交换现象的发生.

(1)配置二层交换机SW2

SW2(config)#spanning-tree portfast defau //二层交换机SW2上所有 access端口启用portfast特性

(2)配置二层交换机SW3

SW3(config)#spanning-tree portfast defau //二层交换机SW3上所有 access端口启用portfast特性

3.3.2配置BPDU保护

配置BPDU保护不仅可以有效加强STP域边界,而且还可以保护PortFast端口的完整性.通常交换机端口在启用PortFast特性后,只能对BPDU进行侦听,而不应该收到它.配置BPDU保护以后,即使启用PortFast特性的交换机端口收到了BPDU,该端口也会立即进入“err-disable”状态,从而避免网络中环路的产生.

(1)配置二层交换机SW2

SW2(config)#spanning-tree portfast bpduguard defau //二层交换机SW2所有 portfast端口上启用BPDU保护

(2)配置二层交换机SW3

SW3(config)#spanning-tree portfast bpduguard defau

3.3.3配置根保护

配置根保护主要为了防止新加入到网络中的交换机被选举为根交换机,从而影响网络的稳定.当交换机端口启用根保护后,该端口将会成为指定端口,并且在任何情况下也不会被选举为根端口.在这里我们以交换机SW2为例,给出根保护的详细配置命令.

(1)配置二层交换机SW2

SW2(config)#int range f0/3-24

SW2(config)#spanning-tree guard root

4 仿真测试

4.1 各交换机STP协议状态

为了节省文章的篇幅,在这里我们以局域网VLAN 60网段为例,通过命令分别查看SW1、SW2、SW3三台交换机上STP协议的运行状态,并分析根交换机、根端口、指定端口、非指定端口的选举过程.

(1)SW1上STP协议的相关信息

SW1#sh spanning-tree vlan 60 bri

Spanning tree enabled protocol ieee

Root ID Priority 12288

Address cc00.1ca0.0001 //交换机MAC地址为cc00.1ca0.0001

This bridge is the root

Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec //各计时器的值

Bridge ID Priority 12288

Address cc00.1ca0.0001

Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec

Aging Time 300

//由于三层交换机SW1为根交换机,因此Bridge ID 与Root ID信息相同.

Interface Designated

Name Port ID Prio Cost Sts Cost Bridge ID Port ID

FastEthernet0/0 128.1 128 19FWD 0 4096 cc00.1ca0.0001 128.1

FastEthernet0/1 128.2 128 19FWD 0 4096 cc00.1ca0.0001 128.2

通过以上信息我们可以得出以下结论:三层交换机SW1为根交换机,(由于三层交换机SW1的优先级为12288,比其它交换机优先级均低,因此SW1为根交换机.)其运行的STP协议为IEEE 802.1D,MAC地址为cc00.1ca0.0001,f0/0与f0/1端口均为指定端口,处于转发状态且端口ID分别为128.1和128.2.

(2)SW2上STP协议的相关信息

SW2#sh spanning-tree vlan 60 bri

Spanning tree enabled protocol ieee

Root ID Priority 12288

Address cc00.1ca0.0001

Cost 19

Port 1 (FastEthernet0/0)

Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec

Bridge ID Priority 32768

Address cc02.1ca0.0001

Interface Designated

Name Port ID Prio Cost Sts Cost Bridge ID Port ID

FastEthernet0/0 128.1 128 19 FWD 0 4096 cc00.1ca0.0001 128.1

FastEthernet0/2 128.3 128 19 BLK 19 32768 cc01.1ca0.0001 128.3

FastEthernet0/3 128.4 128 19 FWD 19 32768 cc02.1ca0.0001 128.4

FastEthernet0/4 128.5 128 19 FWD 19 32768 cc02.1ca0.0001 128.5

通过以上信息我们可以得出以下结论:二层交换机SW2 的优先级为32768,其运行的STP协议为IEEE 802.1D,MAC地址为cc02.1ca0.0001.f0/0、f0/3、f0/4端口处于转发状态,其中为f0/0端口为根端口,端口ID为128.1.(SW2去往根交换机SW1共有两条路径,从f0/0端口到达SW1的开销值为19,从f0/2端口到达SW1的开销值为38.)f0/3与f0/4端口分别连接终端计算机C1、C2,均为指定端口.f0/2端口为非指定端口,处于阻塞状态,从而保证了局域网中没有二层环路的存在.(二层交换机SW2的f0/2端口与SW3的f0/2端口之间存在一条直连链路,两台交换机不仅到达根交换机SW1的开销值相同(开销值均为19)而且优先级也相同,由于SW2的MAC地址大于SW3的MAC地址cc01.1ca0.0001,因此SW2上的f0/2端口为非指定端口,SW3上的f0/2端口为指定端口.)

(3)SW3上STP协议的相关信息

SW3#sh spanning-tree vlan 60 bri

Spanning tree enabled protocol ieee

Root ID Priority 12288

Address cc00.1ca0.0001

Cost 19

Port 2 (FastEthernet0/1)

Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec

Bridge ID Priority 32768

Address cc01.1ca0.0001

Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec

Interface Designated

Name Port ID Prio Cost Sts Cost Bridge ID Port ID

FastEthernet0/1 128.2 128 19 FWD 0 4096 cc00.1ca0.0001 128.2

FastEthernet0/2 128.3 128 19 FWD 19 32768 cc01.1ca0.0001 128.3

FastEthernet0/3 128.4 128 19 FWD 19 32768 cc01.1ca0.0001 128.4

通过以上信息我们可以得出以下结论:二层交换机SW3的MAC地址为cc01.1ca0.0001,不仅优先级和运行的STP协议版本与SW2相同,而且所有端口均处于转发状态.其中f0/1端口为根端口,端口ID为128.2.(SW3去往根交换机SW1共有两条路径,从f0/1端口到达SW1的开销值为19,从f0/2端口到达SW1的开销值为38.)f0/2、f0/3以及f0/4 端口均为指定端口.

4.2 连通性测试

通过PING命令对4台终端计算机进行连通性测试,以局域网VLAN60 所属网段终端计算机C1为例,分别测试访问终端计算机C3的连通性(二者同属于VLAN 60网段)和终端计算机C2的连通性(终端计算机C2属于VLAN 70网段).测试后发现,C1与C2、C3之间均可以正常通信.连通性测试结果如图4所示.

5 结 语

图4 连通性测试结果

现如今STP协议虽已走向成熟,但是其使用系统资源工作的特性,不可避免的会带来发生故障的风险.在实际应用过程中,工程技术人员通常会在启用STP协议的交换机端口上应用一些特性来限制BPDU的发送和接收,(例如PortFast、BPDU保护、根保护等)从而使STP拥有更快的收敛速度和稳定性.

猜你喜欢
层交换机网段环路
单位遭遇蠕虫类病毒攻击
网上邻居跨网段访问故障
上海市中环路标线调整研究
应用与配置实例
巧用批处理查找端口
交换机级联端口被绑之后
基于不同版本的Cisco Packet Tracer实验结果比较
Onvif双网段开发在视频监控系统中的应用
Buck-Boost变换器的环路补偿及仿真
单脉冲雷达导引头角度跟踪环路半实物仿真