环路
什么是环路?
比如说我们配置两台交换机,经过交换机a的时候查找ARP表正好查到了交换机b的mac,到了交换机b又查找ARP表,查到了交换机a......以此往复,帧就会在这两个交换机之间传来传去。也就是形成了环路。
产生原因
二层环路:主要存在于交换机之间
1. 为了提高网路的冗余性,构建的物理环路
2. 误解造成的
三层环路:主要存在于路由器间
1. 路由配置错误
2. 双点双向路由引入情景下没有手动配置防环措施
结果
1. 导致网络不同,无法通信
2. 导致广播风暴,网络瘫痪(交换机收到未知数据后会进行泛洪)
3. 导致MAC地址漂移,网络访问失败
4. 占用内存,性能下降
解决方法
二层环路:
1. 链路聚合
2. 生成树
3. 堆叠
三层环路:
1. 数据层面,TTL
2. 设备层面,三层接口天然隔离广播域
3. 路由层面,动态路由存在对应的防环措施
STP基础概念
作用
解除二层环路,同时提供链路备份能力,这也是STP两个功能。
版本
802.1D----STP生成树
802.1S----RSTP快速生成树
8020W----MSTP多实例生成树
BPDU报文【参考】
STP采用的协议报文,全称为Bridge Protocol Data Unit,也称为配置消息。STP通过在设备间传递BPDU报文来确定网络的拓扑结构,并完成生成树的计算。该报文被封装在以太网数据帧中。
分类:
- 配置BPDU:STP用来进行生成树计算和维护生成树拓扑的报文 --0x00
- 普通配置BPDU
- TC BPDU:根桥发送,代表网路发生变化,收到该报文后非根桥清空MAC表重新学习
- RST BPDU:RSTP用来进行生成树计算和维护生成树拓扑的报文 --0x02 version 2
- MST BPDU:MSTP用来进行生成树计算和维护生成树拓扑的报文 --0x02 version 3
- TCN BPDU:非根桥感知到网络拓扑发生变化时,用来通知根桥的报文 --0x80
Hello Time:缺省为2秒,发送两个相邻BPDU的时间间隔
Forward Delay:缺省为15秒,控制Listening和Learning状态的持续时间
Max age:缺省为20秒,华为默认为18秒
主要内容:根ID(根交换机的桥ID,陌生的概念会在后面给出,先往下看),自己的桥ID,端口ID,到根的路径开销。
STP工作
角色划分
交换机角色:根桥、非根桥
接口角色:
标准规则下:RP(根端口), DP(指定端口) ,NDP(非指定端口)
华为规则下:RP(根端口), DP(指定端口), AP(代替端口,根端口的备份) ,BP(备份端口,指定接口的备份)
选举规则【参考】
BID(桥id)
每一个交换机都存在一个BID,由桥优先级(16bit)和MAC地址(48bit)构成。其中桥优先级是可以配置的,取值范围是[0, 61440],默认值为32768,若修改须设置为4096整数倍。
PID(端口id)
运行STP的交换机使用PID来标识每一个端口,PID可以用来确认端口角色,由端口优先级(4bit)和端口编号(12bit)构成。其中端口优先级是可以配置的,取值范围是[0, 240],默认值为128,若修改须设置为16整数倍。
根桥选举规则
优先选择BID小的,先比较优先级,再比较MAC地址。
选举完成后,只有根交换机会定期发送BPDU(每2s一次),非根交换机只能转发BPDU。
端口选举规则
必须先选择根桥后才可以进行端口选举。
- 选举DP:
- 根交换机上的所有端口都是DP,除非端口连着的是hub,那可能出现一个是DP其他是AP的情况
- 转发BPDU的是DP
- 一段链路上只有一个DP
- 优选花销小的(COST值)
- 花销相同,优选BID小的
- BID相同,优选发出PID小的
- PID相同,优选接收PID小的
- 选举RP:
- 一般接收DP端口发出BPDU的是RP
- 一个交换机只有一个RP
- 优选花销小的
- 花销相同,优选BID小的
- BID相同,优选发出PID小的
- PID相同,优选接收PID小的
- 选举AP:
- 作为RP备份
- 一般出现于链路一段是DP,但是本交换机已经有RP的情况(因为一个交换机只有一个RP)
- 选举BP:
- 作为DP备份
- 一般出现于和BP端口路径相同但是相连在同一个HUB的情况
接口状态
标准规则下:
- disabled:不收发任何报文(接口处于shutdown)
- blocking:不接收也不转发帧,接收单不发送BPDU,不学习MAC地址(20s)
- listening:不接收也不转发帧,接收并且发送BPDU,不学习MAC地址(15s)
- learning:不接收也不转发帧,接收并且发送BPDU,学习MAC地址(15s)
- forwaring:接收并且转发帧,接收并且发送BPDU,学习MAC地址
华为规则下使用的是RSTP,只有三种端口状态:
- discarding:不转发不学习(相当于disabled + blocking + listening)(18s)
- learning:不转发但是学习 (15s)
- forwarding:既转发又学习
拓扑变更:
交换机判断拓扑发生变化有两种情况:
1. 指定桥(交换机)发现DP端口故障
2. AP端口变成forwarding状态,且指定桥至少有一个DP端口
满足以上任何其一都会从RP端口发送TCN-BPDU报文,通知根桥拓扑发生变化。
收敛机制
备份链路激活
- 不存在备份接口:主链路故障重新恢复时间--18+15=33s / 20+15+15=50s
- 存在备份接口:恢复时间--备份接口从blocking状态转变为listing状态再转变为learning状态 15+15=30s
MAC清空
- 根桥感知故障,发送TC-BPDU,非根桥收到后:
- 标准情况下,Max age(老化时间)调整为15s
- 华为情况下,MAC表立刻清空
- 拓扑变更:
- 标准情况下,原端口进入disabled状态;备份端口进入forwarding状态
- 华为情况下,备份端口进入forwarding
STP改进
STP不足
- 收敛慢
- 无法实现负载分担
- 拓扑变更判断机制容易导致网络振荡
RSTP改进
- 判断拓扑改变:一个非边缘端口变成了forwarding状态。
- 引入边缘端口:如果某一个指定端口位于整个网络的边缘,即不再与其他交换设备连接,而是直接与终端设备直连,这种端口就是边缘端口。【什么情况下需要配置STP边缘端口】
- 加快收敛
- 端口角色的选举:一旦端口角色确定,直接进入forwarding状态
- 备份链路:存在备份端口,设备在主端口故障,备份端口会直接进入forwarding状态
- 拓扑变更:感知到拓扑发生变化的交换机直接发送TC-BPDU
- 终端链路:设置边缘端口,边缘端口up之后立刻进入forwarding,不需要计时器过渡等待
- 引进P/A
STP部署相关命令
- 修改桥优先级:stp priority [N] //如果要指定根桥,N直接等于0即可;修改值必须为4096倍数
- 修改端口优先级:进入要修改的端口后,stp port priority [N] //N必须为128倍数
- 指定边缘接口:
- stp edged-port default
- 进入指定端口后,stp edged-port enable //边缘端口打开