今天看到了spanning tree 的原理。CIM的文章有点看的头痛于是查找了一下,发现一下的中文翻译不错不错。收藏一下
生成树(spanning tree)的理解
1. 冗余网桥连接。
用网桥(或交换机,后代称二层设备)连接两个(这里简化,只讨论
两个。多个等同)网段,可分割碰撞,提高媒介使用率。同时,我们
希望用两个或更多的网桥连接两个网段,以做到当某个网桥发生故障
时,网络连接不致中断,那就用下图的方法:
..|-----------Port 1--Bridge1--Port 2-------------|
A.|Segment1---Port 1--Bridge2--Port 2-------------|B.Segment2
主机A属于Segment1,主机B属于Segment2, 两个Segment之间用两个
网桥Bridge1和Bridge2连接。
2. 冗余网桥带来的问题。
如果Bridge1和Bridge2都工作,那就会出现这样的问题了。
假设所有设备的ARP表都是空的。
1) A向B发数据,发出一个ARP请求。
2) Bridge1的Port1收到了这个ARP请求,一看ARP列表,是空的,
于是记录下A在Segment1,并将该数据包转发到Segment2上。
3) 假设Bridge2稍慢些收到了A的ARP请求,一看ARP列表,也是
空的,于是记录下A在Segment1,并将该数据包转发到Segment2上。
4) 被Bridge1转发到Segment2上的数据包被Bridge2的Port2看到了,
由于数据包上的源MAC是A的,又是在Segment2上被发现的,所以
对照旧的ARP列表(上面写的A在Segment1上),Bridge2认为,
A已经被转移到了Segment2上,于是更新ARP表,标记A在Segment2
上,并将该数据包转发到Port1,也就是Segment1上。
5) 稍晚一些,在第3步被Bridge2转发到Segment2上的数据包被
Bridge1的Port2收到了,它也做了如第4步Bridge2所做的判断,
于是,Bridge1也将A的MAC记录到Segment2上,并将数据包向Port1
的Segment1上转发。
6) 好,数据包到了Segment1,又做相同运动,回到Segment2,
于是两个网桥什么也不做,就只转发这个包,并不断地更新自己的
ARP表,网络瘫痪。
3. 解决方法。
冗余网桥要做到冗余备份,看样子简单的乘二是不行的了。刚才广播
风暴的形成,主要原因是网桥的ARP更新机制,但这是网桥的根本,
是不能改的,所以,我们希望两个网桥中,只有一个是工作的(Active),
而备份的网桥不参与数据包转发(Forwarding),就可以避免循环了。
Spanning Tree的引入
4. Spanning Tree是数学概念,指任意两点有且只有一条路径连接。
就好象树,从根,到干,到枝,到叶,任意两片树叶见只有一条路。
那么在Spanning Tree Protocol中,首先引入了根(Root)这个概念,
和树根一样,它是整个网络拓扑(二层拓扑)的起点。
5. Spanning Tree的构想。
如果把图一中的Bridge2能自动定成热备份,不参与数据包转发,但
有监视Bridge1的工作状况,当Bridge1故障时,能自动代替它的工作,
那就能起到我们最初的目的了。
Spanning Tree的工作原理
7. 网络拓扑如下:
|---B3----|---B1---|---B5---|
|---B4----|---B2---|---B6---|
Seg2----Seg1------Seg3-----Seg4
用B1, B2连接Seg1和Seg3, 用B3, B4连接Seg1和Seg2,
用B5, B6连接Seg3和Seg4. 每个B的左边端口叫Port1,
右边的叫Port2。
8. 设计。
通常,管理员把最强壮的网桥设计为根,并放置在网络
中央,就如B1。次强壮的做为根的备份,与根平行,就
如B2。需要备份的Segment连接,就用两个或更多网桥
连接,那么其中一个将成为Designated Bridge,也就是
工作网桥,而其他的就不转发数据包。
9. 根的选举。
Spanning Tree根的选举,是网络最开始工作是进行的。
通常,管理员将设计的根网桥的Priority升高,使它
很自然地成为根。网桥开始选举根时,每个网桥都开始
广播BPDU(Bridge Protocol Data Unit),上面有网桥
自己的MAC地址和Priority。当网桥收到别的网桥的BPDU,
其优先级高于自己的时,就不再发送自己的信息,而是向
对面(其他端口)转发该信息。这样,在一定时间后,
整个网络就知道谁是跟了。(图中就是B1)。
10. Designated Bridge的选举。
选出根后,根开始发新的BPDU,上面包含着每个端口的Cost。
根的每个端口的Cost都是0,其他网桥的端口Cost都要高与
0。每个网桥收到根发出的BPDU后,就知道根在自己的哪个
方向了。比如,B3知道根在自己的右边,于是,面向根的
端口叫Root Port,BPDU不会向Root Port转发的,只向其他
方向转发。假如B3的Port1 (左边端口)的Cost是20,而
B4的Port1 Cost是30,那B3向Segment2转发的BPDU的cost就
是自己右边Root Port收到的Cost (0)加上自己左边端口
的Cost(20),同时,B4向Segment2转发的Cost是0+30=30。
不比不知道,一比吓一跳,B4的Por1收到B3的Cost信息后,
就将Port1处在Block状态,不再转发数据包。同样,B6的
Cost也比B5高,那么B5将成为Designated Bridge,而B6
处于休息状态。B2就更别说了,Port1和Port2都是Root Port,
所以它把两端口都Block了,并且也知道自己是备份根。
好,一段时间后,网络上就选举出了连接各网段的Designated
Bridge,Spanning Tree生成了。
11. 故障监测与数的更新。
以B6为例,Port2虽然Block了,但一直监测网络状态。根定期
发送BPDU,各Designated Bridge都向非Root Port连接的Segment
转发,以表示自己的工作状态正常。假设B5发生故障,在规定
时间内(好象是两秒),B6的Port2没有收到B5发出的BPDU,它就
认为B5发生故障,并通过Root Port发送数据包(这是唯一从Root
Port发送的网桥信息包。)各网桥收到信息包后,都会从Root
Port转发(假如B6与Root间还存在其他网桥的话),直到发送到
Root。Root收到该信息后,立即发送BPDU,让所以网桥都停止工作,
(因为此时网络拓扑出错),然后再发Cost,让网桥从新计算各
端口的Cost,生成新树。BPDU传到Segment3,B5已坏,不能转发
Cost,B6向Segment4转发Cost=30,没人有意见,于是,B6千年的
媳妇熬成了婆,她是终于翻身做了主人了呀,不容易。网络恢复
正常。同样,如果B2到时间没有听见Root发话,就知道他老人家
休息了,会发BPDU,一声号令,群雄揭竿而起,逐鹿中原,从新
推举Root,重复第9步。
12. 网桥端口的5种状态:
1) Disabled。被管理员禁用。
2) Block。休息,不参与数据包转发。
3) Listening。监听。
4) Learning。学习ARP信息,准备向工作状态转变。
5) Forwarding。正常工作,转发数据包。
13. 整个Spanning Tree的定型时间大越为12秒。
本文链接:https://my.lmcjl.com/post/2387.html
展开阅读全文
4 评论