二层交换:生成树STP基本概念与实验如果你把两台傻瓜式交换机之间连两根网线,那么这俩交换机就会出现环路从而产生广播风暴。
可能你会觉得好笑,但实际工作中,我却碰到了,一些不懂网络的装修包工头,就会这样做。
===================================================== ===============生成树就是为了让交换网络中防环而出现的。
生成树最原始的版本是802.1d,也就是STP(Spanning Tree Protocol),但这个版本的标准是所有VLAN共用一个生成树,所以也叫CST(Common Spanning Tree)思科在此基础上增强了一下,发布了PVST+(Per Vlan Spanning Tree)802.1d的下一个版本是802.1w,也就是RSTP(Rapid STP),但还是共用生成树,搞不懂IEEE不长点记性。
于是思科又搞了一下,发布了PVRST+IEEE又基于思科的MISTP的方案,发布了802.1s(MSTP),这个就屌爆了,之后再说为何这么屌,凡是大一点的交换网络都用MSTP。
===================================================== ================STP的基础要学习更高级的RSTP/MST,还是需要STP的基础,尽管现在已经很少用到STP。
STP的工作流程1. 在整个交换网段里选择一台做根桥,这根桥就是整棵树的根部,所有其他交换机就选一条到这个根桥的最短路径,其余的路径阻塞掉。
所有交换机中桥优先级最低的成为根桥。
2. 选择所有非根桥交换机的根端口,就是那条最短路径的接口。
如果有超过1条等价路径,则选择对端指定端口优先级最低的本地端口(有点绕口,通过实验来说明)3. 选择各网段的指定端口。
这个网段其实就是指一根链接,其中一头一定是指定端口,另外一头可能是根端口,也可能是非指定端口。
根端口——只出现在非根桥交换机上,就是到达根桥最短路径的那个接口。
如下图,SW1被设置较低的桥优先级成为了根桥,注意,根桥上是没有根端口的。
根端口转发数据帧。
指定端口(和非指定端口)——所有交换机上都可能有,根桥上的所有端口都是指定端口(接终端的那些不算啊),非根桥之间的指定端口通过判断优先级,谁低谁是指定端口,对端是非指定端口或根端口,非指定端口禁止转发数据帧,不过仍会监听BPDU。
如下图,SW1上的接口都是指定端口,SW2/3上离根桥最短路径的端口就是根端口。
而SW2<->SW3之间的链路,记住,一条链接上一定有一头是指定端口,另外一头如果不是根端口,那就一定是非指定端口。
那哪边是指定端口呢?哪边的桥优先级更低,哪边就是指定端口。
而SW3上非指定端口被阻塞了,所以SW2<->SW3之间的链路其实是被阻塞了不能用于转发数据。
===================================================== ================端口的状态上面所说是端口的最终角色但每个端口,在任何时候都会有一个状态,包括在选举时和选举后·Blocking ——选举完成后,非指定端口的状态,禁止转发数据帧,但接收并处理BPDU。
·Listening ——端口最初始的状态,在接收到邻居发过来的BPDU后,判断出哪个端口要参与数据转发,于是通过这个端口发送BPDU,通知邻居网桥自己要参与数据帧的转发。
此状态需时15秒。
·Learning ——端口准备但未转发数据帧,并开始学习收到的帧中的MAC地址。
此状态需时15秒。
·Forwarding ——正式开始转发数据帧,也收发BPDU。
·Disabled ——不参与生成树,也不转发数据帧。
===================================================== ================端口开销默认情况下,·10Gbit/S cost为1·1Gbit/S cost为4·100Mbit/S cost为19·10Mbit/S cost为100这种值是通过一个算法算出来,具体算法不详,所以只能死记了。
每台非根桥的每条路径都是累加的计算。
可以通过手工修改接口的带宽去影响cost值,从而影响选路,但要注意,这种修改方法会影响所有VLAN。
sw3(config)#int f0/7sw3(config-if)#spanning-tree cost 5===================================================== ================桥优先级桥的优先级默认是32768桥ID= 优先级+vlanid(如果是vlan10,那么就是32778)先比优先级,最低的成为根桥,次低的就是备份根桥(备份根桥只是一种说法,实际环境中没有这个角色);如果优先级一样,就比最小的MAC地址,最小的为根桥根桥是抢占式的,所以当有新交换机加入网络,如果MAC比现有的根桥小且根桥使用了默认优先级,那就会立即改变现有的网络,因此最佳的做法是,在现有的网络中,确立根桥谁属,然后将其优先级改低,那么新交换机加入,就不会影响现有架构。
===================================================== ================实验在默认优先级下,SW1由于MAC最小,自然是根桥。
思科交换机默认工作于STP模式查看STP信息sw1#sh spanning-treeVLAN0001Spanning tree enabled protocol ieeeRoot ID Priority 32769Address 000d.bc01.bb00This bridge is the rootHello Time 2 sec Max Age 20 sec Forward Delay 15 secBridge ID Priority 32769 (priority 32768 sys-id-ext 1)Address 000d.bc01.bb00Hello Time 2 sec Max Age 20 sec Forward Delay 15 secAging Time 300Interface Role Sts Cost Prio.Nbr Type---------------- ---- --- --------- -------- --------------------------------Fa0/5 Desg FWD 19 128.5 P2pFa0/8 Desg FWD 19 128.8 P2pFa0/9 Desg FWD 19 128.9 P2pFa0/12 Desg FWD 19 128.12 P2p由于SW3两侧的最短路径相同(都是19+19=38),再来比较两侧的优先级又一样,再比桥ID,发现SW2的更低因此使用接SW2的端口为根端口,将F0/7置为BLK(blocking)sw3#sh spanning-treeVLAN0001Spanning tree enabled protocol ieeeRoot ID Priority 32769Address 000d.bc01.bb00Cost 38Port 6 (FastEthernet0/6)Hello Time 2 sec Max Age 20 sec Forward Delay 15 secBridge ID Priority 32769 (priority 32768 sys-id-ext 1)Address 0015.630d.7080Hello Time 2 sec Max Age 20 sec Forward Delay 15 secAging Time 15Interface Role Sts Cost Prio.Nbr Type---------------- ---- --- --------- -------- --------------------------------Fa0/6 Root FWD 19 128.6 P2pFa0/7 Altn BLK 19 128.7 P2p现在,我们通过修改Cost为5,来达到让SW3使用F0/7做根端口(ROOT PORT)sw3(config-if)#spanning-tree cost ?<1-200000000> port path costsw3(config-if)#spanning-tree cost 5再来检查一下stpsw3(config-if)#do sh spann【CUT】Interface Role Sts Cost Prio.Nbr Type---------------- ---- --- --------- -------- --------------------------------Fa0/6 Altn BLK 19 128.6 P2pFa0/7 Root FWD 5 128.7 P2p---------------------------------------------------------------------------------------------------------------端口优先级端口优先级默认是128.x ,x是端口编号,端口优先级是干什么用的呢?是用来影响邻居选择根端口用的。
SW1-SW4的两条链接,两侧的端口我故意接反,用来验证port优先级SW4的哪个端口是根端口呢?答案是F0/9明明是F0/8比F0/9 更小,为什么反而是9是根端口呢?原因是,在判断根端口时,如果两台交换机之间有多条等价链路,那么本地交换机,会根据对端的端口优先级来确定哪个是根端口。
像我现在这种接法,SW4 f0/8<-> SW F0/9SW4 F0/9 <-> SW1 F0/8对于SW4来说,F0/8收到的BPDU的端口优先级是128.9,而F0/9收到的是128.8,因此F0/9成为根端口。
sw4#sh spann【CUT】---------------- ---- --- --------- -------- --------------------------------Fa0/7 Desg FWD 19 128.7 P2pFa0/8 Altn BLK 19 128.8 P2pFa0/9 Root FWD 19 128.9 P2p修改根端口的优先级为了影响SW4的选择,需要修改SW1上的端口优先级sw1(config)#int f0/9sw1(config-if)#spanning-tree port-priority ?<0-240> port priority in increments of 16 【修改为16的倍数】sw1(config-if)#spanning-tree port-priority 64再来看看SW4的STPsw4#sh spanning-tree【CUT】Fa0/7 Desg FWD 19 128.7 P2p Fa0/8 Root FWD 19 128.8 P2p Fa0/9 Altn BLK 19 128.9 P2p现在F0/8成为了根端口了。