首页 > 其他 > 详细

STP学习笔记(一)

时间:2017-02-07 17:00:49      阅读:379      评论:0      收藏:0      [点我收藏+]

生成树协议:STP,Spanning-Tree Protocol

1、冗余链路的优缺点

优点:保证了网络通信的可靠性

缺点:广播风暴、MAC地址表不稳定、重复帧拷贝

2、STP原理

STP简述:

STP是为了解决冗余链路所带来的影响而产生的,它的原理是通过堵塞冗余链路上的一些端口,确保到达任何目标地址只有一条逻辑路径,STP借用交换机的BPDU(Bridge Protocol Data Unit,网桥协议数据单元)来阻止环路,在BPDU中包含BID(Bridge ID,桥ID)用来识别是哪台交换机发出的BPDU。在STP运行的情况下,虽然逻辑上没有了环路,但是物理线上还是存在环路的,只是物理线路的一些端口被禁用以阻止环路的发生,如果正在使用的链路出现故障,STP重新计算,部分被禁用的端口重新启用来提供冗余。

STP的算法:

STP使用STA(Spanning Tree Algorithm,生成树算法)来决定交换机上的哪些端口被堵塞用来阻止环路的发生,STA选择一台交换机作为根交换机,称作根桥(Root Bridge),以该交换机作为参考点计算所有路径。

根交换机选举:
根交换机的选举依靠交换机的BID来计算,BID最小的被选择为根桥

BID分为不使用扩展的BID和使用扩展的BID

不使用扩展的BID:

BID(8 Bytes)= Bridge Priority(2 Bytes) +  MAC Address(6 Bytes)

使用扩展的BID:

BID(8 Bytes)= Bridge Priority(4 bit)+ Extend System ID(12 Bits)+  MAC Address(6 Bytes)

在不使用Extended System ID的情况下,BID由优先级和交换机的MAC地址组成,针对每个VLAN,交换机的MAC地址都不一样,交换机的优先级可以是0-65535。在使用Extended System ID的情况下每个VLAN的MAC地址可以相同(在GNS3模拟器中不支持Extended System ID,Cisco Packet Tracer 5.3支持Extended System ID)。值得一提的是,现在的交换机普遍使用Extended System ID。拥有最小BID的交换机被选举成为根交换机。

在同一个广播域中的所有交换机都参与选举根交换机,当一台交换机启动时,它假设自己是根交换机,并默认每隔2秒发送一次“次优BPDU”帧,BPDU帧中的Root ID(根交换机的BID)和本机的BID相同。在一个广播域中的交换机互相转发BPDU帧,并且从接收到的BPDU中读取Root ID,如果读取到的Root ID比本交换机的BID小,交换机更新Root ID为这个较小的Root ID,然后继续转发修改后的BPDU;如果接收的BPDU中的Root ID比本交换机的BID大,那么继续将自己的BID作为Root ID向外发送BPDU,直到最后在同一个生成树实例中拥有一致的Root ID,这个Root ID对应了这个广播域中某台交换机的BID(并且这个BID一定是这个广播域最小的),这台交换机就被选作根交换机。

比较时,先比较谁的优先级小,如果优先级相同,则比较谁的MAC地址小

修改交换机的优先级:

SW3(config)#spanning-tree vlan 1 priority 4096        \\优先级必须是4096的倍数

SW3(config)#no spanning-tree vlan 1 priority         \\还原优先级为默认优先级

为什么优先级是4096的倍数?

思科交换机默认使用PVST+,也就是扩展的BID,因为思科交换机有4096个VLAN,即2^12个,所以需要优先级中的扩展系统ID来识别VLAN,那就需要12位,剩余4位为优先级,换算成二进制来看:

0000 0000 0000 0000 = 0

0001 0000 0000 0000 = 4096

0010 0000 0000 0000 = 4096 + 4096  = 4096 * 2 = 8192

0011 0000 0000 0000 = 4096 + 4096 + 4096 = 4096 * 3 = 12288

···········

查看STP信息:

SW2#show spanning-tree

3、端口花费和路径花费

根交换机被选举出来后,计算其他交换机到根交换机的花费,STA考虑两种花费,端口花费和路径花费,路径花费是从根交换机出发到最终交换机前进方向进入的端口花费总和。


