1.生成树产生的原因
交换机当收到未知单播组播广播后会向所有接口泛洪,在冗余的网络下会造成广播风暴
MAC地址不稳定的问题
重复帧的问题
生成树可以解决这三个问题
2.协议基础
1.1.如何人为的去防环
1.在整个网络里选出一个根桥(root)
2.在每个非根桥上选出一个根端口(root port) 根端口就是到root的唯一出口(在本地选)
3.在每一条线上选出一个指定端口(designed port)
4.剩下的端口为阻塞端口(block port)
1.2.PK四要素
1.根桥ID (8字节)=根桥优先级(2字节)+根桥MAC地址(6字节)
优先级默认是32768,范围0-65535(前4bit表示优先级,后8bit作为system id,为协议扩展用)必须是4096的倍数,越小越优先
2.接口cost
根端口到根桥的距离,在出接口累加
Link Speed |
Cost of Path |
10GB/s |
2 |
1GB/s |
4 |
100Mb/s |
19 |
10Mb/s |
100 |
3.发送者桥ID 优先级+MAC
4.发送者端口ID (2字节)=端口优先级(1字节)+端口ID(1字节)(F0/0orF0/1)
默认优先级128,范围0-255,越小越好
1.3.选举原则:
是看对端的优先级,本地的cost
在生成树中每个接口都有一个角色
3.802.1D(PVST+)
1.4.Bridge Protocol Data Unit 桥协议数据单元
PVST 真实的优先级+VLAN号(扩展ID),默认情况下,交换机以自己为根,向所有端口泛洪BPDU,当收到更优的BPDU时,转发BPDU(自己不发了)
4.1.1.802.1D端口经历的四个状态
1.block
2.listening 到learning用了15s(delay时间,用于生成树的选举)
3.learning 到forwarding用了15s(学习MAC地址)
4.forwarding 转发数据状态
4.1.2.什么情况下block端口会起来
10倍的hello时间(等50秒;20s+15s+15s)
我的直连端口断了(等30秒;15s+15s)
BPDU都是由指定端口发送,默认情况下每2s发送一次,block端口还是会接受BPDU
4.1.3.如何影响选举root端口
调整自己接口的cost值
int f0/23
spanning-tree vlan 1 cost 99
改root接口的优先级
int f0/24
spanning-tree vlan 1 port-priority 0-240(16的倍数,默认是128)数字越小,优先级越高
4.1.4.计时器(要保证所有设备一致)
spanning-tree vlan 1 max-age 15
spanning-tree vlan 1 forward-time 14
spanning-tree vlan 1 hello-time 3
1.5.STP的一些高级特性
4.1.5.portfast
portfast还是会发BPDU的
针对边缘接口(直接从block跳到forwarding)
int f0/1
spanning-tree portfast
在全局下配置:
spanning-tree portfast default (针对所有的非trunk接口)
4.1.6.BPDU-Guard
在配置了portfast接口下,如果收到了BPDU马上进入err-disable状态
在全局模式下
spanning-tree portfast bpduguard default ///针对设备上所有开启portfast接口有效
int f0/24
spanning-tree bpduguard enable///不管任何类型的接口都会启用
恢复errdisable状态:
进入接口:
shutdown
然后no shutdown
全局模式下:
errdisable recovery cause bpduguard///开启自动恢复
errdisable recovery interval 30s///30秒后恢复正常
4.1.7.BPDU-filter(忽略BPDU报文)
不传输也不接收BPDU
全局下配置:
spanning-tree portfast bpdufiter default///针对设备上所有开启portfast接口有效,不发BPDU
在接口下配置:
int f0/23
spanning-tree bpdufilter enable///将对所有类型的接口有效,不发也不收BPDU
不应该配置在配置了BPDU-Guard的接口上
4.1.8.Root-Guard
当我的端口收到一个比当前的root更优的BPDU后
只能在接口上配置:
int f0/24
spanning-tree guard root
在此接口上收到一个比当前的root更优的BPDU后进入rootinconsistent
show spanning-tree inconsistentports
show spanning-tree interface f0/24 inconsistency
errdisable和inconsistent的区别是,errdisable会disable掉整个接口,inconsistentport是针对特定的vlan的
4.1.9.Loop-Guard
配置在根端口和block端口
Loop-Guard解决的是软件导致的单向链路故障(拥塞)照成的环路
交换机在block端口20秒没有收到BPDU(对方单向链路故障造成),就进入Loop-Guard
///可以配置BPDU-filter来模拟实验
int f0/24
spanning-tree guard loop
在全局下:
spanning-tree loopguard default///针对所有接口有效
20s后收不到BPDU,端口进入inconsistent状态
show spanning-tree inconsistentports查看到
VLAN0001 FastEthernet0/22 LoopInconsistent
4.1.10.UDLD
UDLD解决的是硬件导致的单向链路故障
UDLD有2种模式
1.Normal mode:检测到单向链路故障后,仅仅触发一个syslog
2.Aggressigve mode:检测到单向链路故障后,每秒发送一个报文,连续发8秒,如果这些报文都丢失了,则将接口shutdown(err-disable)
配置命令
在全局下:
udld enable [aggressive]在所有光纤接口下激活UDLD,默认是normal模式 ,可以加上aggressive
在接口下:
int f0/24
udld port [aggressive]
恢复方法:
1.shutdown,no shutdown
2.配置recovery恢复
4.1.11.Uplink-fast
spanning-treeuplink-fast//支持自己的上行链路发生问题
当上联端口挂掉后直接进入forwarding,省去30秒的时间
shspanning-tree uplinkfast vlan 1
开启了uplinkfast后,当自己的直接链路挂掉后,会把自己的根桥优先级都置为最高,不让自己成为根
然后把自己接口的cost值+3000,不让那些接口成为指定接口(不让自己去转发BPDU,因为不稳定)
4.1.12.Backbonefast
spanning-treebackbonefast///开启后支持根的查询(支持r2的上行链路发生问题)
当收到一个次优的以自己位根的BPDU
r3会发送RLQ(根的链路请求报文)
根r1会回复一个RLQ-respond,表示自己还活着
r3的block端口会马上进入Listening状态,不需要等待20秒
配置在root设备上和有block端口的设备上
by eyesforver
cisco network engineer