假装网络工程师5——STP二层防环机制详解

[toc]

一、背景介绍

在网络架构设计中,防环是一个很重要的因素,环路的潜在隐患不再赘述,所以无论是三层还是二层都非常注意防环的机制,在三层中无论是ttl值还是ospf这种倒状树结构其目的都是为了避免环路,在二层中防环的机制则为生成树协议(spanning tree protocol),以及优化后的rstp和mstp,本章重点介绍stp生成树协议。

二、STP协议的端口状态

stp协议是通过计算后在实际产生环路的物理链路上逻辑的阻塞一个端口,只有当链路发生变化时被阻塞的端口才有可能从新参与计算并抓发数据,端口的5种状态为:

上述是思科定义的5种状态,从blocking到forwarding每种状态都需要经过15s的时间共计45s,华为的stp在此基础上进行了优化,省去了listening的状态,所以华为的stp协议是4种端口状态,从blocking到forwarding需要经过30s的时间。

三、生成树的计算方法

既然需要选取出一个阻塞端口,自然会通过计算得出,每个广播域中都会选举出一个根桥,stp计算的方法大体分为以下步骤:

  1. 选取根桥。初始阶段每一个交换机都默认自己为根桥,对外发送bpdu信息,通过bpdu选取出一个根桥,根桥选举出来后,同一广播域内的route id都为根桥的route id。
  2. 广播域内其他非根交换机上根据每个端口到达根桥的开销选取根端口。
  3. 每条链路根据端口到根桥的开销选取指定端口,最后非根端口根指定端口的,就是阻塞端口。

补充说明:bpdu信息是从指定端口发出,从根端口接收,所以根桥上所有的端口都是指定端口,而非根桥上接收bpdu消息的端口为根端口,所以每一个链路中根端口对应的一定是指定端口。

四、BPDU优先级选取原则

无论是根桥还是根端口、指定端口都是根据bpdu信息来计算出优先级,而优先级按照先后顺序以下面4个为判断依据:

  1. Rourer ID
  2. Path cost
  3. sender BID(bridge ID),由8字节组成,分为2字节的优先级和6字节的mac地址,先比较优先级
  4. 发送方物理接口,由接口优先级与接口号组成,先比较接口优先级

上述的判断依据,数值越小优先级越高。以下通过几个示例,进行说明。
示例1

(1)选取根桥: 首先根据优先级,判断SW1为根桥,其上的所有端口都为指定端口
(2)选取根端口: 根据path cost判断出sw2的1端口,sw3的2端口sw4的2端口为根端口。其中sw4的根端口判定步骤为:
<1>router id。此时都为sw1的id,继续比较下一项
<2>path cost。sw4的2端口到达根桥需要经过sw2的2端口与sw1的1端口,此时cost值为100+19=119;另一方向,sw4的1端口到达根桥需要经过sw3的1端口与sw1的2端口,此时cost值也为19+100=119,继续比较下一项
<3>Sender BID。sw2与sw3优先级都是8192,但是sw2的mac地址比sw3的小,所以sw4的2端口为根端口
(3)选取指定端口:
此时选取结果如下图,还需要sw3与sw4之间的链路上确定出一个指定端口

选取指定端口也是根据bpdu信息为依据,步骤为:
<1>route id。同一广播域内route id都为sw1,继续比较下一项
<2>path cost。sw3的1端口到根桥开销需要经过sw1的2端口,此时cost值为100;sw4的1端口到根桥开销需要经过sw2的2端口与sw1的1端口,此时cost值为100+19=119,所以sw3的1端口为指定端口
(4)确定阻塞端口: 最后,sw4 的1端口既非根端口也非指定端口,只能成为阻塞端口

五、RSTP介绍

RSTP与STP大致相同,传统的生成树协议端口分为3个角色:rp、dp、ap,和4个状态:丢弃、阻塞、学习、转发。当网络发生变化时,身为ap的端口角色会从新参与计算,计算后以rp或dp的角色再经过学习后转发数据,这个过程就需要花费30s的时间,为了加快生成树的收敛时间,从而诞生了快速生成树协议rstp。
rstp是将原有的3个角色变成了4个角色,引入了bp的角色,而端口的4个状态进一步精简为3个:

此时的ap是为rp做备份,bp是为dp做备份,所以当ap发现无法在接收到rp的bpdu消息时直接将角色变为rp,不再需要计算,同理bp也是如此,加速了网络的收敛。

六、MSTP介绍

RSTP尽管加快了收敛速度,但在负载均衡上仍存在着缺陷,生产环境中也很少使用,因为传统的生成树在设置根桥后会成为所有vlan的根,这样在一个有100个vlan的大型网络架构下,所有的流量都只会走一条链路,另一条链路由于端口被阻塞一直处于待机状态,如下图所示:

上图中C交换机上的A端口在所有vlan下都被阻塞,所以所有流量都只会从左边经过,而右边则一直处于空闲状态,这样右边的链路其实是一种浪费,所以衍生出了MSTP,他是可以创建多个生成树实例,同一交换机在不同实例中可以有不同的优先级,每个实例包含一个或多个vlan,这样上图中的数据流向就可以变成下图的样子

