1 实验内容
1、基于已有代码,实现生成树运行机制,对于给定拓扑(four_node_ring.py),计算输出相应状态下的生成树拓扑
2、构造一个不少于7个节点,冗余链路不少于2条的拓扑,节点和端口的命名规则可参考four_node_ring.py,使用stp程序计算输出生成树拓扑
2 实验原理
一、生成树机制
通过禁止(block) 设备的相关端口,在有环路的网络中构造出一个总体开销最小的生成树拓扑,使得网络在连通的前提下,避免广播风暴。
二、生成树的唯一性
具有相同开销的生成树可能并不唯一,选择优先级最高的生成树作为唯一生成树。
-
- 节点ID最小的点作为生成树的根节点
- 每个节点选择到树的根节点优先级最高的路径
- 优先级顺序:路径开销 > 所连接的节点ID大小 > 所连接的端口ID大小 > …
-
-
- 路径开销路径开销等于路径上全部链路开销之和,链路开销与链路带宽相关,带宽越高,开销越小
-
三、生成树机制的基本原理
经过有限次的收发Config消息,网络中能够“选举”出唯一的根节点,即ID最小的节点;
除根节点外,每个节点选择通过自己的根端口连接到根节点,使得到根节点的路径开销最小;
为了保证新的Config消息能够扩散到其他节点,每个节点会通过指定端口发送Config消息;
生成树机制收敛后,每个网段内所有端口存储的配置都相同。
四、构建生成树拓扑的流程
1、初始化阶段:每个节点认为自己是根节点,并将自己的所有端口设定为指定端口,用于发送config消息
2、运行阶段:
(1)根节点通过hello定时器(2秒)周期发送Config消息
(2)处理config消息:当端口收到config消息时,将本端口的config与收到的config进行优先级比较。
-
-
- 如果收到的config优先级高:
-
-
-
-
- 说明该网段应该通过对方端口连接根节点,因此本端口为非指定端口(断开链路),本端口的config消息更新
- 节点状态更新,从本节点中所有非指定端口中选举根端口,通过比较端口间config消息的优先级,选举config消息优先级最高的非指定端口为根端口
- 更新节点其他端口的config消息,并通过指定端口发送出去
-
-