第3章 交换机工作原理 第1章详细介绍了TCP/IP,按由下往上的顺序协议栈5层分别是: 物理层、链路层、网络层、传输层和应用层。物理层基本上是物理网卡,在实际工作中需要配置的地方不多。 需要配置的网络设备绝大部分位于链路层和网络层,因此下面将重点介绍链路层、网络层相关的协议。 本章介绍链路层相关的内容,包括交换机工作原理、VLAN原理、STP原理、RSTP&MSTP原理等4个部分。 3.1交换机工作原理 工作于链路层的网络设备有Hub、网桥、交换机,其中Hub、网桥目前已基本不用,被交换机所替代。出于学习的目的,这里比较一下Hub和交换机的差异。Hub简单地将各个端口连在一起,如图3.1所示。 图3.1Hub设备工作原理 连在Hub上的设备共享冲突域,同一时间只能有一台设备发送数据,带宽受到很大限制。 与Hub相比,交换机就聪明多了,不同设备互相隔离,避免冲突。如图3.2所示,连在交换机SWA上的4台主机可以同时两两互相通信,主机A和主机B通信,主机C和主机D通信,互不影响。 图3.2交换机工作原理 那么,当主机A的数据发到SWA的时候,SWA怎么知道这个数据应该发给主机B,而不是主机C或者D呢? 如图3.3所示,SWA上有一张数据转发表,里面有MAC地址和接口的对应关系,主机A给SWA发以太网帧的时候,目标MAC地址填的是主机B的MAC地址,SWA根据收到的帧里面的目标MAC地址查表,得知这个以太网帧应该从G0/0/2转发出去,这样就可以正确送达主机B了。 图3.3交换机数据转发机制 那么这个MAC地址表是怎么来的?交换机刚上电的时候这个表是空的,如图3.4所示。 图3.4初始状态的MAC地址表 主机A、主机B、主机C在互相通信前,首先要做的就是获得对方的MAC地址。最开始的时候需要通过ARP协议获得MAC地址,例如主机A要获得主机C的MAC地址时,要先发送ARP请求,然后等待主机C回应该ARP请求。 交换机通过分析ARP报文来更新MAC地址表。注意MAC地址表的更新过程: 首先,交换机根据来自主机A的ARP请求在MAC地址表中添加主机A的信息,如图3.5(a)所示; 然后,交换机将该ARP请求转发给主机B和主机C,如图3.5(b)所示; 最后,交换机根据来自主机C的ARP回应在MAC地址表中添加主机C的信息,如图3.5(c)所示。 交换机获取MAC地址与接口的映射信息之后,就可以指导报文转发。如果主机和交换机的连接断开,例如图3.5(c)中主机C离开SWA,SWA检测到链路断开,会马上更新MAC地址表,删除主机C对应的表项。可以用display macaddress查询交换机MAC地址表的变化,如图3.6所示。 (a) 添加主机A信息 图3.5 (b) 转发ARP请求 (c) 添加主机C信息 图3.5(续) 图3.6MAC地址表查询 SWA已经删除了主机C对应的表项,此时主机A并不知道主机C已经离开,ARP缓存表里还有主机C对应的MAC地址,如果主机A ping主机C,SWA会怎么处理呢? SWA收到主机A发来的报文,根据目标MAC查表时,发现找不到主机C对应的表项,这个情况对于SWA来说是未知单播。交换机对未知单播的处理方法是将其广播给各个端口。这里可以自己做实验验证一下。 还有一种MAC地址是广播MAC,交换机的处理方法也是发给各个端口,这个过程叫作泛洪。 前面介绍MAC地址的时候,还提到一种特殊MAC——组播MAC,组播MAC有一个专门的组播MAC地址表,交换机会根据这个表给对应组播成员精确转发。 另外还有一种特殊情况——丢弃,例如SWA接口Ethernet 0/0/0配置的VLAN是1,但是收到的帧携带的VLAN是2,这个帧就会被丢弃; 或者是帧已经进入交换机,但是不符合转发规则,也会被丢弃。 以上各种转发情况汇总如图3.7所示。 图3.7交换机转发规则 3.2VLAN原理与配置 3.2.1VLAN基本原理 交换机可以让不同的主机互相之间同时通信,但是不能隔离广播。在网络规模比较大的时候,广播报文会耗费很多网络资源,如图3.8所示,每一个广播报文都会发给所有的主机。 图3.8广播报文转发 为了避免全网广播问题,可以用VLAN(Virtual Local Area Network,虚拟局域网)技术将一个物理的局域网在逻辑上划分成多个广播域。这样既能够隔离广播域,又能够提升网络的安全性,如图3.9所示。 图3.9VLAN基本概念 VLAN技术是如何实现的呢?或者说交换机如何知道哪个报文属于VLAN 1,哪个报文属于VLAN 2呢?实际上是通过VLAN标签识别的。如图3.10所示,这是前面介绍过的普通以太网帧。 图3.10普通以太网帧 携带VLAN标签的以太网帧是什么样的呢?如图3.11所示,VLAN标签总共4B,在S.MAC后面,Type前面。 图3.11带VLAN标签的帧 4B的VLAN标签前2B是TPID(Tag Protocol Identifier,标签协议标识),华为设备取固定值0x8100,后面2B分3个部分,具体如下: PRI: Priority,优先级,3比特,可以表示的范围是0~7,用来标识帧的优先级,和IP头部的优先级类似,不同的是这个优先级用来指导交换机,IP头的优先级用来指导路由器。 CFI: Canonical Format Indicator,规范格式指示器,1比特,0表示以太网,1表示令牌环网。通常取值0。 VLAN ID: VLAN Identifier,12比特,可以表示的范围是0~4095,其中0和4095这两个ID保留,不能使用,因此实际应用中, 图3.12添加VLAN标签 可用的VLAN ID范围是1~4094。 这个VLAN标签由交换机来添加,如图3.12所示。主机发出来的以太网帧不携带VLAN Tag,通常也称为Untagged帧,这个帧到达SWA接口后,SWA会添加一个VLAN标签。 交换机根据什么添加VLAN标签呢?如图3.13所示,有多种不同的方式: 图3.13VLAN标签添加的不同方法 第1种: 基于端口,图中SWA端口G0/0/1和G0/0/7收到的报文都打上VLAN5,G0/0/2和G0/0/9收到的报文都打上VLAN10,这是最常用的方式。 第2种: 基于MAC地址,SWA根据收到报文的S.MAC添加VLAN标签,这种方式需要对每个接入SWA的PC都要配置MAC和VLAN的映射关系,管理很不方便,实际中很少用。 第3种: 基于IP网段,SWA收到报文之后需要分析源IP所处的网段,因为要额外分析IP头,消耗交换机资源,实际中很少用。 第4种: 基于协议划分,应用面很窄,实际中很少用。 第5种: 基于策略,也就是将前面的4种进行组合控制,可以精准控制,但是配置复杂,消耗资源多,实际中用得更少。 通常都是基于端口分配VLAN标签,其他几种方式很少用到。 基于端口分配VLAN标签时,用PVID(Port VLAN ID,端口VLAN ID)配置接口的VLAN ID,如图3.14所示。 图3.14配置接口VLAN ID VLAN标签是在交换机接口上处理的,交换机接收主机发过来的报文时会添加VLAN标签,往主机发送报文的时候需要剥离VLAN标签,这是因为主机不能识别带VLAN标签的报文。然而如果对端是交换机,发送报文的时候,又需要带VLAN标签。为了更好地控制VLAN标签的处理,交换机的接口可以工作于不同模式。 如图3.15所示,交换机连接主机的接口通常用Access(接入)模式,两交换机之间的接口通常用Trunk(骨干)模式。 图3.15交换机接口类型 3.2.2Access口工作原理 Access口和Trunk口的工作机制有什么区别呢?首先看Access口的工作机制。如图3.16所示,方框表示交换机,端口PVID=5,主机发往交换机的报文通常是Untagged,有些情况下也可以发Tagged报文。 图3.16Access口工作机制 收方向,指交换机接收主机发来的报文,分3种情况: 第1种: Untagged报文,交换机会添加一个VLAN Tag=5,见方框左边P1报文处理; 第2种: Tag=5的报文,交换机直接放行,不再添加VLAN Tag,见方框左边P2报文处理; 第3种: Tag=10的报文,因为和PVID不一致,直接丢弃,见方框左边P3报文处理。 发方向,指交换机发往主机的报文,分2种情况: 第1种: VLAN与PVID一致,Tag=5,剥离VLAN Tag,还原成Untagged报文,见方框右边P1报文处理; 图3.17Access口工作示例 第2种: VLAN与PVID不一致,例如Tag=10,直接丢弃,见方框右边P2报文处理。 记忆技巧: 与PVID不一致的报文全部丢弃。Access口只允许一种VLAN Tagged报文通过。 Access口举例说明: 如图3.17所示,主机A发Untagged报文到SWA的G0/0/1接口,SWA添加VLAN Tag =10,报文进入交换机之后,携带VLAN Tag=10,然后交换机会从G0/0/3接口转发出去,因为G0/0/3接口的VLAN Tag =10,发出去的报文不带VLAN Tag。报文不会从G0/0/2接口转发出去,因为G0/0/2接口的PVID =2,与报文本身携带的VLAN Tag不一致,根据规则,直接丢弃。 Access口配置如图3.18所示。 图3.18Access口配置 进到接口模式,将接口配置为Access口: port linktype access。 给接口指定PVID: port default vlan 3。 3.2.3Trunk口工作原理 Trunk口的工作机制与Access口最大的不同点就是交换机之间允许多种不同VLAN tagged报文通过,因此相比Access口来说,多了一个allow pass控制列表,用来控制让哪几个VLAN Tag通过,实际配置的命令是port trunk allow vlan 5 10,指定让VLAN Tag 5、10通过。 如图3.19所示,左边上下两个方框表示交换机,上方交换机的接口PVID=5,从它的角度看收发报文的处理情况。 收方向: 指上方交换机接收下方交换机发来的报文,分3种情况: 第1种: 收到Untagged报文,添加VLAN Tag=5,见方框左边P1报文处理。 第2种: 收到在allow pass范围内的VLAN Tag报文,直接通过,见方框左边P2、P3报文。 第3种: 收到带有VLAN Tag报文,但是该VLAN Tag不在allow pass范围内,丢弃,见方框左边P4报文。 发方向: 指上方交换机发报文给下方交换机,分3种情况: 第1种: 报文带的VLAN Tag在allow pass范围内,同时又和PVID相同,剥掉VLAN Tag,发送Untagged报文,见方框右边P1报文处理。 第2种: 报文带的VLAN Tag在allow pass范围内,但是和PVID不一样,直接发走,见方框右边P2报文处理。 第3种: 报文带的VLAN Tag不在allow pass范围内,直接丢弃,见方框右边P3报文的处理。 图3.19Trunk口工作机制 Trunk口处理方式和Access有点类似,不同点就是多了一个allow pass控制列表。 Trunk口举例说明,如图3.20所示,主机A、C属于VLAN 1,主机B、D属于VLAN 20,交换机连接主机的接口都是Access口,SWA与SWB之间的接口是Trunk口,双方配置的VLAN 控制列表都是allow pass vlan 1 20。 图3.20Trunk口工作示例 主机A发送Untagged报文给SWA,SWA添加VLAN 1,这个报文会发往SWB,VLAN 1在SWA的allow pass范围内,同时又和接口的PVID一致,根据Trunk口的规则,会剥掉VLAN标签,变成Untagged报文发往SWB。SWB收到Untagged报文时会添加VLAN Tag=1,VLAN Tag=1在SWB的allow pass范围内,所以会放行并转发给主机C。 主机B发送Untagged报文给SWA,SWA添加VLAN Tag=20。SWA将报文发送给SWB时,因为其VLAN Tag 20在allow pass范围内,而且与接口PVID不一致,所以将其直接发给SWB。SWB收到这个报文时判断VLAN Tag 20在它的allow pass范围内,所以会转发给主机D。 通常Trunk口的PVID都使用默认的VLAN 1,如果要修改Trunk口的PVID,需要确保链路两边接口的PVID一致,如果不一致会导致报文无法被正确转发。可以尝试分析一下,如果SWA右边接口的PVID=1,SWB左边接口的PVID=20,报文是否能正确被转发到目标主机。 Trunk口配置如图3.21所示。 图3.21Trunk口配置命令 3.2.4Hybrid口工作原理 除了Access口和Trunk口外,华为交换机还支持一种混合接口,称之为Hybrid口,如图3.22所示,Hybrid口可以用在交换机和主机之间,还可以用于两个交换机之间。 图3.22Hybrid口应用场景 Hybrid口的工作机制与Trunk口最大的不同点就是Hybrid口有2个控制列表,一个是Tagged VLAN列表,另一个是Untagged VLAN 列表,用来更精准地控制报文。 如图3.23所示,左边上下两个方框表示交换机,上方交换机的接口PVID=5,从它的角度看收发报文的处理情况。 图3.23Hybrid口工作机制 收方向: 指上方交换机接收下方交换机发来的报文,分3种情况: 第1种: 收到Untagged报文,添加VLAN Tag=5,见左边P1报文处理。 第2种: 收到带有VLAN Tag报文,且VLAN Tag在Tagged VLAN 列表里,见左边P2报文处理。 第3种: 收到带有VLAN Tag报文,但该VLAN Tag不在Tagged VLAN 列表里,丢弃,见左边P3、P4报文处理。 发方向: 指上方交换机发报文给下方交换机,分3种情况: 第1种: 报文带的VLAN Tag在Tagged VLAN列表里,透传,见右边P1报文处理。 第2种: 报文带的VLAN Tag在Untagged VLAN列表里,剥掉VLAN Tag发出去,见右边P2报文处理。 第3种: 报文带的VLAN Tag不在Tagged VLAN列表又不在Untagged VLAN列表里,直接丢弃,见右边P3报文的处理。 Hybrid口举例说明,如图3.24所示,交换机所有接口都是Hybrid口,主机A属于VLAN2,主机B属于VLAN3,服务器属于VLAN100,主机A和主机B属于不同部门不能互相通信,但是都可以访问服务器。交换机端口配置如下: SWA端口1配置tagged list vlan 2 3 100,untagged列表随意,不配置也可以; SWA端口2配置untagged list vlan 2 100,tagged列表随意; SWA端口3配置untagged list vlan 3 100,tagged列表随意; SWB端口1配置tagged list vlan 2 3 100,untagged列表随意; SWB端口2配置untagged list vlan 2 3 100,tagged列表随意。 图3.24Hybrid口工作示例 主机A发送Untagged报文给SWA,SWA的2号端口会添加VLAN2,VLAN2在该端口的Untagged列表里,所以继续转发(如果不在列表里,会直接丢弃)。SWA的1号端口会将报文发出去,因为VLAN2在该端口的Tagged列表里,所以发出去的报文带有VLAN2。该报文到达SWB后,因为VLAN2也在SWB的Tagged列表里,所以继续转到SWB的2号端口。因为VLAN2在2号端口的Untagged列表里,所以SWB剥掉VLAN之后将其发给服务器。 反方向: 服务器回一个Untagged报文到达SWB的2号端口时会加上VLAN100,VLAN100在该端口的Untagged到表里,所以继续从1号端口发出去,因为VLAN100在1号端口的Tagged列表里,所以SWB发给SWA的报文带有VLAN100,到达SWA的1号端口时,因为VLAN100在该端口的Tagged列表里,所以继续转发给SWA的2号端口,VLAN100又在SWA的2号端口的Untagged列表里,所以会剥掉VLAN100变成Untagged报文发给主机A。 主机B和服务器的通信过程与主机A相似,可以试着分析一下。相关配置命令如图3.25所示。 图3.25Hybrid口配置命令 华为交换机的接口支持3种模式,分别是Access、Trunk、Hybrid。出厂默认的接口模式是Hybrid,默认的VLAN Tag=1。 初次接触VLAN配置会容易搞混,因为规则太多,最好的解决办法就是多做实验,多练习,也可以自己设计一些场景,然后做实验验证。 3.2.5实验演示 做实验之前先介绍几个小技巧,方便问题定位解决。 图3.26检查当前接口配置 实验小技巧: ① 查看当前接口的配置情况,可以检查当前接口是不是漏配、错配,如图3.26所示; ② 端口模式切换之前,要删除接口下的所有配置,如果不删除,系统会提示错误,删除的时候用undo命令,如图3.27所示; 图3.27删除接口下的配置 ③ 可以用display currentconfiguration查看当前设备的所有配置,如图3.28所示。 图3.28查询当前所有配置 1. Access口基本实验 如图3.29所示,交换机接口的PVID=2,主机的IP地址分别是192.168.1.1/24和192.168.1.2/24。 图3.29Access口实验拓扑 步骤1: 配置主机IP,双击CLIENT1,配置IP地址和子网掩码,如图3.30所示。 图3.30主机的IP配置 CLIENT2的配置与此相似,把IP地址换成192.168.1.2即可。 步骤2: 配置交换机,双击LSW1,配置接口模式和PVID,如图3.31所示。 注: 配置之前要先在系统模式下创建vlan,使用命令vlan 2。如果不创建vlan会导致通信无法建立。 步骤3: 验证实验结果。主机和交换机都配置好后,可以到主机中验证实验是否成功,如图3.32所示。 2. Trunk口实验演示 如图3.33所示,PC1和PC3属于VLAN2,PC2和PC4属于VLAN3。 步骤1: 配置LSW1,配置命令如图3.34所示。 步骤2: 配置LSW2,配置命令如图3.35所示。 图3.31配置交换机接口 图3.32验证配置 图3.33Trunk口实验拓扑 图3.34配置LSW1 图3.35配置LSW2 步骤3: 配置各个PC,配置界面如图3.36所示。PC2、PC3、PC4的配置与此相似,修改相应IP地址就可以了。 步骤4: 验证配置结果,PC1可以ping通 PC3的IP地址,PC2可以ping通PC4的IP地址,如图3.37(a)和图3.37(b)所示。 实验拓展,自己尝试做以下验证,增加对Trunk口转发机制的理解: 图3.36配置PC1 (a) 实验验证——PC1 ping PC3 (b) 实验验证——PC2 ping PC4 图3.37 1. 在LSW1和LSW2之间的链路上启动抓包,PC1 ping PC3,PC2 ping PC4,PC1 ping PC4观察ping报文的vlan携带情况; 2. 将LSW1和LSW2的Trunk口PVID都改成2,再抓包分析; 3. 将LSW1的Trunk口PVID改成2,LSW2的Trunk口PVID改成3,再抓包分析。 3. Hybrid口实验演示 如图3.38所示,PC1属于 VLAN 2,PC2属于VLAN 3,PC3属于VLAN 100,PC1和PC2不能互通,但是都可以访问PC3。 图3.38Hybrid实验拓扑 步骤1: 配置LSW1,如图3.39所示。 图3.39配置LSW1 步骤2: 配置LSW2,如图3.40所示。 步骤3: 配置PC1的IP地址和子网掩码,如图3.41所示,PC2和PC3的配置与此相似。 步骤4: 验证PC1与PC3,PC2与PC3,PC1与PC2的连通性,如图3.42(a)和(b)所示。 附加练习: 下面是一个综合实验,做完之后可以加深对各种模式的理解,如图3.43所示。 图3.40配置LSW2 图3.41配置PC1的IP地址和子网掩码 (a) 实验验证——PC1 ping PC2/PC3 图3.42 (b) 实验验证——PC2 ping PC3 图3.42(续) 图3.43综合实验拓扑 3.2.6小结 本节介绍了VLAN的应用场景,以及VLAN的实现方法,还介绍了华为交换机接口的3种模式,分别是Access、Trunk、Hybrid,最后对各种模式做了实验演示。 本节内容相对比较抽象,需要记忆的规则较多,同时又非常重要,日常工作中经常用到,需要掌握到融会贯通的程度。建议多做实验,可以增加命令熟练度,又可以增加对各种不同模式的理解。 3.3STP原理与配置 为了提高网络可靠性,二层交换网络中通常会使用冗余链路。然而,冗余链路会带来环路问题。STP协议(Spanning Tree Protocol,生成树协议)可以避免网络环路带来的问题,还可以在链路故障的时候自动恢复业务。 3.3.1二层环路带来的问题 如图3.44所示,为了提高链路可靠性,交换机之间都采用备份链路,防止链路故障的时候业务中断。 图3.44二层冗余链路 广播风暴问题: 如图3.45所示,交换机SWA、SWB、SWC形成环路,主机A和主机B通信的时候,首先要通过ARP协议获得对方的MAC地址,ARP协议的目标MAC是广播MAC地址FFFFFFFFFFFF。 图3.45环路广播风暴示意图 主机A发送一个广播报文给SWB,SWB会给0、1端口各发一份,SWA收到之后会给0端口发一份,SWC收到之后会给1、2端口各发一份,然后又回到SWB,此时SWB还会继续转发,给0、2端口各发一份,如此循环不停,顺时针和逆时针方向都会有环路。 广播报文随着时间推移会不断累加,最终设备端口带宽都被占满,设备崩溃。 MAC地址表振荡问题: 如图3.46所示,主机A发送ARP报文给SWB,SWB会分析该报文的源MAC地址,并更新到MAC地址表,添加表项: 0005060708AA 端口G0/0/3。 图3.46MAC地址表振荡示意图 因为这是一个广播报文,经过SWA、SWC之后又回到SWB,此时是从G0/0/2收到的,因此SWB会更新MAC地址表,将原来的删掉,更新为: 0005060708AA 端口G0/0/2。 此时如果有其他主机发送报文给主机A,SWB查表发现主机A在G0/0/2端口下,报文发往此端口将无法正确转发给主机A,导致业务中断。稍后主机A再次发出ARP报文,SWB又重新更新到正确的表项,这样就会导致MAC地址表振荡,业务时通时不通。 因为有广播风暴和MAC地址表振荡问题,二层网络不应该存在环路。破除环路有两种办法,一种是手动拔插,但是业务中断时间较长,另外一种是靠协议自动控制,这个协议就是STP协议。 3.3.2STP基本原理 前面介绍以太网帧结构的时候,介绍了两种帧结构,一种是Ethernet_II帧,这是用来封装实际业务报文的,例如ping报文,另一种是IEEE 802.3帧,这是用来封装二层协议报文的,STP报文就是用这种格式。 如图3.47所示,STP通过BPDU(Bridge Protocol Data Unit,桥协议数据单元)交互信息。 图3.47BPDU交互 STP使用的帧结构,如图3.48所示,里面封装了当前交换机相关的一系列信息,如交换机优先级、MAC地址、接口数量、各接口带宽、接口优先级等。 图3.48STP帧结构 交换机收集这些信息之后就可以计算出应该阻塞哪个端口。如图3.49所示,SWC通过计算得知左边端口应该阻塞,该端口被阻塞之后,网络中不存在环路,从而避免了网络风暴和MAC表振荡问题。 图3.49阻塞端口避免环路 注: 交换机阻塞的是业务报文,STP报文并没有被阻塞,BPDU还是可以在SWB和SWC之间的链路上转发。 3.3.3STP计算过程 阻塞端口是怎么计算出来的呢?主要通过4个步骤,如图3.50所示: 步骤1: 根据各个交换机的优先级选取一个根桥(Root Bridge); 步骤2: 每个非根交换机选取一个根端口(R: Root port),即距离根桥最近的端口; 步骤3: 为每条链路选取一个指定端口(D: Designated port),即距离根桥最近的端口; 步骤4: 非R非D端口就是阻塞端口(A: Alternative Port)。 图3.50阻塞端口计算过程 注: 步骤2是从交换机的角度来看,例如SWB有2个端口,比较哪个端口离根桥最近,步骤3是从链路的角度来看,例如图中下方那条链路,比较左右两个端口哪个距离根桥近。 下面介绍各个步骤的具体实现过程。 步骤1: 选取根桥。 如图3.51所示,根据交换机优先级选取根桥,首先比较交换机优先级,优先级取值范围是0~65535,默认优先级为32768,如果优先级一样,就比较MAC地址,值越小优先级越高。 图3.51根桥选取 图中SWA的优先级是4096,SWB和SWC的优先级都是32768,因此SWA优先级最高,是根桥(Root)。此外,SWB的MAC地址比SWC的值小,因此SWB的优先级又比SWC的高。 步骤2: 非根交换机选取根端口(R端口)。如图3.52所示,共有5台交换机,分别是SWA、SWB、SWC、SWD、SWE,其中SWA是根桥,SWB、SWC、SWD、SWE是非根交换机,这一步就是为非根交换机选取根端口。 图3.52非根交换机选取根端口 根端口指离根桥最近的端口,与根桥距离的远近通过链路开销来计算,每条链路都有开销值,跟链路带宽有关,带宽越大开销越小,例如100Mb/s的接口开销是1,50Mb/s的接口开销是2,10Mb/s的接口开销是10,简单的计算公式: 100Mb/s/接口带宽=开销。 图中LC指的就是链路开销,LC 1指链路开销值为1。 SWB有2个接口,到达根桥SWA的路径分别是: G0/0/1: SWB→SWA,途经1条链路。 G0/0/2: SWB→SWC→SWD→SWA,途经3条链路。 对应的开销分别是: G0/0/1: 1。 G0/0/2: 2+2+1=5。 G0/0/1到达根桥的开销最小,因此G0/0/1就是SWB的根端口。SWD根端口的选取与SWB相似。 SWC有2个接口,到达根桥SWA的路径分别是: G0/0/1: SWC→SWB→SWA,途经2条链路。 G0/0/2: SWC→ SWD→SWA,途经2条链路。 对应的开销分别是: G0/0/1: 2+1=3。 G0/0/2: 2+1=3。 2个端口开销值一样,此时要判断接口对端交换机的优先级,接口G0/0/1对端的交换机是SWB,G0/0/2对方的交换机是SWD。根据前面介绍的规则,SWB的优先级高于SWD,因此G0/0/1是SWC的根端口。 SWE有两个端口,开销值一样都是11,对端是同一台交换机,优先级一样,此时要判断对端接口ID,SWE的G0/0/1对端的接口ID是SWD的G0/0/1,SWE的G0/0/2对端的接口ID是SWD的G0/0/2,值越小越优,因此SWE的根端口是G0/0/1。 步骤3: 为每条链路选取一个指定端口(D端口)。如图3.53所示,3台交换机之间共有4条链路,分别是左上链路L1,右上链路L2,底部链路L3,右下角链路L4。 图3.53选指定端口 根桥的所有端口都是指定端口,因此L1的D端口是SWA的G0/0/1口,L2的D端口是SWA的G0/0/2口。 L3左右两个端口怎么选D端口呢,和根端口类似,也是通过计算距离根桥的开销来确定的,左边端口的开销是2+1=3,右边端口的开销是2+2=4,左边的开销更小,因此L3的左边端口是D端口。 L4链路两端距离根桥的开销一样,交换机优先级一样,此时比较端口优先级,端口3的值小一点,优先级更高,因此SWC的G0/0/3端口是D端口。 步骤4: 非R非D端口就是阻塞端口(A端口)。图3.53中,SWC的G0/0/2和G0/0/4不是R端口,也不是D端口,它就是A端口,因此会被阻塞,阻塞之后,网络中就不存在环路了。 总结一下STP的工作过程如下。 ① 选取根桥(Root): 比较交换机的优先级,如果优先级一样,则比较交换机的MAC地址大小; ② 选取根端口(R端口): 比较交换机各端口到达根桥的cost,如果cost相等则比较对端交换机的优先级,如果对端交换机优先级相等则比较对端端口的优先级(端口也有优先级,默认值是128,一般不做配置,实际上比较的是端口的编号); ③ 选取指定端口(D端口): 首先,根桥的每个端口都是D端口,接着,看其他不与根桥直连的链路,比较其两端到达根桥的cost,如果相等,则比较对端交换机优先级,如果优先级相等则比较对端端口号; ④ 非R非D端口就是A端口。 STP协议中,都是值越小越优,包括交换机的优先级、MAC地址、端口优先级、端口号。 所有这些参数都在STP的BPDU报文中交互,然后交换机通过计算,来确定本交换机各个端口的角色。 举例说明: 如图3.54所示,共有SWA、SWB、SWC、SWD、SWE 5台交换机,各交换机的优先级、MAC地址和各个链路的cost见图中标注。其中SWB和SWD的优先级最高,都是4096,但是SWB的MAC地址比SWD小,因此SWB是根桥Root。 图3.54STP拓扑示例 根端口选取: SWA有3个端口,到达根桥SWB的路径和cost如下。 端口1: SWA→SWB, cost=1,根端口(R); 端口2: SWA→SWC→SWB, cost=15; 端口3: SWA→SWD→SWB, cost=11。 SWC有3个端口,到达根桥SWB的路径和cost如下。 端口1: SWC→SWD→SWA→SWB, cost=7; 端口2: SWC→SWA→SWB, cost=11; 端口3: SWC →SWB, cost=6,根端口(R)。 SWD有3个端口,到达根桥SWB的路径和cost如下。 端口1: SWD→ SWA→SWB, cost=2,根端口(R); 端口2: SWD→ SWB, cost=10; 端口3: SWD→SWC→SWB, cost=11。 SWE有2个端口,到达根桥SWB的cost相同,对端交换机优先级相同,取对端端口号最小的,因此SWE的端口2是根端口(R)。各个交换机的R端口分布如图3.55所示。 图3.55非根交换机的R端口选取 指定端口选取: 根交换机的所有端口都是D端口,因此SWB的1、2、3端口都是D端口; SWASWC之间的链路: 上端cost 为10+1=11,下端cost为10+6=16,因此SWA的端口2是D端口; SWASWD之间的链路: 上端cost 为1+1=2,下端cost为1+10=11,因此SWA的端口3是D端口; SWCSWD之间的链路: 上端cost 为5+1+1=7,下端cost为5+6=11,因此SWD的端口3是D端口; SWDSWE之间的两条链路: 左边接口距离根桥最近,因此D端口都在链路左边。 各链路的D端口分布如图3.56所示。 图3.56各链路指定端口选取 非R非D端口会被阻塞,因此最后的生成树如图3.57所示。 图3.57最终生成树 3.3.4临时环路问题 如图3.58所示,最开始的时候SWA是Root,SWC的左边端口是A端口。后来修改了SWC的优先级,SWC变成了Root,根据规则,SWC左边的端口肯定是D端口,如果A端口马上变为D端口,短时间内网络中还是会有环路存在。 图3.58临时环路 为了避免临时环路存在,A端口切换到D端口的时候,需要经过两个中间状态,每个状态持续15s,共需要30s。30s内,新的A口被选出来,就可以避免临时环路的存在。 交换机端口共有5种状态,分别如下。 ① Disabled: 禁用状态。端口不能处理任何报文,使用命令disable后进入该状态; ② Blocking: 阻塞状态。端口只能接收BPDU,不能发送报文,A端口处于这种状态; ③ Forwarding: 转发状态。端口可以收发任何报文,R端口和D端口处于这种状态; ④ Listening: 侦听状态。端口可以收发BPDU报文,但不能收发业务报文; ⑤ Learning: 学习状态。端口可接收业务报文(更新MAC表),不能发送业务报文。 A端口切换到D端口需要经过如下状态,如图3.59所示。 图3.59A端口到D端口的切换过程 3.3.5故障恢复过程 交换机在根桥选取前,都认为自己是根桥,主动发BPDU给旁边的交换机,各个交换机通过比较优先级选取出根桥之后,只有根桥才周期性发BPDU,如图3.60所示。 图3.60根桥选取前后BPDU发送情况 如果根桥出现故障,网络怎么恢复业务呢?如图3.61所示,SWA是Root,正常工作的时候会周期性发BPDU给各个交换机。如果SWA出现故障,网络中就没有BPDU更新,经过20s后,之前根桥发的BPDU老化删除,SWB和SWC开始互发BPDU,重新选取根桥。 图3.61根桥故障场景 SWC左边的端口是A端口,BPDU老化后,还要经过Listening和Learning这两个状态才能进入正常转发状态,需要时长20+15+15=50s,也就是说根桥失效后,恢复业务需要50s。 如果链路出现故障,如何恢复呢? 如图3.62所示,SWB和SWA之间的链路出现逻辑故障,而非物理故障。 图3.62链路故障恢复 SWB认为SWA失效,因此尝试发送BPDU给SWC,但是SWC能收到SWA发来的BPDU,知道Root还正常工作,因此忽略来自SWB的BPDU,但是SWC左边的A端口一直收不到SWA发的BPDU,因此20s后会开始切换到D端口,A端口切换到D端口还需要经过两个中间状态,因此恢复业务共需要20+15+15=50s。 3.3.6MAC地址表错误问题 如图3.63所示,主机A和主机B的通信走上面的路径,SWB的MAC地址表如图所示。 图3.63示例拓扑 后来SWC的G0/0/1口出现故障,路径改为下面那条链路,但是SWB的MAC表项没有更新,因为交换机的MAC表项是根据ARP报文来更新的,交换机链路故障,但是主机A、主机B本身还有ARP缓存表,并不会再发ARP请求,所以不会更新。 交换机的MAC表老化时间是300s,因此300s内,主机A发往主机B的报文,SWB会从G0/0/1转发出去,最终无法到达主机B。这种情况下,业务恢复时间需要300s。 为了解决这个长时间业务中断问题,STP引入了拓扑更新机制,如图3.64所示,SWC感知到G0/0/1出现故障后,通过一系列动作强制刷新MAC地址表,具体过程如下。 ① SWC往G0/0/2发送TCN(Topology Change Notification,拓扑变更通知); ② SWB收到TCN后,给SWC回TCA,让SWC停止发TCN; ③ SWB给根桥SWA转发TCN; ④ SWA发TC给SWB,通知SWB刷新MAC地址表; ⑤ SWB给SWC转发TC,通知SWC刷新MAC地址表。 图3.64网络拓扑刷新过程 交换机收到从根桥发来的TCN后,将自己的MAC地址表老化时间改成15s(可配置),15s后,MAC地址表被清空,此时如果收到主机A发往主机B的报文时,对SWB来说就是未知单播,根据规则会泛洪到各个端口,SWC也同样泛洪,业务恢复。后续再通过ARP报文更新MAC地址表。 这个MAC更新过程和listening、learning状态同时进行,因此网络最大业务中断时间是50s。 3.3.7STP配置 如图3.65所示,STP主要有以下几个常用配置命令: stp disable: 停止使用STP功能; stp enable: 开始使用STP功能; stp mode: 选择STP模式,共有3个,RSTP和MSTP下一节再介绍,华为交换机默认开启STP,模式是MSTP; stp priority: 配置交换机的优先级; stp pathcoststandard: 指定链路cost的计算标准,同样的带宽,不同标准算出来的cost值不一样,默认采用dot1t标准; stp cost 2000: 对接口强制指定cost值,一般不建议这么配置,可能会产生次优路径。 图3.65STP配置命令和路径cost计算标准 查看实验结果,如图3.66所示,使用display stp查看相关信息,上面方框内是当前交换机信息,下面方框内是当前接口相关信息。 图3.66查看STP相关参数 实验建议: 自己设计各种拓扑,各链路都使用Ethernet 100M口,这样每一条链路的cost都一样,方便计算,如图3.67所示。 图3.67实验拓扑 拓扑搭建好之后,使用display stp查看各个交换机的优先级,然后按照前面介绍的方法计算根桥、根端口、指定端口、阻塞端口,再用命令查询各个接口的模式,验证R端口、D端口、A端口所处的位置是不是和计算的一致。 3.3.8小结 本节介绍了STP的应用场景和工作原理,还介绍了网络发生故障时的恢复过程,以及相关配置。 本节内容是重点也是难点,初学的时候很抽象,特别是以前学过又没有学懂的读者,头脑里很多杂念,学起来更加费劲。建议清空头脑里的杂念,按照课程里面介绍的步骤一步步来学习,再多做实验加以练习。 3.4RSTP与MSTP原理与配置 STP虽然能够解决环路问题,但是收敛速度慢,最长需要50s才能恢复业务,影响了用户通信质量。RSTP(Rapid SpanningTree Protocol,快速生成树协议)在STP基础上进行了改进,实现了网络拓扑快速收敛。 MSTP(Multi SpanningTree Protocol,多生成树协议)在RSTP的基础上进行了扩展,一个网络中同时存在多个生成树,可以优化网络的转发效率。 3.4.1RSTP原理 RSTP可以实现快速收敛,收敛时间缩小到3~5s,如图3.68所示。 图3.68STP与RSTP的差异 RSTP主要是通过以下几个机制实现快速收敛: ① 备份端口; ② 边缘端口; ③ P/A机制。 备份端口: 如图3.69所示,SWC的G0/0/1和G0/0/2同时连接到右边的Hub,相当于一个物理环路。STP中,SWC的G0/0/1是D端口,G0/0/2是A端口,如果G0/0/1发生故障,G0/0/2恢复业务需要50s,但实际上业务可以立刻恢复,因为右边网络不存在临时环路问题。 图3.69备份端口 在这个场景下,RSTP会将G0/0/2置为B端口(Backup,备份端口),如果G0/0/1发生故障,G0/0/2可以马上恢复业务。 边缘端口: 如图3.70所示,SWC的G0/0/1口连接终端,没有必要参与STP计算,可以直接从Disabled变成Forwarding状态,无需再经过Listening和Learning状态。 图3.70边缘端口 但是如果将计算机替换为交换机,在其向SWC的G0/0/1发送RSTP报文之后,该端口会重新变成普通端口,参与RSTP计算。 P/A机制(Proposal/Agreement): 如图3.71所示,刚开始的时候SWA、SWB、SWC的优先级都是默认值32768,其中SWA的MAC地址最小,因此SWA是Root。经过计算,SWC的G0/0/1口是A端口,被阻塞。 图3.71P/A机制工作过程 后来手动修改了SWC的优先级,从32768改成4096,SWC成为新的Root,G0/0/1口成为D端口。RSTP中,SWC通过P/A机制让G0/0/1快速进入转发状态,具体过程如下: ① SWC给SWB发Proposal,咨询SWB,自己是否可以进入转发状态; ② SWB不知道新的A端口在哪里,发送Proposal给SWA,把球踢给SWA; ③ SWA的G0/0/1是新的A端口,可以确定网络不会存在环路,所以回Agreement给SWB; ④ SWB收到SWA的Agreement之后,也发Agreement给SWC; ⑤ SWC的G0/0/1收到Agreement之后,确定新的A端口已经存在,不会有环路,立刻进入转发状态,成为D端口。 这个过程看起来步骤很多,但实际上交换机很短时间内就可以完成。 除了上面3个优化点之外,RSTP与STP还有2个差异点: ① Hello BPDU发送差异; ② 拓扑变化处理差异。 Hello报文发送差异: 如图3.72所示,根桥稳定之后,每个交换机都会发Hello BPDU,STP只有根桥才能发Hello BPDU。 图3.72RSTP的Hello BPDU 拓扑变化差异: 如图3.73所示,SWA是Root,SWC的G0/0/2口最开始是A端口,后来SWC的G0/0/1口发生故障。 图3.73RSTP拓扑变化处理机制 SWA感知到G0/0/1口状态变化后,马上清除G0/0/1口相关的MAC地址表项。SWC为了快速恢复业务,从G0/0/2口发出Proposal,SWB收到这个Proposal后也向SWA发Proposal,同时将Proposal的出接口,也就是SWB的G0/0/1接口相关的MAC地址表项清除,防止业务报文发送到错误的端口。 如果网络中有多台交换机,途经的每台交换机都会将发出Proposal的接口相关的MAC地址表项清除。大家可以自己比较一下STP与RSTP的差异。 关于RSTP与STP的兼容性,当同一个网段里既有工作在STP模式的交换机又有工作在RSTP模式的交换机时,STP交换机会忽略接收到的RSTP BPDU,而RSTP交换机在某端口上接收到STP BPDU时,会在等待两个Hello Time时间之后,把自己的端口切换到STP工作模式,此后便发送STP BPDU,这样就实现了兼容性操作。全网同步成STP之后,收敛速度变慢,一般不这么用。 3.4.2RSTP配置 RSTP配置与STP配置类似,不过多了几个特性,如图3.74所示。 图3.74RSTP配置 SWC的G0/0/3接口配置了边缘端口后,如果收到BPDU会变成普通端口。配置BPDU保护功能后,如果边缘端口收到BPDU报文,该端口将会被立即关闭,并通知网管系统。被关闭的边缘端口只能通过管理员手动恢复,以防止非法接入交换机,影响网络拓扑结构。 3.4.3MSTP工作原理 实际应用中,不同的业务可能会走不同的路径,如图3.75所示,VLAN 2和VLAN 3的业务走不同路径,如果此时通过计算将SWD的G0/0/1口阻塞,那么VLAN 3的业务会受影响。为了解决这个问题,需要使用MSTP(Multi Spanning Tree Protocol,多生成树协议),在一个网络中同时存在多个生成树,可以以VLAN为单位,一个VLAN一个生成树,也可以多个VLAN共享一个生成树。 图3.75MSTP工作原理 3.4.4小结 本节主要介绍了RSTP,另外简要介绍了MSTP的工作背景。RSTP采用了多个快速收敛机制,其中最主要的是P/A机制,大大减少了业务恢复时间,从STP的50s减到3~5s。MSTP支持多个生成树,其收敛时间和RSTP一样,也是3~5s。