vlan2和vlan3属于不同的实例,这样他们拥有不同的阻塞端口,流量也负载均衡。思科的pstp是为每一个vlan创建一个根桥,而华为的MSTP是创建多个实例,每个实例可以包含一个或多个vlan,相同的实例拥有相同的根桥,华为交换机默认的STP就是MSTP。

七、实验

设置2个不同vlan,将每个vlan加入不同的实例,进行负载均衡,拓扑如下图所示:

1.基础配置

SW3上配置如下:

[SW3]vlan batch 1 12
[SW3]port-group group-member Ethernet 0/0/11 Ethernet 0/0/12
[SW3-port-group]port link-type access
[SW3-port-group]stp edged-port enable
[SW3-port-group]q
[SW3]interface e0/0/11
[SW3-Ethernet0/0/11]port default vlan 11
[SW3-Ethernet0/0/11]int e0/0/12
[SW3-Ethernet0/0/12]port default vlan 12
[SW3]port-group group-member Ethernet 0/0/2 Ethernet 0/0/3
[SW3-port-group]port link-type trunk
[SW3-port-group]port trunk allow-pass vlan 11 12
[SW3-port-group]undo port trunk allow-pass vlan 1  

SW1上配置如下:

[SW1]vlan batch 11 12
[SW1]port-group group-member e0/0/1 e0/0/2
[SW1-port-group]port link-type trunk
[SW1-port-group]port trunk allow-pass vlan 11 12
[SW1-port-group]undo port trunk allow-pass vlan 1
[SW1-port-group]q
[SW1]interface Vlanif 11
[SW1-Vlanif11]ip add 192.168.11.254 24  

SW2上配置如下:

[SW1]vlan batch 11 12
[SW2]port-group group-member e0/0/1 e0/0/3
[SW2-port-group]port link-type trunk
[SW2-port-group]port trunk allow-pass vlan 11 12
[SW2-port-group]undo port trunk allow-pass vlan 1
[SW2-port-group]q
[SW2]interface Vlanif 12
[SW2-Vlanif12]ip add 192.168.12.254 24  

此时PC1和PC2都可以ping通自己的网关,由于交换机的自动防环机制,所以在SW2上能看到,此时e0/0/3端口是阻塞状态

此时PC2发往SW2的数据是先经过SW3再经过SW1最终到达SW2,通过在SW3的e0/0/2口抓包,可以看到该现象

2.创建多实例生成树

将当前配置改为使用MSTP,使用MSTP需要同一广播域内所有交换机同时满足以下条件:

  1. MSTP需要在广播域内所有交换机上进行配置,且所有交换机拥有相同的区域名称

    [SW1]stp region-configuration
    [SW1-mst-region]region-name hw  
  2. 所有使用MSTP交换机的修订版本号需一致
    [SW1-mst-region]revision-level 1  
  3. 所有交换机上相同实例中关联的vlan信息要一致
    [SW1-mst-region]instance 1 vlan 11
    [SW1-mst-region]instance 2 vlan 12  
  4. 激活MSTP
    [SW1-mst-region]active region-configuration
    [SW1-mst-region]q  
  5. 此时再为每一个实例设置根桥
    [SW1]stp instance 1 root primary
    [SW2]stp instance 2 priority 0   #与SW1上配置命令作用相同

    这时,能看到vlan11和vlan12已经属于不同的instance

    而对于instance1来说SW2上的e0/0/3端口是组测端口,而instance2的组测端口为SW3上的e0/0/2

    此时的流量则变为如下图所示:

    红色表示instance1,流量从左边走,橙色代表instance2,流量从右边走,此时再到SW3的e0/0/2口抓包则看不到ICMP报文,验证了instance2的阻塞端口为SW3上的e0/0/2。

原文地址:https://blog.51cto.com/arkling/2450512

时间: 2024-11-06 14:24:02

假装网络工程师5——STP二层防环机制详解的相关文章

假装网络工程师3——ospf的邻居建立条件与虚连接

一.背景说明 ospf作为IGP两大协议之一,有很多值得深挖的地方,仅通过一篇文章远远不够,后续还将通过多章篇幅进行说明. 二.ospf建立邻居的条件 尽管ospf作为一种链路状态协议,每一台路由器是通过lsa报文(其中包含其他路由器直连网段)在本地计算后形成以自己为根的路由表,但出于安全或其他方面的考虑ospf不是会和任意一台路由器建立邻居关系,ospf建立邻居有下面几个前提条件: 1. 直连路由的接口要宣告进同一个区域中(area) 2. 认证类型和认证密码要一致,查看命令 [R1]disp

BGP防环机制

