STP解析
生成树协议STP(Spanning Tree Protocol)将环形网络修剪成为一个无环的树型网络,避免报文在环形网络中的增生和无限循环。
在一个复杂的网络环境中,难免会出现环路。由于冗余备份的需要,网络设计者都倾向于在设备之间部署多条物理链路,其中一条作主用链路,其他链路作备份,这样都有可能会导致环路产生。
环路会产生广播风暴,最终导致整个网络资源被耗尽,网络瘫痪不可用。环路还会引起MAC地址表震荡导致MAC地址表项被破坏。
为了破除环路,可以采用数据链路层协议STP,运行该协议的设备通过彼此交互信息发现网络中的环路,并有选择的对某个端口进行阻塞,最终将环形网络结构修剪成无环路的树形网络结构,从而防止报文在环形网络中不断循环,避免设备由于重复接收相同的报文造成处理能力下降。
基本概念
根桥:拥有最小BID的交换机
根端口:非根桥交换机上离根桥最近的端口(根路径开销)
指定端口:针对于某网段的,每个网段上只有一个指定端口。
传输协议报文
BPDU —— 携带根桥BID,累计根路径开销,发送者BID,发送端口PID
交换机端口五种状态
Forwarding,Listening,Learning,Blocking,Disable。
Forwarding:
在这种状态下,端口才可以转发用户流量。(根端口,指定端口)
Learning:
这是一种过渡状态。这种状态下交换机会根据收到的流量构建MAC地址表。(不转发流量)
Listening:
这是一种过渡状态。这种状态下,选举完根桥,根端口,指定端口。
Blocking:
这种状态下,端口仅仅接收并处理BPDU,不转发用户流量。(阻塞端口)
Disable:
端口shutdown了。
STP选举过程
根桥:
一开始每个人都以为自己是根桥,将自己的BID填入BPDU中“根桥BID”中,泛洪出去,不停的比较,直到选出最佳BID为止。
根端口:
累计根路径开销最小的端口。
指定端口:
1.比较两个STP交换机根端口谁的开销最少,在最低开销的非根交换机那端是指定端口。
2.如果开销一样,桥ID越小的那端是指定端口。
RSTP
增加alternate,backup端口
将disable,blocking,listening缩成为discarding
快速收敛:
Proposal/Agreement快速收敛机制:指定端口-根端口链路可以快速进入转发状态
根端口快速切换机制:如果根端口失效,那么交换机立刻使最好的Alternate端口成为根端口
保护机制:
Port Fast,BPDU Guard等
BPDU处理变化:
触发发送——自主按照每个Hello时间发送
更短超时计时:连续三个Hello时间收不到BPDU就直接认为失效
根桥,根端口,指定端口的选举
STP过程——根桥选举
前提:网络初始化的时候,所有STP交换机都认为自己是根桥。
导致:所有每个端口发出的BPDU中,根桥字段都是自己的BID(2s一个BPDU)。通过交换机不停的交换BPDU,比较各自的BID(每个BPDU携带的都是“当前我认为的root BID”),直到选出最佳BID,达成一致。
工作原理:根桥竞选主要依据配置BPDU中的Root BID,值越小优先级越高。BID由8个字节构成——后六位字节MAC地址,前两个字节如图(因此网桥配置优先级要为4096倍数)
优先级 | System ID | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Bit | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
值 | 32768 | 16384 | 8192 | 4096 | 2048 | 1024 | 512 | 256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
STP过程——根端口选举
选举本质:其本质是“距离根桥最近的端口”,这个最近的衡量是靠累计根路径开销来判定的,即累计根路径开销最小的端口就应该是根端口。
累计根路径开销的计算方法:端口收到一个BPDU后,抽取该BPDU中累计根路径开销字段的值,加上该端口本身的路径开销。所谓该端口本身的路径开销只体现直连链路的开销,这个值是端口量,可以人为配置的。
特殊情况:如果有两个以上的端口计算得到的累计根路径开销相同,那么选择收到发送者BID最小的那个段口作为根端口。
STP过程——指定端口选举
选举过程:非根交换机与非根交换机之间连接线的两个端口中必定有一个端口为指定端口,此时比较两个非根交换机的根端口到达根桥的最低链路开销,将最低开销的非根交换机为准,其所在的连接线(为上面非根交换机与非根交换机之间连接线)的端口为指定端口,如果链路开销一样最后比较各自的桥ID即可。桥ID越小越好。
STP的可选特性
Port Fast
开启后,端口直连PC后将直接进入Forwarding状态,避免握手协商引发的转发延迟
BPDU Guard
正常情况下,直连PC的端口将不会收到BPDU报文并参与生成树运算。当收到一个BPDU,会发出报错并关闭该端口。此功能保护端口防止有人恶意发送BPDU给PC端口,也防止非法用户增加一台网络设备造成网络拓扑变化,全局开启BPDU G仅对开启了PORT FAST的端口生效
BPDU Filter
也能防止攻击者在连接PC的端口发送BDPU导致网络震荡。开启BPDU F后,将强制端口不收发BPDU报文,也不参与STP生成树运算,连接PC后将直接进入Forwarding模式。全局开启BPDU F仅对开启了PORT FAST的端口生效
TC-protection
交换机收到TC-BPDU报文后(将泛洪),将清空全网的MAC表。可以在RSTP和MSTP模式下通过根口或指派端口上发送,其BPDU的类型为0X02。此功能能防止别人恶意不断删除拓扑内交换机的MAC表,启用后(一般)4s内只删除一次MAC表,如果期间内又收到TC-BPDU报文,则在时间到了之后再删除一次。大幅度减少了恶意删除带来的影响,保证了网络环境的稳定性,保证业务正常运行
BPDU 源MAC检查
配置后,一个端口只允许配置一个MAC地址,交换机只接受源MAC和配置的MAC地址相匹配的BPDU报文,其他丢弃。防止恶意攻击导致MSTP工作不正常
Root Guard
根桥保护。在端口开启Root Guard功能,可强制其在所有实例上的端口角色为指定端口,一旦该端口收到优先级更高的配置信息时,Root Guard功能会将该端口置为root-inconsistent (Blocked)状态,如果在3倍的Hello time内没有收到更优的配置信息时,端口会恢复成原来的正常状态。在Root Port、Alternate Port或Backup Port上开启Root Guard功能,端口直接置为root-inconsistent (Blocked)状态,视为不应收到优先级更高的配置信息。
实例:
假设整个网络被划分为服务供应商网络和客户网络,根桥设置在服务供应商网络。当客户网络中出现优先级更高的设备或因人为的恶意攻击,可能导致根桥从原先服务供应商网络迁移到客户网络。为避免此类问题的发生,可以在服务供应商网络和客户网络的连接口开启Root Guard功能。如图所示,可以端口1和端口2上开启Root Guard功能,这些端口将被强制为指派端口,如果在这些端口上收到优先级更高的配置信息,Root Guard功能会将这些端口置为root-inconsistent (blocked)状态,即将相应链路上的数据流阻断,从而保持核心网络的拓扑信息不变。如果在一定时间内没有收到更优的配置信息时,端口会恢复成原来的正常状态。以图中虚线为界,客户和服务商网络独立地进行生成树的计算。
Loop Guard
交换机的根端口和其他阻塞端口的状态依靠不断接收上游交换机发送的BPDU来维持的。但是由于链路拥塞或者单向链路故障,这些端口会收不到上游交换机的BPDU而变成指派端口,导致网络中产生环路。Loop Guard功能能够抑制这种环路的产生,可以全局或在端口上开启Loop Guard功能,端口因为老化发生端口角色的转换,但是端口状态将一直处于Discarding状态(不会进行转发从而造成环路),从而不会在网络中形成环路。如果该端口再次收到BPDU,将重新进行生成树计算。
锐捷独有
TC Guard:配置之后,将不会全网泛洪TC-BPDU。只有确定了网络中存在TC攻击时,才对端口或全局开启TC Guard。
BPDU 非法长度过滤:BPDU报文的数据长度字段超过1500就丢弃
AutoEdge:边缘端口自动识别,3s收不到下游网络发来的BPDU,将直接认为是边缘端口,直接变成Forwarding状态
Cisco独有
Uplink Fast:很类似RSTP中的“根端口快速切换机制”。但Uplink Fast功能只在边缘的交换机上使能。
BackboneFast:是对UplinkFast一个延伸。该功能可以在整个STP域里的所有交换机上使能。使能该功能的交换机的根端口若收到一个次等BPDU,则会检查该BPDU的发送者BID,如果是上游指定桥发来的,则会认为上游链路失效。