默认的端口花费:

速度花费
10Gb/s2
1Gb/s4
100Mb/s19
10Mb/s
100


修改端口花费:

/*将SW3的fa0/0接口的花费改成40*/

SW3(config)#int fa 0/0

SW3(config-if)#spanning-tree cost 40

SW3(config-if)#end


4、BPDU结构

BytesField
2
Protocol ID
1
Version
1
Message type
1
Flags
8
Root ID
4
Cost of path
8
Bridge ID
2
Port ID
2
Message age
2
Max age
2
Hello time
2
Forward Delay


BPDU包含12个字段,部分字段解释如下:


Flags:标记域,包含TC(Topology Change,拓扑改变)比特位,TCA(Topology Change Acknowledgment,拓扑改变确认)比特位。

Root ID:包含了根交换机的BID。

Cost of path:到根交换机的路径花费。

Bridge ID:转发BPDU的交换机的BID。

Port ID:转发BPDU的交换机的PID,PID等于端口优先级(默认128)加端口号。

Message age:BPDU已经存在的时间。

Max age:BPDU最大存在时间。

Hello time:根交换机发送配置信息的间隔时间,默认2秒。

Forward Delay:转发延时,默认15秒。

5、STP端口角色
a、根端口(Root Port,RP),每个非根交换机上有且仅有一个根端口。

b、指定端口(Designated Port,DP),网络上除根端口外,所有允许转发流量的端口,每个网段都有一个指派端口,根交换机上的端口都是指派端口。

c、非指派端口,既不是根端口也不是指派端口,这种端口虽然是激活的但是会被堵塞(Blocking)用来阻止环路。根端口和指派端口都处于转发(Forwarding)状态。

d、禁用端口,被管理员使用”shutdown”命令关闭的端口称作禁用端口,禁用端口不参与生成树算法。

6、端口状态和BPDU时间

互连交换机通过在一个广播域交换BPDU帧构建一个逻辑上无环的路径,当一台交换机启动后,如果一个交换机端口直接转换到转发状态可能会造成暂时性的环路。为了使用这个逻辑生成树,交换机需要在五种状态间转换,转换会历经三种BPDU时间。

(1)STP中的五种端口状态:

a、Down(禁用)状态。可以使用”no shutdown”命令和插入网线来激活。

b、Blocking(阻塞)状态。链路激活后转入阻塞状态,这个状态大约停留20秒,主要用来确定该端口的角色。如果判断出该端口是非指派端口,则将保持在这一状态,即阻塞,如果处在阻塞状态的端口接收不到BPDU了,也会转入下一状态。如果判断出是其他端口角色,则转入下一状态。

c、Listening(侦听)状态。这个状态大约停留15秒,除了接收BPDU外,还向邻居发送BPDU,通知邻居它将参与激活拓扑。

d、Learning(学习)状态。大约停留15秒,开始学习MAC地址。

e、Forwarding(转发)状态。端口可以转发数据帧。

(2)BPDU的时间有三种,Hello Time、Max Age、Forward Delay:

a、Hello时间控制了发送配置BPDU的时间间隔,默认2秒。这是根交换机生成BPDU并向非根交换机发送的间隔。

b、非根交换机接收到根交换机发送来的BPDU,再从除接收端口以外的其他端口转发出去,如果在2-20秒里面由于网络故障没有新的BPDU从根交换机发送过来,非根交换机将停止向外发送从根交换机接收到的BPDU。如果这种情况持续20秒,也就是最大存活期,非根交换机就使原储存的BPDU无效,并开始寻找新的根端口。所谓最大存活期就是非根交换机丢弃BPDU前用来备份储存它的时间。

c、转发延时是交换机在侦听状态到学习状态所花的时间,默认是15秒。

从上面的叙述中我们可能会发现,一台启动STP的交换机,每个端口从UP到Forwarding所需的时间大约是50秒左右,而普通的二层交换机端口UP到Forwarding瞬间就能完成。这会带来一个问题,那就是如果这台启动STP的交换机的接口连接的是一个终端设备,比如计算机,那么端口加电启动后计算机就要等上50秒才能发送数据,这很不合理,可以使用下面的命令将支持STP的交换机与终端相连的端口设置成快速端口,这样端口从UP到Forwarding也能一瞬间完成了。但需要注意的是,仅在连接计算机的端口上使用快速端口的功能,不要在和其他交换机,集线器网桥相连的端口上使用这个功能,否则容易造成环路。

