广播域与冲突域
集线器
集线器(Hub)设备不能识别MAC地址和IP地址,对接收到的数据以广播的形式发送,同一时刻由集线器连接的网络中只能传输一组数据,如果发生冲突则需要重传。集线器下连接的所有端口共享整个带宽,即所有端口为一个冲突域,它的所有端口为一个冲突域同时也为一个广播域。
交换机
交换机是工作在数据链路层的设备,在接收到数据后,通过查找自身系统MAC地址表中的MAC地址与端口对应关系,将数据传送到目的端口。相比于集线器,交换机(Switch)可以分割冲突域,它的每一个端口相应的称为一个冲突域。
路由器
使用路由器(Router)设备来分割广播域。路由器并不通过MAC地址来确定转发数据的目的地址。路由器通过IP地址将连接到其端口的设备划分为不同的网络(子网),每个端口下连接的网络即为一个广播域,广播数据不会扩散到该端口以外。
集线器 | 交换机 | 路由器 | |
识别MAC | 不能 | 能 | 不能 |
识别IP | 不能 | 不能 | 能 |
数据发送形式 | 广播 | 广播/单播 | 广播/单播/组播 |
是否发生冲突 | 是 | 否 | 否 |
OSI工作层级 | 一层 | 二层 | 三层 |
二层环路带来广播风暴
环路网络中,数据帧通过交换设备多次泛洪后,网络中便会出现大量方向互异的广播流。当超过交换设备所能承载的数据处理能力后,正常的数据帧传输将受到了抑制,导致信道的拥塞,其结果往往是延时或丢帧。
一个数据帧或包通过广播的形式,在网段内大量复制,传播,导致网络性能下降,甚至瘫痪,这就是广播风暴。
构建无环的二层结构
二层环路的逻辑阻断
生成树协议,Spanning Tree Protocol(STP),工作于OSI网络模型中的第二层(数据链路层)的通信协议,基本应用是防止交换机冗余链路产生的环路。用于确保以太网中无环路的逻辑拓扑结构,从而避免了广播风暴大量占用交换机的资源。
- 在每个广播域内,选举1个根桥,用于管理维护
- 在每个设备上,选举到根最优的端口,作为根端口
- 在各设备之间的冲突域内,选举最优的转发端口,作为指定端口
- 阻断非根、非指定的冗余端口
角色释义
Root Bridge(根桥):发送最好BPDU的交换机
Root Port(根端口):非根桥上接收最好BPDU的端口
Designed Port(指定端口):冲突域内发送最好BPDU的端口
Block Port(阻塞端口):既不是RP也不是DP的端口,被BLOCK
PS:RP端口对端一定是DP,DP端口要么对着RP,要么对着AP(标准是BP,华为是借用RSTP概念选用Alternate Port描述)
BPDU参数
Root ID:根桥的BID
Root Path Cost:非根桥根端口到根桥的路径开销之和(根桥自身RPC为0)
Bridge ID:设备的ID,由各设备自身的优先级、MAC地址组成。默认值32768,取值间隔4096,取值范围0-65535(思科),或0-61440(思科、华为)
Port ID:端口的ID,由各端口自身的优先级、端口号组成。默认值128,取值间隔16,取值范围0-240,例如16进制8001(10进制为128.1),前两位是优先级,后两位是端口号,通过display g0/0/1查看。
阻塞判定过程
冲突域角色之争
判断原则:BPDU各参数越小越优
比较次序:RID>∑(RPC)>BID>PID
争夺根桥
初始状态,各设备认为自已是根桥(即RID=BID),向外发送4参数的BPDU(RID.RPC.BID.PID),例如S1_MAC.0.S1_MAC,A_PID,通过判定,选出当前环路网络中BID最小的作为根桥
设置根端口
根桥确定后,进行BPDU参数比较,将接收到最好BPDU的端口设置为根端口
确认指定端口
根桥上的所有端口,均为指定端口,用于外发最好的BPDU;非根桥上选定RP之后,在其他的端口中,进行BPDU参数比较,选择转发BPDU最优的端口作为指定端口
广播域阻塞判定
将广播域中,既非根端口,也非指定端口的冗余端口,进行阻塞
动态平衡实现持续无环状态-和谐就是单位时间内的相对稳定
角色状态
在同一冲突域内,当设备启动后,默认自身是根桥,端口相互连接后,端口由blocking/discarding状态开始,向外泛洪自身的BPDU,当收到对端的BPDU后,如果优于自身,将会接受并储存对端的BPDU,此BPDU将作为该冲突域的有效BPDU,用于维持该冲突域的角色状态和运行状态,发送该BPDU的端口将作为指定端口,接收到此BPDU的端口将作为根端口,接受到该BPDU的设备不再认为自己是根桥,并用该BPDU的RID,和经过该冲突域到根桥的RPC之和,加上自身的BID,去计算自身其他端口的BPDU。其他端口也会同时存在自身的BPDU,接收的BPDU,计算的BPDU,基于最好的BPDU,越小越优的判断原则,选用其中之一,作为其的所在冲突域的唯一有效BPDU,当端口通过多轮的比较之后,计算的BPDU不再优于自身的BPDU、接收的BPDU,将被阻断。
运行状态
稳定STP网络只有2种状态,FORWARDING和BLOCKING,当设备启动后,端口将置于BLOCKING状态,并进行BPDU的报文处理。但为了防止端口快速进入FORWARDING状态而给网络带来临时环路的风险,该端口需要进入LISTENING状态,等待其加入的目标网络进行有足够的时间进行拓扑变化的通告。
STP协议默认以2秒为HELLO通告间隔,可覆盖7层半径的网络深度,在经过默认的15秒后,认为足够完成BPDU信息的全局同步。
此时,该端口将进入到LEARNING状态,并开始学习流量中的MAC地址信息,构建MAC地址的端口转发映射表。
STP协议考虑到拓扑变化可能会带来转发错误的情况,在LISTENING过程中,进行全局通告拓扑变化的BPDU内,已默认将收到该BPDU设备的MAC地址表老化时间设置为一个转发延时,即15秒,用于清除错误的MAC地址信息,也误将空闲的MAC地址加速老化。如果此时进行数据转发,将会产生大量的未知MAC单播帧的泛洪,影响网络性能。
因此,在全网已停止发送老化MAC地址表的BPDU后,考虑到网络深度,设计出LEARNING状态,LEARNING状态下,端口开始学习流量中的MAC地址信息,重新构建正确的MAC地址端口转发映射表,经过15秒的持续学习和刷新,最终达到MAC地址表的稳定状态,LEARNING状态的设计减少了单播帧在STP收敛期间产生大量的泛洪行为。随后,端口进入到FORWARDING状态,进行数据转发。
- DISABLED:禁用状态或未接线。端口既不处理和转发BPDU报文,也不转发用户流量。
- BLOCKING:阻塞状态。处理BPDU,不转发BPDU,不学习MAC,不转发数据。阻塞端口的最终状态。
- LISTENING:侦听状态。处理BPDU,转发BPDU,不学习MAC,不转发数据。
- LEARNING:学习状态。处理BPDU,转发BPDU,学习MAC,不转发数据。端口可根据收到的用户流量构建MAC地址表。增加该状态是为了防止临时环路。
- FORWARDING:转发状态。处理BPDU,转发BPDU,学习MAC,转发数据。只有根端口或指定端口才能进行该状态。
拓扑变化
判断依据
1当端口进入到FORWARDING状态
2RP失效
PS:STP协议最早认为任何端口进入到FORWARDING状态或进入DISABLE状态时,认为STP拓扑发生变化。当前STP协议,DP端口进入DISABLE状态或失效不认为拓扑发生变化。
切换场景
非根桥的RP失效,不存在AP时
此时设备认为自己失去了到根桥的所有路径。于是该设备将自身做为根桥,发送以自己为根桥的BPDU。下游设备接收到该设备的BPDU后,需要等待默认20秒的HELLO失效间隔,才能将之前的BPDU老化,再处理新接收的BPDU,并进行设备、端口的角色判定,然后端口经历30秒的LISTENING和LEARNING的过程,最终达到FORWARDING状态,整个过程,总共需要50秒,然后网络恢复正常。
- 设备B感知到网络拓扑发生变化后,会不间断地向设备C发送TCN BPDU报文,发送间隔为2倍的HELLO时间。
- 设备C收到设备B发来的TCN BPDU报文后,因其端口已有的BPDU将其置为BLOCKING状态,新接收的BPDU需要等待已有BPDU的老化,即默认的20秒超时时间。
- 超过20秒后,抑制设备C的BPDU已清空,该端口也将进行FORWARDING的初始化过程,并接受该BPDU,将配置BPDU报文中的TCA位置为1,发送给设备B,以确认并告知设备B可以停止发送TCN BPDU报文。同时,设备C由根端口向根桥发送TCN BPDU报文。
- 根桥A收到设备C发来的TCN BPDU报文后,获知生成树拓扑已发生变化,会把配置BPDU报文中的TCA、TC位均置为1,然后发送给设备C,同时,通过其他指定端口,组播发送TCA为0,TC为1的配置BPDU,通知下游设备把MAC地址表项的老化时间由默认的300秒修改为1个FORWARD DELAY的时间(默认为15秒),持续发送35秒。
- 设备C收到TC为1的TC BPDU后,将自身所有端口(边缘端口除外)的MAC地址表老化时间置为1个转发延时,经过默认的15秒之后,设备C中的错误MAC地址表项会被自动清除,此后设备C重新开始MAC表项的学习及转发操作。
- 其他设备将持续收到根桥发送的TCA为0,TC为1的组播TC BPDU,因各设备已有的BPDU超时为默认20秒,TC重置MAC老化时间为15秒,因此,该BPDU将持续发送35秒,以确保各设备接受该BPDU,达到全网同步的效果。
非根桥的RP失效,存在AP时
此时设备认为AP是另一条可达根桥的候补端口,直接将AP置为新的RP,并经历LISTENING和LEARNING的过程,最终达到FORWARDING状态,整个过程,总共需要30秒,然后网络恢复正常。
- 设备C根端口失效,感知到网络拓扑发生变化,会不间断地向设备B发送TCN BPDU报文,发送间隔为2倍的HELLO时间。
- 设备B收到设备C发来的TCN BPDU报文后,会把配置BPDU报文中的TCA位置为1,然后发送给设备C,以确认并告知设备C可以停止发送TCN BPDU报文。
- 设备B由根端口向根桥转发TCN BPDU报文。
- 根桥A收到设备B发来的TCN BPDU报文后,获知生成树拓扑已发生变化,会把配置BPDU报文中的TCA、TC位均置为1,然后发送给设备B,同时,通过其他指定端口,组播发送TCA为0,TC为1的配置BPDU,通知下游设备把MAC地址表项的老化时间由默认的300秒修改为1个FORWARD DELAY的时间(默认为15秒),持续发送35秒。
- 设备B收到TC为1的TC BPDU后,将自身所有端口(边缘端口除外)的MAC地址表老化时间置为1个转发延时,经过默认的15秒之后,设备B中的错误MAC地址表项会被自动清除,此后设备B重新开始MAC表项的学习及转发操作。
- 其他设备将持续收到根桥发送的TCA为0,TC为1的组播TC BPDU,因各设备已有的BPDU超时为默认20秒,TC重置MAC老化时间为15秒,因此,该BPDU将持续发送35秒,以确保各设备接受该BPDU,达到全网同步的效果。
BPDU | TCA | TC |
配置 | 0 | 0 |
拓扑改变确认 | 1 | 0 |
拓扑改变确认并配置 | 1 | 1 |
拓扑改变配置 | 0 | 1 |
拓扑改变通告 |
PS:
边缘端口标准STP是不支持的,但是华为的STP协议支持边缘端口的设置。
厂商处理STP协议的差别
思科:
当接口UP(进入FORWARDING状态)或者是RP失效、DOWN的事件发生后,将导致产生TCN BPDU(某些IOS可能只会当UP事件发生才发送TCN BPDU)
上游非根设备接收到TCN BPDU后会产生TCA=1,TC=0的配置BPDU用于对此TCN的确认,并将TCN从根端口向根桥方向逐跳传递给根桥
当根桥接收到TCN BPDU后,会向收到此TCN BPDU的端口回送TCA=1,TC=1的配置BPDU,用于对TCN BPDU确认的同时,也用于通知该下游设备网络的拓扑发生了改变
根桥会在其他端口上发送TCA=0,TC=1的配置BPDU,这次的TC=1的BPDU会在整个网络中进行泛洪
华为:
当接口UP并过渡到FORWARDING状态,会发生TCN BPDU
逐跳传给根桥,上游向下游发送TCA=1,TC=1的配置BPDU,用于确认TCN,并将TCN逐路传给根桥。
根桥在接收到TCN的端口上回送一个TCA=1,TC=1的配置BPDU,用于确认TCN,并通知网络拓扑发生变化。
根桥在其他端口上发送TCA=0,TC=1的配置BPDU
PS:RP恢复到FORWARDING状态后,并且有一个指定端口在转发状态, 此RP也会发TCN BPDU。
PS:标准STP 由根桥发送配置BPDU,非根桥是不能主动发送BPDU
STP总结
在稳定STP网络中端口状态只有2种
1 BLOCKED/DISCARDING(BP、AP)
2 FORWARDING(RP、DP)
一个BLOCKING状态的RP或DP至少需要30秒达到FORWARDING状态
拓扑发生变化
1、当设备感知到拓扑发生变化 (非边缘端口过渡转发状态)
2、在状态发生变化的设备端口上发送TC BPDU,时间为HELLO TIME 2倍。
3、收到TC BPDU的交换机清空所有端口的MAC地址,除了边缘端口和收到TC BPDU的端口。
4、继续泛洪TC BPDU,实现全网MAC地址表的更新。
STP常用命令
设置STP时间参数
stp timer hello
stp timer forward-delay
stp timer max-age
设置STP优先级
stp priority 0
设置RPC计算协议(默认DOT1T)
stp pathcost-standard dot1d-1998/dot1t/legacy
设置端口开销
interface g0/0/3
stp config-digest-snoop
stp cost 30000
查看端口状态
display stp brief
快速定位根桥
display stp
CIST BRIDGE:自身BID
CIST ROOT/ERPC:根桥BID,根端口到根桥的外部根路径开销
CIST REGROOT/IRPC:
CIST ROOTPORTID:根端口
自身BID=根桥BID,即为根桥
设置边缘端口
int g0/0/1
stp edged-port enable
PVSTP命令
spanning-tree vlan 1 priority 0
show spanning-tree vlan 1 brief
int f0/1
Shutdown
私有协议
思科:PVSTP VPSTP+
华为:VBST
RSTP
STP协议的不足
STP协议的收敛完全依赖计时器完成的,收敛速度慢,为了解决临时环路问题和收敛期间单播帧泛洪,需要等待30S。
为了解决STP收敛慢,开发了RSTP
RSTP BPDU
- RST BPDU
- TC RST BPDU
Proposal Agreement模式
P/A实现了在点到点全双工的链路上让DP和RP端口快速进入到转发状态,同时也不会产生临时环路
- 在点到点全双工链路上,端口默认自己为DP端口,且处于DISCARDING状态,互相发送P=1,A=1的BPDU,进行P/A协商
- 当对端收到P=1,A=1的BPDU后,将对自身其他端口进行置位,即DISCARDING掉非边缘端口、非RP端口,同时进行角色判定,设置为RP端口的一端,发送P=0,A=1的BPDU,然后将端口置为FORWARDING状态
- 另一端收到对端RP发送的P=0,A=1的BPDU后,认为对端RP已经处于无环拓扑的转发状态,于是将该端口立即过渡到FORWARDING状态。
- 置位成DISCARDING的端口,在其所属的全双工链中上,继续延续该P/A过程。
- 因为存在置位DISCARDING的动作,端口角色与端口状态的确定过程不再产生环路,同时加速了协商过程。
- 边缘端口,AP端口由于不会引入额外环路,默认认为已经同步置位
- 当RSTP的设备收到STP的BPDU,该端口将回退为STP端口,失去快速收敛的特性。
AP端口快速切换
当AP端口收到次级BPDU后,将老化已有的BPDU,立即进行端口角色计算,并进行P/A。
边缘端口
安全设置
TCP-BPDU攻击
对BPDU的单位时间内的处理次数设置阈值,超过阈值数量的BPDU,合并为1次,将在定时器到期后,进行统一处理。
根防护
设置根防护,避免因拥塞或错误的BPDU来不及处理或丢弃,产生AP转RP,RP转DP,发生临时环路的风险
BPDU防护
当边缘端口收到RST BPDU,实现ERROR-DOWN
stp bpdu protection
error-down auto-recovery cause bpdu-protection interval 30-86400
指定交换机:链路上DP端口所在的交换机,就是这条链路的指定交换机
MSTP
STP(802.1D)/RSTP(802.1W)是单生成树协议,在存在多个VLAN的网络中,所有VLAN共享一颗树,导致链路利用率不高,访问路径存在次优,不合适的TRUNK配置导致部分VLAN路径不通。
PS:PVSTP是基于VLAN的STP协议,但是每个VLAN独立维护STP拓扑,开销太大
为了解决RSTP单树弊端,开发了MSTP
例如VLAN1-50属于实例10,VLAN50-100属于实例20,全域仅维护两份STP实例
1-50 instance 10
51-100 instance 20
MSTP配置流程
配置过程
进入域配置
stp region-configuration
定义域名为hcie
region-name hcie
定义修订级别
revision-level 10
绑定VLAN到实例
instance 0-48 vlan 10
instance 20 vlan 20
激活实例配置
active region-configuration
基于实例进行负载分担
定义实例优先级
stp instance 10 root primary
stp instance 20 root secondary
定义端口优先级
stp instance 10 port priority
定义端口开销
stp instance 10 cost
MSTP多域互联
MSTP是总根多域多实例的生成树协议,通过将域内角色进行宏观放大,实现多域防环互联。
在MSTP协议中,各设备初始状态,默认以自身为根桥和域根,通过instance 0进行CST互联,只有当配置为相同域名后,才会转为IST模式运行,从而形成了IST和CIST。
instance 0既属于IST也属于CST,因此,需要为多域互联选举优先级最低的设备为总根,总根确定后,其所在的IST为根域,其他IST需要选举到总根IST最优的端口为MASTER端口,用于域间CST的互联,MASTER端口所在的设备即为该IST的域根。
每个IST域中有且仅有一个CST域的MASTER端口,当IST域内有多个端口可与总根互联,将进行MASTER端口的选举,到总根ERPC最小的端口即为MATER端口,若存在ERPC相同的情况,将比较设备的BID,BID最小的设备将被选定为域根,其端口为MATER端口。
其他IST域的边缘互联端口,通过比较总根ID、ERPC、域根ID、指定端口ID、接收端口ID,进行DP、AP端口的判定。