思路:园区网为了保证网络的高可用性,一般都会采用冗余与备份。从网络连通性的角度来说,肯定会有冗余链路。但是一旦出现了冗余链路,又会引发一些网络连通性的问题。现在我们来看具体会产生哪些问题,以及这些问题是怎么解决的。
一、桥接环(未知单播帧)
1、概念:未知单播帧在冗余的二层链路上双向循环扩散形成双向环
2、条件:冗余、未知单播帧
3、影响:MAC地址表的抖动,通迅无法正常进行
4、对策:思路--逻辑上阻断冗余的链路
5、实现:STP
二、广播风暴(广播帧)
1、概念:由于二层帧没有TTL值,在有冗余的链路上交换机在收到广播帧的时候会无休止的循环转发下去。当这样的广播帧越来越多的时候,就成了灾难。
2、条件:大量的广播帧,比如:大量主机每五分钟一次的ARP广播。
3、影响:灾难!绝对是灾难!
4、对策:STP生成树。逻辑上阻断冗余的链路,将生命值无限长的泛滥的广播帧扼杀在链路上。
注:交换机处理未知单播帧和广播帧的方式:向除接收口以外的同一VLAN内的所有其他接口和Trunk口转发。
三、多帧复制(明确的单播帧)
1、含义:在冗余的交换链路上对于CAM表里有相应目标MAC的单播帧,目标主机会收到两份
2、影响:不会产生环路,但影响主机和交换机性能,浪费带宽
3、对策:STP
四、基础的单VLAN生成树协议802.1D
1、配置BPDU:正常情况下发送。依版本号决定收发,超过20秒还收不到,则反向发送。
2、TCN拓扑变更BPDU
3、报文结构:
(1)2个字节的协议号(4个0);
(2)1个字节的协议版本号(2个0);
(3)1个字节的BPDU message type。00代表配置BPDU,80代表TCN;
(4)1个字节的Flag:8个bit位,2个16进制的00.中间的6个bit位未使用,首位置1代表拓扑变更确认,置0代表未做确认。末位置1代表是拓扑变更消息,置0代表非拓扑变更消息;
(5)Root ID:8个字节长度,由优先级和MAC地址构成
(6)cost of path:到根路径的开销值,1个字节。从根发出的cost值置0,然后累加。
(7)Bridge ID:由优先级、MAC地址组成。
(8)Port ID:端口优先级+端口编号.优先级为0--240,IOS交换机默认值为128,Catlyst交换机默认为32,以16递增.SW1(config)#spanning-tree vlan 1 port-priority *
(9)Message age:记录BPDU生存了多长时间了
(10)Max age:BPDU最大生存时间或者说是失效时间
(11)Hello time:根桥发送BPDU的时间间隔。范围为1到10秒,默认是2秒
(12)Forward delay:端口转换到转发状态所要的时间
4、802.1D开发的时候还没有VLAN,所以它是一个交换机一棵生成树;而针对单一的生成树,思科有三个fast的扩展优化,IEEE有RSTP快速生成树的优化;
当VLAN出现以后,情况发生了变化,交换机的所有接口不再同属于同一个广播域,而是可能属于不同的VLAN,而针对每个VLAN都可以有一个生成树,这就是PVST,PVST加上思科私有的优化即为PVST+,PVST加上RSTP的优化即为PVRST.另外一种对应关系是多个VLAN对应一棵生成树,这就是MST.但是这些生成树是在自己所在的范围内是怎么实现的?多个VLAN又是如何实现在一棵生成树上转发流量的?这是应当考虑的重点!
5、桥ID
(1)构成:优先级+MAC地址
(2)优先级取值范围为:0~65535,思科默认为32768.当VLAN出现以后,这里2个字节的优先级变为了4个bit的优先级和12个bit的扩展系统ID,扩展系统ID一般为vlan号。由于后12个bit位不再是优先级,故优先级的取值将变为从0开始,以4096的倍数递增
(3)优先级值在选举根桥时的作用:越小越优先。
(4)优先级值的修改:Switch(config)#spanning-tree vlan 1 priority 61440 (最大为61440)
(5)MAC地址位:当优先级相同时比较MAC地址大小,以决定谁是根桥。一个交换机上会有许多烧入硬件的MAC地址,在mac-address-table中以bia为标记(查看:sh int | inc bia),交换机会以这其中最小的一个放入桥ID中的MAC地址字段。
6、交换机角色
(1)根桥:产生发送配置BPDU。可以抢占。
(2)非根桥:接收配置BPDU,修改COST值(接收到BPDU的),修改桥ID字段为自己的桥ID,修改端口号为要转发的端口,然后转发。(或者说非根桥只有在接收到根桥发过来的BPDU时才发送自己的BPDU)
7、STP竞选步骤
(1)选根桥
(2)选根端口
(3)选指定端口
(4)block端口
8、STP竞选原则
(1)一个网络只能有一个根桥
(2)非根桥上只能有一个根端口
(3)一个网段只能有一个指定端口
(4)非指定端口是block的
9、交换机角色竞选
(1)第一步:所有的交换机都假设自己为根,并发送BPDU,根桥字段为自己的桥优先级和自己的基MAC;
(2)第二步:收到BPDU的交换机比较对方和自己的桥ID,选举出根;
(3)第三步:选举出根桥后,非根桥不再产生配置BPDU。
10、修改交换机角色
说明:影响交换机角色的因素首先是桥优先级然后是MAC地址,交换机基MAC地址无法改变,优先级的改法有以下这些:
SW3(config)#spanning-tree vlan 1 root primary 实质上是将该交换机的桥优先级从32768改为了8192,secondery为16384
SW3(config)#spanning-tree vlan 1 priority 0 最高优先级
又变态了一把:将两台交换机都设成root primary,呵呵,结果后设的一台的优先级不再是8192而是8191了,这是怎么回事?(明白了:root primary就是将本交换机的优先级调整得低于现有根的优先级进而夺取根角色。如果原有根的优先级是默认的,那么它会将本交换机的优先级设为8192,如果原有根的优先级不是默认的,那它也会将本交换机的优先级调整为低于现有根交换机优先级的一个值。)
接着变态,一个设优先级为0,再设另一个为root primary,呵呵,不行:
% Unable to make this switch the root of VLAN1 spanning tree
because root cc00.0308.0000 has priority 0
再变态一把,两个都设为0,优先级一样了,这下比MAC。明白了,如果非要自己指定哪台交换机为根,还得加上root guard.
可为什么要改它呢?嗯,一为控制,二为对不同的VLAN指定不同的根以实现负载均衡,充分利用设备资源。
11、端口角色
(1)DP:指定端口.Forwording状态
(2)RP:根端口.Forwording状态。
(3)NDP:非指定端口.block状态。
12、端口角色的竞选
(1)决策标准:
最低的到达根网桥的路径开销-----根链路开销加上本地链路开销(接收到的加上自己算出来的)
最低的sender 优先级---------有可能一样
最低的sender MAC地址--------当这台交换机和下游交换机之间有多条链路时也会一样
最低的端口优先级----------发送方端口优先级
最低的端口编号-----------发送方端口编号
(2)根桥上的端口:都是指定端口.因为这些端口到达根桥的开销都是0。
(3)根端口的竞选:开销--Sender BID--发送方端口ID。
在有多个接口多条路径到达根桥的情况下,离根桥最近路径开销最小的接口为根端口.链路带宽越高,开销越小.
如果接口路径开销一样,则以接收到数据包Sender BID最小的那个接口优先成为根端口.
如果这多条链路都是连接至同一台上游交换机,那么路径开销和sender ID都会一样.这时则比较端口ID.注意这里的端口ID不是本地端口ID,而是发送方端口ID.由于端口ID优先级默认的值都相同,所以事实上比的就是发送方端口的编号.越小越优先.
(4)指定端口的竞选:与根端口的竞选原则一样,也是先比较开销,再比较发送方bridge ID,最后比较发送方端口ID。
(5)非根口且非指定端口的端口全部被block掉。
13、修改端口角色
首先得弄明白了,根桥上的端口角色肯定是改不了的啦,都是指定端口(废话)。非根桥上的端口角色怎么改呢?影响端口角色竞选的因素有三,一为cost,二为sender ID,三为port ID.改哪里的呢?改链路带宽和直接改cost在这条链路的上下接口都可以,因为比较用到的COST值是根路径开销加上本地链路开销。Sender ID一般不改,否则会影响交换机的角色发生变化,进而影响整个生成树。port ID也只能在上游交换机上改以影响下游交换机端口角色.而且编号是改不了的啦,所以只能改端口优先级。
(1)修改cost值:方法一:直接修改SW1(config-if)#spanning-tree vlan 1 cost 2 10M链路cost值为100,100M为10,1G是4,10G是2.可以针对多个甚至所有VLAN,也可以针对具体某一个VLAN 。
方法二:改链路带宽:SW1(config-if)#bandwidth 1000。
(2)修改端口优先级:SW1(config-if)#spanning-tree vlan 1 port-priority 4 可以针对多个甚至所有VLAN,也可以针对具体某一个VLAN 。
14、端口状态
(1)Disable:shutdown状态,不具备生成树能力;
(2)Blocking:阻塞状态,max-age为20秒.这种状态下不转发任何流量,但能接收BPDU协议数据报文。max-age为20秒,一个转发状态的口在这个时间内没有接收到任何BPDU,那么就会认为这个口有问题了,然后block状态下的接口开始切换状态为listening......直到变为转发状态,也就是说处于这种状态的接口在20秒的时间过后可能会发生状态的改变;
(3)Listening:forward delay为15秒。不转发数据流量。15秒的时间用于学习BPDU;
(4)Leaning:forward delay为15秒。不转发用户数据流量。15秒的时间用于构造MAC地址表.其实这个时间完全可以不要,之所以存在的原因是为了减少未知单播帧的泛洪;
(5)Forwording:在802.1D生成树下,一个备份口从blocking状态到forwarding状态总共需要30秒。
一个接口从开启到转发的过程:
首先是Block状态,在决定出该接口是根端口或指定端口时进入listening状态,然后....所以到转发用户数据的总时间会是50秒。
15、拓扑变更
(1)过程:
发现拓扑变更的交换机向根端口持续的发送TCN消息;
指定交换机向根口传播这个TCN BPDU,同时向发起交换机发送一个TCA响应示意已经收到;
根桥收到TCN,更改配置BPDU的计时器为50秒以防止链路翻转,然后发送这个TC配置BPDU;
接收到TC配置BPDU的交换机将MAC地址表的老化时间降为转发延迟计时器的数值直到不收到TC配置BPDU时为止;
(2)好处:防止链路翻转
(3)问题:收敛慢导致交换机在一段时间内不能进行数据的转发。