STP技术笔记


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字节)+端口ID1字节)(F0/0orF0/1

默认优先级128,范围0-255,越小越好

1.3.选举原则:

是看对端的优先级,本地的cost

在生成树中每个接口都有一个角色

3.802.1DPVST+

1.4.Bridge Protocol Data Unit 桥协议数据单元

PVST 真实的优先级+VLAN号(扩展ID),默认情况下,交换机以自己为根,向所有端口泛洪BPDU,当收到更优的BPDU时,转发BPDU(自己不发了)

4.1.1.802.1D端口经历的四个状态

1.block

2.listening       learning用了15sdelay时间,用于生成树的选举)

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-24016的倍数,默认是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

errdisableinconsistent的区别是,errdisabledisable掉整个接口,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解决的是硬件导致的单向链路故障

UDLD2种模式

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,表示自己还活着

r3block端口会马上进入Listening状态,不需要等待20

配置在root设备上和有block端口的设备上





by eyesforver
cisco network engineer