1、什么是Stp技术?
spanning-tree protocol :生成树协议
@概述
--该协议是公有标准的协议,在任何厂商的设备都支持,称之为 802.1d ;
--该协议是用来解决2层交换网络的环路的(不是路由网络的环路),是一种2层交换技术,只在交换机上运行
@核心作用:
--在交换设备之间提供冗余链路的同时,防止2层交换网络环路的发生。【1.提供冗余链路;2.防止环路发生】
@具体的核心工作任务是:
--在交换机之间的多个链路中间,“任何一个交换机”都选择一个去往“特定”交换机时最短的链路,保持该链路是通的。其他的所有链路都是不通的,
那么,此时就保证了“任何交换机”与“特定”交换机之间的链路,永远只有1个是通的。从而,就没有了环路。
2、为什么要使用Stp技术?用在哪里?
传统的交换网络中,经常存在一种故障:单点故障。
即,网路中通信的两个设备之间只有一个通的线路。如果这个线路断开了,那么设备之间就无法通信了。
所以, 为了解决网络的“单点故障”,我们提出的解决方案是:
-增加备份的冗余线路
-增加备份的冗余设备
但是,带来的新的问题:容易形成数据转发的环路。
比如: 交换机在接收到终端设备发送过来的广播数据帧的时候,
基于交换机的工作原理,交换机针对广播数据帧而言,是没有办法在自己的 MAC 地址表中查找到对应的转发条目的,所以这种广播帧只能进行在所有端口上转发出去。任何一个交换机都是如此处理,那么这些交换机互相连接起来后,并且每个互联链路都是通的,所以就会出现“广播数据环路”,
这种广播数据越来越多,就会在交换机组成的网络中,形成广播风暴,从而耗尽交换机的资源,可能导致交换机死机/重启,影响公司的正常业务。
所以,针对上述的“交换网络环路”问题,我们提出的解决方案: STP (spanning-tree protocol :生成树协议)
3、STP是如何实现防止环路发生的?如何优化?
1>确定交换机的角色
@根交换机,在一个VLAN(冲突域)中,有且只有一个根交换机
@非根交换机,在一个VLAN中,除了根交换价以外,其他所有的交换机都被称之为“非根交换机”
特点:每一个非根交换价,永远在计算去往根交换机最短的那个路径,且保持畅通
@交换机角色的确定原则:
[比较 BID的大小,越小越好 (BID=优先级+MAC地址)] {BID-bridge ID,网桥的名字}
--首先比较交换机的优先级,默认是 32768,越小越好;[长度为2个字节]
--其次比较交换机的MAC地址,越小越好 ;[长度为6个字节]
2>确定端口角色
@根端口, 在非根交换机上,有且只有1个,距离根交换机最近的口 [最终状态:转发]
@指定端口, 在任何一个“冲突域”中(网段),有且只有1个,距离根交换机最近的口 [最终状态:转发]
@非指定端口,除了根端口和指定端口以外,其他接口都叫做非指定端口
在上述的接口定义中,有一个很关键的参数,即“到根交换机”的 “距离”,该参数呢我们在 STP 中 是通过“ cost ” 表示, cost也称之为“开销”。
默认情况下, STP 协议在交换机上启用之后,为每个端口都分配了一个“cost”,接口带宽不同,那么 cost 也就不同:
1000M带宽 --- cost ---- 20000
100 M带宽 --- cost ---- 200000
在确定端口角色的时候,比较的是 BPDU 报文中的以下参数(比较顺序-从上到下,比较原则:越小越好)
-cost , 发送该BPDU的交换机,到达根交换机的距离;
-BID , 发送该BPDU的交换机的名字 - BID (优先级+MAC地址)
-PortID,发送该BPDU的出接口的信息 - 端口ID(优先级+端口号) [端口优先级默认是128]
3>确定端口状态
@disable:禁用
@listening:侦听,该状态下交换机的接口正在尽可能的接收所有的BPDU,从而进行交换机角色和端口角色的确定 (收集BPDU是为了比较BPDU)
@learning:学习,该状态下交换机为了在正式转发数据报之前,提前学习好 MAC 地址表,为后续的“转发”状态做准备。
@forwarding:转发 {最终状态}
@blocking:阻塞 {最终状态}
4>STP报文
BPDU(bridge protocol data unit : 桥接 协议 数据 单元 )
@配置BPDU,根交换机通过该类型的BPDU用于建立和维护一个无环的数据转发路径;
@拓扑变更BPDU(TCN BPDU),当交换机发现链路的状态变化之后,才会产生该BPDU,用于向根交换机进行汇报(即:该BPDU是用来报错的)
@STP 计时器:
--hello ,根交换机发送 配置BPDU的周期,即多长时间发送一次。默认是 2s ;
--forward-delay,转发延迟,默认的时间是 15s 。
当接口的状态在 listening 状态时候,会停留 15s
当接口的状态在 learning 状态时候,会停留15s
--max age ,最大 存活时间,即 STP 的BPDU在一个接口上的最大存活时间。默认是20s。
在运行 STP 协议的网络中,如果连通的链路出现了故障,那么备份的链路需要:
30s ------- 50s
才可以从 blocking 状态,变为 forwarding 状态,
所以, STP 的最大缺点是: 慢!!!
4>STP的基本命令
display stp -> 查看设备上运行的 STP 的状态信息,比如 STP 的模式以及交换机的BID
display stp brief -> 查看交换机上运行的 STP 的每个接口的角色 和 状态
display stp interface gi0/0/1 -> 查看 gi0/0/1 接口上的 STP 相关信息,比如 cost
[SW]stp mode {stp/rstp/mstp} // 修改交换机当前运行的 STP的模式,默认是 MSTP
[SW]stp priority ** // 修改交换机的 STP 优先级,默认是 32768 。该数值只能是 4096的倍数
[SW]interfae gi0/0/1
[SW-GI0/0/]stp cost *** // 修改接口的 STP cost ,默认是 20000 (前提是 该接口是千兆接口)