免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2275 | 回复: 0
打印 上一主题 下一主题

学习笔记:STP [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-19 10:29 |只看该作者 |倒序浏览
Spanning Tree Protocol 生成树协议

网络链路冗余就可能形成环路,而网络有环路就可能有广播风暴和switch的mac-addree-table动荡不稳定重复帧等问题,降低网络性能,解决的办法就是启用Spannning Tree Protocol。实现的方法就是在逻辑上block掉冗余链路的一个端口,使之不能forwarding数据包,而一旦正常的那条链路有问题,被block的端口会自动释放,转为forwarding状态,转发数据包。这样既有了冗余,在逻辑上也不会形成环路。
首先来看看广播风暴是怎么形成的吧:
(广播域:广播帧在未经处理的情况下能到达的网络范围)


蓝色表示pc发出的boardcast,红色表示由swA转发的广播帧,绿色表示由swB转发的广播帧。这样就在swA和swB之间形成了一个双向的广播风暴。
以太网交换机传送的第二层数据帧不像路由器传送的第三层数据包有TTL(Time To Live,生命周期),如果有环路存在,第二层的以太网帧不能被适当终止,它们将在交换机和交换机之间永无止境地传递下去,除非环路被破坏,否则将造成网络拥塞,甚至是网络瘫痪。
其他的mac表不稳定和收到重复帧就不想说了,画图难画,mac地址表就是在环路广播中,端口收到帧的先后而导致设备的mac和交换机端口的对应关系不停的变化;重复帧比较好理解了,因为有冗余链路,第一条收到单播帧发送给设备,第二条链路也会收到同样的单播帧,又转发给该设备,这样就收到了重复的数据帧。
解决的方法就是stp了,我们来看stp具体是怎么工作的。
首先所有的交换机通过比较Bridge ID来选举出一个RootBridge;
然后选出根端口和指定端口,最后决定出block状态的非指定端口。
遵循下面的原理:
1、一个网络中只有一个root bridge;
2、每个非根交换机只能有一个根端口;
3、每个网段只有一个指定端口;
4、使用非指定端口(Block)

root bridge的条件:Bridge ID最小为Root Bridge
Bridge ID = priority+mac  #这里是先比较优先级,再比较mac,并不是2个加起来
priority:2byte,(0-65535):默认32768,可设置,但都要是4096的倍数;
1byte=8bit,2^16=65536
修改优先级的方法:
sw(config)#sapnning-tree vlan 1 priority 4096
sw(config)#sapnning-tree vlan 1 root primary   #修改优先级为8192 (4096*2)
sw(config)#sapnning-tree vlan 1 root sencondary #修改优先级位16384 (4096*4)

选择根端口(root port)的条件:  #根端口都是在非根桥交换机上
I、到达根桥的cost最小
常用的cost:10Mb Ethernet=100,100Mb=19,1Gb=4,10Gb=2
II、Bridge ID最小 (经过的switch的BID)
III、port ID最小(port priority + port number)
IV、Root port永远为Forwarding状态
选择指定端口(designated port)
root bridge上的端口都是指定端口;
指定端口的选择条件和根端口争夺类似

NOTICE:也有Bridge ID = priority+Extended System ID+mac。在不使用Extended System ID的情况下,BID由优先级域和交换机的MAC地址组成,针对每个VLAN,交换机的MAC地址都不一样,交换机的优先级可以是0~65535。CCNA模拟机架中的交换机仅支持不使用Extended System ID,比如在CCNA机架中,交换机SW1中存在两个VLAN:VLAN 1和VLAN 100,执行"show spanning-tree brief"命令时,可以发现两个VLAN的BID优先级都是32768,但MAC地址相差1,一个是cc00.0af4.0000,另一个是cc00.0af4.0001,如果还存在VLAN 200,则MAC地址是cc00.0af4.0002。
在使用Extended System ID的情况下,每个VLAN的MAC地址可以相同,BID被要求包含VLAN ID信息,解决的办法是从优先级域的16个bit中拿出低位的12个bit,称为扩展的System ID,用来唯一标识每个VLAN号,剩下的4个bit用来表示交换机的优先级,这种情况下优先级的取值只有24=16个,是4096的倍数。想一想,为何从优先级中拿出的是12个bit来表示Extended System ID呢?原因是ISL封装中只有10个bit用于VLAN标识,802.1Q封装中有12个bit用于VLAN标识,不管是哪种封装,取12个bit都可以满足。比如交换机优先级是4096,交换机的MAC地址是cc00.0af4.0000,交换机在VLAN 100中的BID是4196(4096+100=4196)+cc00.0af4.0000

启用spanning-tree的网络中,交换机相连的链路都是Trunk链路;

选好Root Bridge和Root port、Designated Port、Non-Designated后,Non-Designated port处于Block状态,不转发数据帧,但是仍然可以接收BPDU,以便知道拓扑变化

交换机端口的5种状态:
Disable(Down)
Lisenting
Learning
Forwarding
Blocking
在STP环境中,端口状态转变计时器:


可以修改收敛计时器:
sw(config)#spanning-tree vlan 1 {max-age|forwarding-time|hello-time}

Hello-time就是发送BPDU的时间,默认2's/次,不建议修改Hellotime;
改变根桥后新跟桥不继承原来的计时器设置。


接收BPDU
发送BPDU
学习MAC
转发DATA
Down




Blocking




Listening




Learning




Forwarding




各个状态下的BPDU状态
当然可以修改端口为上行速链路,端口转换的时候由Blocking状态就直接变成forwarding状态了,跳过listen和learn两个阶段。这个上行速链路在非根桥上启用。
Sw(config)#spanning-tree uplinkfast

这个上行速链路和速端口有点混,这里说明一下
上行速链路是指交换机与交换机之间,交换机与路由器的有多条线缆连接,在运行STP协议时,会阻塞其它的端口,只会有一个根端口或指定端口正常运行,当这个端口出现问题时,其它的阻塞端口将马上进入转发状态。
速端口是指PC机与交换机连接的接口,当这个接口出现问题时,换一个交换机端口时,该端口马上进入转发状态。速端口只能用在与PC机相连的端口上,而不能用在与交换机或路由器连接的端口上,否则会出现环路。上行速链路在全局配置模式下配置,速端口是进到端口配置模式下配置,如:
Sw(config)#int range f0/1 - 5        
Sw(config-if-range)#spanning-tree portfast    #将f0/1-f0/5都配置为速端口

查看STP的信息
Router#sh spanning-tree brief
VLAN1
  Spanning tree enabled protocol ieee
  Root ID    Priority    32768
             Address     cc00.0f18.0000
             This bridge is the root
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
  Bridge ID  Priority    32768
             Address     cc00.0f18.0000
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time 300
Interface                                   Designated
Name                 Port ID Prio Cost  Sts Cost  Bridge ID            Port ID
-------------------- ------- ---- ----- --- ----- -------------------- -------
FastEthernet0/1      128.2    128    19 FWD     0 32768 cc00.0f18.0000 128.2  
FastEthernet0/14     128.15   128    19 FWD     0 32768 cc00.0f18.0000 128.15
这里只开了一台交换机试命令,上面是root id就是交换机自己的Root ID,下面就是Bridge ID,这里只有一个交换机,所以和上面的是一样的,下面是参与STP的端口的状态。如果采用PVST+的话,要用Trunk。

Vlan和STP的关系


  • IEEE通用生成树(CST) #不考虑vlan,以交换机为单位运行STP,如果划分了VLAN,正好BLOCK的端口属于一个VLAN的话,这个VLAN的数据就不能通讯
  • cisco的每个vlan生成树(PVST) #为每个VLAN运行单独的STP,能优化跟桥的位置,为所有的VLAN提供最有路劲
  • cisco能兼容CST的PVST(PVST+) #和IEEE兼容

PVST的配置:
要指定网络中比较稳定的、性能好的交换机为根桥,还可以实现多台核心交换机作为不同vlan的跟桥而实现负载均衡。
配置备份的上行链路为uplinkfast,已实现快速恢复。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/100991/showart_2031384.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP