第2层交换和生成树协议(STP)
路由协议可以防止在网络层发生网络环路。然而,如果在交换机间有冗余的物理链路,路由协议将不能防止在数据链路层发生的环路。正是由于这个原因,才开发了生成树协议STP(Spanning Tree Protocol),它可以防止在第2层交换式的互联网络中发生环路。
1、交换式服务
跟网桥使用软件来创建和管理过滤表不一样,交换机使用专用集成电路(ASIC:专用集成电路Application Specific Integrated Circuit)来创建并维护其过滤表。但把第2层交换机视为多端口网桥仍然是可以的,因为它们的用途是一样的,用来分隔冲突域。交换机和网桥转发数据的速度比路由器快一些,因为它们不花时间查看网络层报头信息。相反,在决定是转发帧或是丢弃它之前,它们查看帧的硬件地址,它们没有对数据包做任何修改,只读取封装了数据包的帧,与路由相比,这就使得交换过程非常快,而且不容易出错。
第2层交换提供的性能如下:
基于硬件的桥接(ASIC);
线速(Wire speed);
低延迟;
低成本。
2、第2层交换的局限性
交换机和网桥分隔冲突域,但网络仍然是一个大的广播域。要用网桥设计出一个好的网络,就必须考虑到下面两个最重要的方面:
必须绝对正确地分隔出冲突域;
创建一个功能强大的桥接网络的正确方法是,确信其用户在本地网段上花费了80%的时间。
随着网络的增长,广播、组播及生成树的慢收敛会让你觉得恼火。这就是为什么第2层交换机和网桥在互联网络中不能完全取代路由器的重要原因。
3、桥接与LAN交换的比较
网桥是基于软件的,而交换机是基于硬件的;
交换机可以看成是多端口的网桥;
每个网桥只有一个生成树实例,而交换机可以有许多生成树实例;
交换机的端口数量比大多数网桥都多;
网桥和交换机都转发第2层广播;
通过检查所接收的每个数据帧的源地址,网桥和交换机就学到了MAC地址;
网桥和交换机都是基于第2层地址做出转发的决定。
4、第2层的3种交换功能
地址学习(Address Learning):
转发/过滤决定(Forward/filter decisions):
避免环路(Loop avoidance):
5、端口安全
怎样才能阻止非授权用户的主机接入到交换机的端口上呢?
Switch#config terminal
Switch(config)#interface fastethernet0/1
Switch(config-if)#switchport port-security mac-address sticky //开启端口MAC地址自动粘连
Switch(config-if)#switchport port-security maximum 2 //端口允许的最大MAC地址数为2
Switch(config-if)#switchport port-security violation shutdown //违规则关闭端口
6、避免环路
交换机间存在冗余链路是一件好事,因为如某一条链路出了故障的话,它们就可以用来防止整个网络失效。但它处理不当会带来一些严重的问题:
广播风暴:
同一帧的多个复制品:
MAC地址表不稳定:
7、生成树协议(STP)
STP(Spanning Tree Protocol)最早是由数字设备公司DEC(Digital Equipment Corporation)开发的,这个公司后来被收购并改名Compaq公司。IEEE后来开发了它自己的STP版本,称为802.1D。坏消息是,默认时,Cisco交换机运行STP的IEEE802.1D版本,它与DEC版本不兼容。好消息是,Cisco在其新出品的交换机上使用了另一个工业标准,称为802.1W。
生成树术语
根桥(Root bridge):是桥ID最低的网桥。它将成为网络中的焦点,所有其它的决定都是根据根桥的判断来做出选择的。
桥协议数据单元(BPDU/Bridge Protocol Data Unit):所有的交换机相互之间都交换信息,并利用这些信息来选出根交换机,也根据这些信息来进行网络的后续配置。默认时,每2秒发送一次BPDU。
桥ID(Bridge ID):STP利用桥ID来跟踪网络中的所有交换机。桥ID是由桥优先级(在所有的Cisco交换机上,默认的优先级为32768)和MAC地址的组合来决定的。在网络中,桥ID最小的网桥就成为根桥。
非根桥(Nonroot bridge):除了根桥外,其他所有的网桥都是非根桥。它们相互之间都交换BPDU,并在所有交换机上更新STP拓朴数据库,以防止环路并对链路失效采取补救措施。
端口开销(Port cost):当两台交换机之间有多条链路且都不是根端口时,就根据端口开销来决定最佳路径,链路的开销取决于链路带宽。
根端口(Root port):根端口是指直接连到根桥的链路所在的端口,或者到根桥的路径最短的端口。选择依次比较:开销最低的端口,如开销相同,就使用桥ID小一些的那个,如多条链路来自同一台设备,就使用端口号最低的那条链路。
指定端口(Designated port):有最低开销的端口就是指定端口,指定端口被标记为转发端口。
非指定端口(Nondesignated port):非指定端口是指开销比指定端口高的端口,非指定端口将被置为阻塞状态,它不是转发端口。
转发端口(Forwarding port):指能够转发帧的端口。
阻塞端口(Blocked port):阻塞端口是指不能转发帧的端口,这样做是为了防止产生环路。然而,被阻塞的端口将始终监听帧。
生成树的操作
STP的任务是找到网络中的所有链路,并关闭任何冗余的链路,这样就可以防止网络环路的产生。STP首先选举一个根桥,由根桥来负责决定网络拓朴。一旦根桥选定,其它的每台交换机就必须找到其唯一的根端口。在两台交换机之间的每一条链路必须有唯一的指定端口,在那条链路上的端口提供到根桥最大的带宽(并不是路短路径)。显然,根交换机上的每个端口都是指定端口,因为根桥离自己总是最近的。在执行STP算法之后,任何既不是端口也不是指定端口的端口,这意味着它们是非根端口、非指定端口,它们将会被置为阻塞状态,从而打破交换环路。
选举根桥
桥ID用来选举根桥,并决定根端口。桥ID为8个字节长,其中包括了设备的优先级和MAC地址。
a、首先看优先级,优先级小的胜出;
b、看MAC地址,MAC地址最小的设备胜出。
改变默认优先级是选举根桥的最佳方式。这一点很重要,因为我们希望网络中的核心交换机成为根桥,这样STP就会快速收敛:
Switch B(config)#do show spanning-tree
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 32769
Address 0005.74ae.aa40
Cost 19
Port 1(FastEthernet0/1)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address 0012.7f52.0280
Hello Time 2 sce Max Age 20 sec Forward Delay 15 sec
Aging Time 300
[output cut]
从以上显示得出,交换机B运行的是IEEE802.1d协议,第一项输出(RootID)是交换式网络中根桥的信息,但这不是交换机B的信息。交换机B到根桥的端口(根端口)是端口1。桥ID实际上是有关交换机B和VLAN1的生成树信息。交换机B的默认优先级是32768,这是每台交换机的默认优先级。它被列为32769,由于VLAN ID实际被加进来了,因此在这种情况下,对于VLAN 1,它显示32769,对于VLAN 2显示32770,以此类推。
在Catalyst交换机上改动桥的优先级的方法:
Switch B(config)#spanning-tree vlan 1 priority 4096 //改变桥优先级为4096;范围<0~61440>
生成树端口状态
阻塞(Blocking):端口将不能转发帧,它只监听BPDU。当交换机加电时,默认情况下所有的端口都处于阻塞状态。
侦听(Listining):端口都侦听BPDU,以确信在传送数据帧之前,在网络上没有环路产生。处在侦听状态的端口,在没有形成MAC地址表时,就准备转发数据帧。
学习(Learning):交换机端口侦听BPDU,并学习交换式网络中的所有路径。处在学习状态的端口形成了MAC地址表,但不能转发数据帧。转发延迟意味着将端口从侦听状态转换到学习状态所花费的时间,默认时设置为15秒,可以用命令show spanning-tree显示出来。
转发(Forwarding):在桥接的端口上,处在转发状态的端口发送并接收所有的数据帧。如果在学习状态结束时,端口仍然是指定端口或根端口,它就进入转发状态。
禁用(Disabled):从管理上讲,处于禁用状态的端口不能参与帧的转发或形成STP。处于禁用状态下的端口实质上是不工作的。
说明:只有在学习状态或转发状态下,交换机才能填写MAC地址表。大多数情况下,交换机端口都处在阻塞或转发状态。但如果网络的拓朴改变了(如:链路失效或添加了一台新的交换机),交换机端口就会处于侦听或学习状态。
收敛
当网桥或交换机上的所有端口都转变到转发或阻塞状态时,就产生了收敛。在收敛完成之前,交换机不能转发任何数据。收敛是重要的,它用来确保所有的设备都有同样的数据库,但它确实会花一些时间。从阻塞状态转变到转发状态通常要花50秒。
生成树快速端口(PortFast)
如果你有一台服务器或其它设备连接到交换机上,而且可以保证在禁用STP时不会产生交换环路,那么就可以在这些端口上使用快速端口。使用快速端口意味着,当STP正在收敛时,端口不会花费通常的50秒才进入转发状态。在端口配置模式下:
Switch(config-if)#spanning-tree portfast
生成树上行链路快速(UplinkFast)
上行链路快速是Cisco产品特有的特性,当链路失效时,它可用来改进STP收敛时间,Cisco推荐仅当交换机典型地在接入层有被阻塞的端口时,才启用UplinkFast。允许交换机在primary link失效前,找出到根桥的可选路径。这意味着如果主链路失效,备份链路(secondary link)将更快地启用,端口将不会等待通常的50秒STP收敛时间。
生成树主干快速(Backbone Fast)
在本地交换机上,UplinkFast用来确定并快速修复链路失效。与UplinkFast不一样的是,Cisco有另外一个专用的STP扩展特性,称为主干快速,当某条链路并没有直连到失效的交换机时,就可以使用BackboneFast加速收敛。
特别重申:UplinkFast只能配置在接入层交换机上或带冗余链路的交换机上,而且至少有一条链路处于阻塞状态,而BackboneFast可以在所有的Catalyst交换机上启用,以便能够检测到非直连的链路失效。启用BackboneFast可在50秒的默认STP收敛时间中,它能节省20秒时间。
快速生成树协议(RSTP)802.1W
Cisco创建PortFast、UplinkFast、BackboneFast来“修补”IEEE802.1d标准中的漏洞和缺陷。这些特性的不足之处仅在于,它们是Cisoc专用的且需要进行额外的配置。但新的802.1w标准(RSTP)将所有这些“问题”都放在一个封包中解决了。重要的是,必须确信网络中所有的交换机都在正确地运行802.1w。当它与老的网桥交互作用时,802.1w内在的快速收敛能力将失效。
EtherChannel
将多条冗余链路捆在一起创建出逻辑聚合,这样,多条链路就可以像一条链路那样起作用。Cisco版本称为端口聚合协议(Port Aggregation Protocol ,PagP);IEEE的802.3ad标准则称为链路聚合控制协议(Link Aggregation Control Protocol ,LACP)。
8、配置Catalyst交换机
交换机的配置与路由器的配置大同小异,值得注意的几个方面是:
我们为交换机分配IP地址,对于网络功能来说,这并不是必需的。为交换机设置IP地址的唯一原因是,我们能够对它进行管理。IP地址是在逻辑接口下配置的,称为管理域或VLAN。
Switch>enable
Switch#config terminal
Switch(config)#hostname S1
S1(config)#enable secret todd
S1(config)#line console 0
S1(config-line)#password console
S1(config-line)#login
S1(config-line)#exit
S1(config)#line vty 0 15
S1(config-line)#password telnet
S1(config-line)#login
S1(config-line)#exit
S1(config)#interface vlan 1 //进入逻辑接口Vlan1
S1(config-if)#ip address 192.168.10.17 255.255.255.240 //为逻辑接口设置IP便于管理
S1(config-if)#no shutdown
端口安全
S1(config)#interface range fastethernet0/3-4 //进入端口F0/3和F0/4
S1(config-if-range)#switchport port-security maximum 1 //充许端口最大接入数为1
S1(config-if-range)#switchport port-security mac-address sticky
//接入设备的MAC地址自动关联,这样就不必手工输入每台设备的所有MAC地址了。
S1(config-if-range)#switchport port-security violation shutdown //违规则关闭端口
S1(config-if-range)#spanning-tree portfast
//启用生成树快速端口
S1(config-if-range)#spanning-tree bpduguard enable
//为配置了portfast的端口开启BPDU护卫,可防止错误地在出现环路的端口上使用portfast。它会将该端口自动置为错误的禁用状态。该命令只在接入层交换机上使用。
S1(config-if-range)#spanning-tree bpdufilter enable
//为配置了portfast的端口开启BPDU过滤,与bpduguard不同的是,它将使端口保持打开,但不运行Portfast。
S1(config-if-range)#exit
S1(config)#spanning-tree uplinkfast
//启用生成树上行链路快速,它是一个全局命令,在每个端口上都可以启用。用于接入层交换机。用来在本地交换机上检测链路失效并修复。
S1(config)#spanning-tree backbonefast
//启用生成树主干快速,与uplinkfast不一样的是,它可在网络中所有交换机上配置,用来在远端交换机上检测链路失效并且修复。
9、配置EtherChannel
如:S1的F0/1、F0/2分别与Core交换机的F0/7、F0/8相连
对于S1:
S1(config)#interface port-channel 1 //创建逻辑聚合端口通道1
S1(config-if)#interface range f0/1-2 //捆绑接口F0/1、F0/2
S1(config-if-range)#switchport mode trunk //定义为trunk(干线/中继)端口
S1(config-if-range)#switchport nonegotiate //关闭端口自动协商,以阻止交换机试图自动检测链路类型,以及自动设置中继。
S1(config-if-range)#channel-group 1 mode desirable //desirable选项:交换机主动要求形成一个EthernetChannel 并发送pagp分组。
对于Core:
Core(config)#interface port-channel 1
Core(config-if)#interface range f0/7-8
Core(config-if-range)#switchport trunk encapsulation dot1q //中继线路封装802.1q协议
Core(config-if-range)#switchport mode trunk
Core(config-if-range)#switchport nonegotiate
Core(config-if-range)#channel-group 1 mode desirable
10、验证Cisco Catalyst交换机的配置
交换机上并不需要IP地址,在交换机上设置IP地址、掩码、和默认网关的唯一理由是出于管理的需要,它们都配置在vlan下:
S1#show running-config //显示配置文件了解设备的大致情况
S1#show interface vlan 1 //显示vlan1下的IP地址、掩码等
S1#show mac address-table //显示转发过滤表,也称内容可寻址内存(content addressable memory,CAM)表。
11、分配静态MAC地址
S1#config t
S1(config)#mac-address-table static aaaa.bbbb.cccc vlan 1 int fa0/5
//将MAC地址aaaa.bbbb.cccc静态地分配给vlan 1中的快速以太网端口fa0/5
12、生成树相关信息
S1#show spanning-tree //显示生成树协议运行情况
S1#show spanning-tree vlan 2 //显示vlan 2的STP运行情况。每个vlan都运行它自己的STP。
13、确定根桥
a、首先看优先级,优先级小的胜出;
b、看MAC地址,MAC地址最小的设备胜出。
14、设置根桥
方法1:改变优先级
S1#config t
S1(config)#spanning-tree vlan 1 priority 16384
//优先级取值范围是0~61440,如果为0,表示那台交换机始终是根桥,如果为61440,就表示那台交换机永远不会成为根桥。
方法2:直接设置为根桥
S1(config)#spanning-tree vlan 1 root primary
//这个命令并不会覆盖低优先级的交换机,仅当所有的交换机都设置了相同或更高的优先级时,这个命令才起作用。