交换机生成树协议

相关知识:

1.STP概念

生成树协议(spanning-tree-protocol,stp),就是在具有物理环路的交换机网络上生成没有回路的逻辑网络的方法,生成树协议使用生成树算法,在一个具有冗余路径的容错网络中计算出一个无环路的路径,使一部分端口处于转发状态,另一部分处于阻塞状态(备份状态),从而生成一个稳定的、无环路的生成树网络拓扑,而且一旦发现当前路径故障,生成树协议能立即激活相应的端口,打开备用链路,重新生成STP网络拓扑,从而保持网络的正常工作。

2.STP工作原理

(1)交换桥协议数据单元(Bridge Protocol Data Unit,BPDU)

(2)具有最高优先级(优先级ID 的值最小)的交换机被选为根交换机

(3)在选举出根交换机后,所有的非根交换机会选择到达根交换机的最短路径

(4)选举出根交换机和最短路径后,根端口和指定端口也随之确定 

(5)当网络拓扑发生变化时,交换机会自动启用备份链路

3.生成树相关配置

(1)配置生成树协议STP

spanning-tree mode pvst

(2)配置交换机优先级

spanning-tree vlan 1 priority 4096(priority)

其中:priority的取值范围是0~61440,按4096的倍数递增,缺省值为32768.

(3)配置端口优先级

spanning-tree vlan  1 port-priority 32

其中:priority的取值范围是0~240,按16的倍数递增。

4.STP将一个环形网络生成无环拓扑的步骤:

选择根网桥(root bridge

【网桥ID:】

-每个网络只能有一个根桥,根桥具有最低的桥ID,根桥上的所有端口都是指派端口。

一个网桥ID是由8个字节组成的。(其中头2个字节是标识网络优先级,后6个字节标识网桥的MAC地址)

优先级在出厂的时候默认的都是32768,而优先级的取值范围则是0~65535

     网桥的MAC地址简称为“基本MAC地址”也就是“基M”

1.所以选择根网桥,首先先比较优先级,谁的优先级最小就选谁作为根桥。

但是交换机出厂的时候,它们的默认优先级都是32768

2.所以在优先级相同的情况下,就只能看网桥的MAC地址,谁的MAC地址最小小谁就可以作为根桥



-选择根端口(root ports

在非根网桥上选择一个到根网桥最近的端口作为根端口

选择根端口的依据是:

      1.-根路径成本最低(比的是cost值)

          什么是cost值呢,cost值也叫根路径成本。而根路径成本是指非根网桥到根网桥的路径上所有链路的成本之和。


那么交换机C的E0/1的端口的cost值就=路径成本19+路径成本100=cost119

          【人为规定:100M的以太网所花费的cost值是19,而10M的以太网所花费的cost值是100

带宽越大,所花费的cost值就越小。


-直连网桥的网桥ID最小(比的是Bridge ID)


如上图所示,根网桥是交换机A,根端口就是三个红圈标注的地方,那么交换机D为什么是上面的端口是根端口呢,因为在它的两边直连网桥的优先级相同都是32768的情况下,就比较这两个网桥的bridgeID地址大小,那么明显交换机B的MAC地址小(000d.2810.d100>000d.2805.c100),所以在D上会选择这上边作为根端口。

在生成树已经生成的情况下,第三条链路只能作为备份线路来使用,在正常情况下,是不会转发数据的,除非第一条或者第二条链路宕掉了,那么第三条链路才会启用。


生成树的端口状态:

生成树的端口状态一共有五种:

1.转发forwarding    发送和接收用户数据   

2.学习 learning      构建网桥表     构建好网桥表以后,再过15秒就会进入转发状态。

3.侦听 listening      构建“活动”拓扑选举根桥、根端口、指定端口   算生成树,算好以后,经过15秒进入学习状态。

4.阻塞 blocking      只接收BPDU     应该是每隔2秒会收到来自根桥的BPDU,如果20秒还没收到,就会进入侦听状态。

5.禁用 disable       强制关闭

在上面的五个状态里面,只有转发状态,可以接收和发送用户数据,其他的四个状态都是不可以发送和接收用户数据的工作任务:你是某公司的网络管理员,公司有技术部、业务部计算机分别通过两交换机接入到公司局域网,并且这两部门平时常有业务往来,要求保障两部门的网络通畅,其中,一条为双绞线,一条为光缆,要求在交换机上做适当配置,使网络既有冗余又避免环路。

任务分析:在2台交换机上分别启动生成树协议,使2条链路中的1条处于工作状态,另一台处于 备份状态,当工作链路出现问题时,备份链路可以在最短的时间里投入使用,保证网络通畅,为了保证光纤链路由于双绞线工作,需设置光纤口优先级高于双绞线端口,保证正常情况下,优先使用光纤端口。


任务实施:

1.配置各pc的ip地址

2.配置交换机生成树

交换机SwA

第一步:

启用交换机生成树协议(交换机默认为启动状态)

SwA(config)#spanning-tree vlan 1

第三步:

生成树,模式设置为802.1d。

SwA(config)#spanning-tree mode pvst  //基于VLAN的STP

第四步:

SwA为根交换机,设置优先级高于SB

SwA(config)#spanning-tree vlan 1 priority 4096  //设置交换机桥的优先级

第五步:

为使端口f0/2优先于f0/3工作,设置f0/2端口优先级优于f0/3端口优先级

SwA(config)#interface f0/2

SwA(config-if)#spanning-tree vlan 1 port-priority 32

SwA(config-if)#exit

配置SwB和SwA一样

















生成树协议Spanning Tree Protocol, STP)是一种网络协议,用于在交换机之间建立一棵树形拓扑结构,以避免网络中的环路。在生成树协议中,交换机通过选举根交换机,并计算出每个交换机到根交换机的最短路径,从而构建一棵树形结构。 以下是一个简单的用 C 语言实现生成树协议的代码: ```c #include <stdio.h> #include <stdbool.h> #define MAX_NODES 10 #define MAX_EDGES 20 struct Edge { int src; int dest; int weight; }; struct Graph { int V; int E; struct Edge edges[MAX_EDGES]; }; void printTree(int parent[], int n) { printf("Edge \tWeight\n"); for (int i = 1; i < n; i++) { printf("%d - %d \t%d\n", parent[i], i, weight); } } int find(int parent[], int i) { if (parent[i] == -1) { return i; } return find(parent, parent[i]); } void unionNodes(int parent[], int x, int y) { int xset = find(parent, x); int yset = find(parent, y); parent[xset] = yset; } void kruskalMST(struct Graph graph) { int parent[MAX_NODES]; for (int i = 0; i < graph.V; i++) { parent[i] = -1; } int edgeCount = 0; int i = 0; while (edgeCount < graph.V - 1 && i < graph.E) { struct Edge nextEdge = graph.edges[i++]; int x = find(parent, nextEdge.src); int y = find(parent, nextEdge.dest); if (x != y) { unionNodes(parent, x, y); edgeCount++; } } printTree(parent, graph.V); } int main() { struct Graph graph = { .V = 6, .E = 8, .edges = { { 0, 1, 4 }, { 0, 2, 3 }, { 1, 2, 1 }, { 1, 3, 2 }, { 2, 3, 4 }, { 2, 4, 5 }, { 3, 4, 2 }, { 3, 5, 3 } } }; kruskalMST(graph); return 0; } ``` 在此代码中,我们使用 Kruskal 算法来计算生成树。我们首先定义了一个 `Edge` 结构体,表示边。然后定义了一个 `Graph` 结构体,表示图。`kruskalMST` 函数使用 Kruskal 算法来计算生成树。我们使用 `find` 和 `unionNodes` 函数来实现并查集来判断是否存在环路。最后,我们在 `printTree` 函数中输出生成树的边和权重。 当然,这个代码只是一个简单的实现,实际上生成树协议还包括了很多其他的特性,比如优先级、端口状态等等。要实现一个完整的生成树协议,需要更加复杂的代码和算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值