STP 生成树原理
【STP的介绍】
STP 的全称是spanning-tree protocol 。STP 协议是一个二层的链路管理协议,它在提供链路冗余的同时防止网络产生环路。STP 协议(Spanning tree protocol) 的本质就是实现在交换网络中链路的备份和负载的分担.STP 是生成树协议, 主要功能是从拓扑中清除第2 层环路。
【BPUD与生成树原理分析】
一。BPDU 里有什么?
二。每个字段做什么用?
协议ID 和版本号:目前都是0 ,表示的是这是个STP 协议。
BPDU 类型:表示的是配置BPDU 还是TCN 的BPDU 。
标志域:第一位和最后一位有用到,用来表示这是一个拓扑变更帧,还是拓扑变更确认帧。
根网桥ID :
路径成本:4 个字节,计算到根桥的路径成本。
桥ID :8 个字节。由2 个字节优先级和6 个字节MAC 地址构成。2 个字节里前4bits 表示优先级,后12bits 表示扩展位(vlan 数)。默认优先级是32768 ,最大是65535 。
端口ID :由优先级加端口出厂编号构成,优先级可以修改,但是一般不推荐修改。
消息老化时间:
消息寿命:消息最多存活时间。
hello 时间:默认是两秒,可以修改。
转发延迟:默认是15 秒,可以修改。
实例图分析:
实验环境:在宿舍用wireshark 抓的包。
先看1 的部分:看到目的MAC 地址是01 :80 :c2 :00 :00 :00 ,这是个组播地址。
再看2 的STP 部分:
协议标识和版本都是0.
类型:是配置BPDU 。
根标识:这里优先级是0 。(不是很清楚,或许是被改过了)
路径开销是:220020 (这个是累加的)
桥ID :优先级32768 。
端口标识:0x800e
消息老化时间:3
hello 时间是2s 。
转发延迟是15s 。
三。BPDU 里的字段怎么用? (生成树的原理)
浩哥说:“我们只看BPDU ”。
现在就看看怎么用BPDU 来解释STP 原理。
首先看几个术语:
根桥 :具 有最小桥ID 的交换机。
根路径开销 :一台交换机的根路径开销是根端口的路径开销与数据包经过的所有交换机的根路径开销之和。根桥的根路径开销是零。
根端口: 每台交换机都有一个根端口,这个端口到根桥的路径开销最低。一旦多个端口具有相同的到根桥的路径开销时,那么具有最低的端口ID 的才会成为根端口。
指定端口: 为每个交换LAN 网段选定的转发端口。
现在正式开始:
用一个拓扑图来说明:(这是NA 时聪哥引以为豪的拓扑)
假设:他们的优先级默认都一样,都是32768.
带宽都一样,是100M 的。
1. 根桥的选举:
在交换机开机后,每个接口都会发送出BPDU 信息,将自己的桥ID 填入根网桥ID 字段,然后进行协商。发现别人的桥ID 比自己大,就把根网桥换成别人的,如此迭代到根网桥选出为止。这里协商后根网桥为:sw1 。因为他的mac 地址最小。(二层取小,三层取大原则)。
总结:一个 VLAN 里只有一个根网桥。
2. 根端口的选举:
根网桥选举后,只有根网桥会发送BPDU 信息,其它交换机不会发送,但是会转发BPDU 信息。首先从接受到的BPDU 中查看cost of path 字段,将自己到链路的开销加上里面的BPDU 的值,形成新的cost of path 值传出去。例如:sw2 和sw3 ,sw2 从1 口看到BPDU 中cost of
path 的值是0 ,因为是根桥发来的,由于自己知道自己的接口是100M 的,所以将19 加上0 等于19 ,填入那个字段。同理sw3 的1 口也一样。这时候sw2 和sw3 分别各从1 口收到的BPDU 的开销值都是19. 现在来分析sw2 上2 口的链路开销值。2 口的cost of path 的值为19 加上sw3 的19 ,即是38. 同理分析sw2 和sw3 的其它接口,所以sw2 和sw3 选择1 口作为根端口。
如果开销值一样,就比较发送BPDU 的桥ID 。例如:sw4 的端口1 和2 ,由于到根网桥的链路开销一样,所以现在比较发送BPDU 的桥ID ,从1 口接受到发送的桥ID 比较小,所以1 是根端口。
如果开销值和发送BPDU 的桥ID 都一样,那就比较发送BPDU 端口ID 字段。例如sw5 中1 和2 端口,由于BPDU 是sw4 发送过来的,所以看sw4 的端口号,3 比4 小,所以和3 相连的sw5 端口2 是根端口(注意这里不是端口 1 ,因为要看发送 BPDU 的端口号 )。
总结:一个交换机只有一个根端口。
3. 指定端口的选举。
1 )根桥上的端口都是指定端口。(根桥要向外发BPDU 和数据,所以一定端口一定都是指定端口)
2 )根端口对应的都是指定端口。
3 )其他的选择跟选根端口的原则基本一样。但是第二步,开销值一样时,选择桥ID 的时候不一样。
这里的桥ID 是本交换机的桥ID 。其实指的也是发送BPDU 的桥ID 。
例如:sw2 和sw3 的2 端口,因为选择的指定端口是用来转发BPDU 的,所以比较后,sw2 的桥ID 比较低,成为指定端口。
总结:一个网段上,只有一个指定端口。
4. 非指定端口。
除了上述说的,剩下的端口就是非指定端口,也就是要被阻塞掉的端口。
【小小总结】
STP 防止环路的机制是将某些端口阻塞掉,。选根端口,就是选路径,选指定端口就是决定要在网段上要将两个口的哪个口给阻塞掉,从而达到目的。
关于 STP 的目的是防环路还是为了冗余的理解:
STP 是为了更好地冗余。两个方面来理解:
1 )环路产生的原因的是冗余。
2 )后面发展RSTP ,MSTP 都不仅仅是为了防环路,如果是的话,802.1D 就可以了。引用第一段的话,STP 协议的本质就是实现在交换网络中链路的备份和负载的分担,也就是为了更好的冗余。
友情提示:
1. 根据发送的 BPDU 来判断,只有根网桥才能发送 BPDU 。
2. 理解根端口和指定端口的区别,根端口是用来接受 BPDU 信息,而指定端口是用来转发 BPDU 等信息的,一个是接受方,一个是发送方,所以当链路开销一样时,在选择指定端口和根端口时候是相反的。
最后啰唆一下,“我们只看 BPDU “。 浩哥这话真是经典。
二〇〇九年八月六日
wzhj132