Switch(config)#int range fa 0/1

Switch(config-if-range)#spanning-tree portfast        \\将交换机的端口改为快速端口

7、STP收敛过程

STP的选举:
每个广播域只能有一个根交换机。

每个非根交换机有且只有一个根端口。

每个网段有且只能有一个指派端口。

既不是根端口也不是指派端口的端口会被阻塞。


过程:
(1)、选举根交换机
交换机之间通过发送BPDU来选举根交换机,拥有最小BID的交换机将成为根交换机,每个广播域只能有一个根交换机。

(2)、选举根端口
每个非根交换机有且只有一个根端口
选举根端口顺序:
a、最低花费的端口将成为根端口;

技术分享

图中SW1为根交换机,SW2的e0/1端口到根交换机的路径花费为100,e0/0到跟交换机的路径花费为300,所以在SW2中,e0/1被选举为根端口。


b、花费相同的情况下比较发送者的BID,BID小的将成为根端口;

技术分享

图中SW1为根交换机,SW4的e0/0和e0/1接口到根交换机的开销都为200,假设SW2的BID为32768+2222.2222.2222,SW3的BID为32768+3333.3333.3333,SW2的BID小于SW3的BID,所以SW4的e0/1端口被选举为根端口。注意在比较BID时,先比较优先级,再比较MAC地址。


c、在发送者BID相同的情况下,比较发送者的PID,PID小的会被选举为根端口 ;

PID = 端口优先级 + 端口号    \\端口优先级默认为128,可以手动更改

SW2(config)#interface e0/0

SW2(config-if)#spanning-tree port-priority 100

技术分享

图中SW1为根交换机,SW2的e0/0和e0/1到根交换机的开销都为100,发送者的BID相同,则比较SW1两个端口e0/0和e0/1的PID(端口ID),e0/0的PID为128+0.1=128.1,e0/1的PID为128+0.2=128.2。


d、如果发送者的PID也相同,那么比较接收者的PID;

技术分享

如图,SW1为根交换机,HUB1只负责转发数据,没有STP功能,这时需要比较SW2的e0/0和e0/1的端口优先级,不过随着HUB的淘汰,这种情况出现的概率比较小。


(3)、选举指定端口
每个网段有且只有一个指派端口,根交换机的端口都为指定端口
每个网段都有一个指派交换机,指派交换机上如果有多个端口,再从多个端口中选举出一个成为指派端口

指派端口的选举顺序:

比较端口所在交换机到根交换机的最低花费;

花费相同则比较接收者的BID;

接收者的BID也相同则比较接收者的PID;


(4)、其余端口为非指定端口

非指定端口会被堵塞


8、动态设置交换机为根交换机和备份根交换机

技术分享

如图所示,原始的根交换机为IOU2,现在我们想要将IOU1设置为根交换机,当IOU1 down掉后,IOU3变为根交换机,这时需要设置IOU3为备份根交换机。命令如下:

/*将IOU1设置为根交换机*/

IOU1(config)#spanning-tree vlan 1 root primary

/*将IOU3设置为备份根交换机*/

IOU3(config)#spanning-tree vlan 1 root secondary

9、STP拓扑变化

当交换机检测到端口发生了变化时,交换机将通知根交换机拓扑变化情况,根交换机再将这一情况扩散到整个网络,有三种特殊的BPDU用来完成这些工作:TCN(Topology Change Notification)BPDU-拓扑改变通知BPDU、TCA(Topology Change Acknowledgement)BPDU-拓扑改变确认BPDU、TC(Topology Change)BPDU

例:SW1(根交换机)→ SW2 → SW3

当SW3检测到拓扑发生变化时,从自己的根端口向SW2发送TCN,SW2收到后向SW3发送TCA,然后从自己的根端口发送TCN给SW1,SW1收到后给SW2回复TCA,然后发送广播BPDU通知其他交换机拓扑发送变化。


本文出自 “计算机爱好者” 博客,请务必保留此出处http://sugege.blog.51cto.com/10431581/1895556

STP学习笔记(一)

原文:http://sugege.blog.51cto.com/10431581/1895556

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!