BGP环路防护机制:br/>-IBGP邻居防环机制@IBGP水平分割*从内部邻居学习过来的路由,不会发送给另外一个内部邻居: -所带来的问题: IBGP邻居之间无法正常学习路由. -解决方案: #在所有的 IBGP 邻居之间,互相建立 邻居: *弊端:网络中存在大量的 BGP 邻居关系, 不容易管理,扩展性不强, 消耗过多系统资源,提高管理成本. #BGP联盟/联邦 -大 AS (通过公有AS表示) -小 AS (通过私有AS表示) *每个路由器启用的BGP使用的是小 AS : -内部邻居之间发

LINux网络的NAPI机制详解一

在查看NAPI机制的时候发现一篇介绍NAPI引入初衷的文章写的很好,通俗易懂,就想要分享下,重要的是博主还做了可以在他基础上任意修改,而并不用注明出处的声明,着实令我敬佩,不过还是附上原文链接! http://blog.csdn.net/dog250/article/details/5302853 处理外部事件是cpu必须要做的事,因为cpu和外设的不平等性导致外设的事件被cpu 当作是外部事件,其实它们是平等的,只不过冯氏机器不这么认为罢了,既然要处理外部事件,那么就需要一定的方法,方法不止一

VMWare 网络连接模式(bridged、NAT、host-only)详解

host-only 在某些特殊的网络调试环境中,如何要求将真实环境和虚拟环境隔离开,这时你就可采用host-only模式.在host-only模式中,所有的虚拟系统是可以相互通信的,但虚拟系统和真实的网络是被隔离开的,VMWare虚拟机不能访问互联网. 提示: 在host-only模式下,虚拟系统和宿主机器系统是可以相互通信的,相当于这两台机器通过双绞线互连. 在host-only模式下,虚拟系统的TCP/IP配置信息(如IP地址.网关地址.DNS服务器等),都是由VMnet1(host-onl

网络编程Socket之TCP之close/shutdown详解(续)

接着上一篇网络编程Socket之TCP之close/shutdown详解 现在我们看看对于不同情况的close的返回情况和可能遇到的一些问题: 1.默认操作的close 说明:我们已经知道write操作返回成功只能说明数据已经发送到套接字的发送缓冲区,不能代表对端已经成功收到数据,close的默认返回成功也只是成功发出了一个FIN分节,也不代表对端已经确认 问题1:如果中途网络发生故障,很有可能服务端接收不到这个来自客户端的FIN分节: 问题2:假设服务器忙,那么来自客户端的数据由TCP加入到套

假装网络工程师11——ospf路径选取详解

一.背景介绍 提到路由,就一定会涉及选路,ospf与其他路由协议一样,同样存在选路,除了对比cost(metric)值,ospf协议还会对比表项,并且表项的优先级高于cost值,本文详细说明ospf协议的路径选取原则. 二.实验拓扑 本次实验拓扑如上图所示,R2,R3环回接口模拟外部网络,通过import-route导入,每条路径的cost如标注所示 三.ospf选路详解 1.cost值比较 此时将基础配置按照上图配置好,外部路由直接使用import-route direct导入,未设置接口co

比特币防篡改技术详解

区块链技术在当下的火爆程度不必多说,比特币作为中本聪大神的"亲儿子",自然是研究区块链技术绕不开的话题.比特币是一个完全开放的去中心化的金融系统,时刻暴露在全球黑客攻击之下仍能安全稳定的运行至今(除了在2010年遭到一次大整数溢出漏洞攻击),用事实证明了比特币系统的安全性和稳定性.这其中一整套完整的防篡改破坏的安全体系是其最大的安全报障,下面我们就来逐步揭开比特币防篡改特性的面纱,体会一下比特币设计的奥妙. 非对称加密算法 首先我们先复习一下非对称加密的概念:非对称加密都有一对密钥,分

iOS开发——网络编程Swift篇&amp;(八)SwiftyJSON详解

SwiftyJSON详解 最近看了一些网络请求的例子,发现Swift在解析JSON数据时特别别扭,总是要写一大堆的downcast(as?)和可选(Optional),看?号都看花了.随后发现了这个库SwiftyJSON,问题迎刃而解,灰常优雅和Swifty! 简单介绍下这个库(内容译自SwiftyJSON的README): 为什么典型的在Swift中处理JSON的方法不好? Swift语言是一种严格的类型安全语言,它要求我们显示的设置类型,并帮助我们写出更少bug的代码.但是当处理JSON这种

软考之系统集成项目管理工程师(包含2009-2018历年真题详解+第二版考试辅导教程+官方指定最新版教程)

软考之系统集成项目管理工程师(包含2009-2018历年真题以及答案详解.系统集成项目管理工程师教程第2版-清华大学出版社-高清PDF,官方指定用书),持续更新后续年份的资料.请点赞!!请点赞!!!绝对全部货真价实的资料!!! 全网最全,独此一家,货真价实,部分真题和教程网上没免费的,是我掏钱买的,费心整理,希望各位同学顺利通过考试!!! 下载地址:百度网盘,https://pan.baidu.com/s/15Twr0i9eVbMC9_VbwzWKRQ 原文地址:https://www.cnbl