• HCIA STP原理


    一、前言

    STP(生成树协议)是应用在交换机中的一个协议,主要用途是解决交换机环路问题,本篇总结了环路产生原因、STP原理、STP配置。

    二、环路

    网络中环路的危害比较好说,比如广播风暴、MAC地址漂移,反正网络中出现了环路肯定是不好的。而环路出现的原因一般是因为“冗余”,一般的示例如下图,让我不好理解的是LSW14LSW12为什么要连一根线,这样做有什么意义吗?虽然3台交换机用作示例是比较好处理的。

    所以我更喜欢用下面的网络结构,看起来比较实际。

    上图结构的问题很明显,汇聚交换机如果只有一台那是非常危险的,如果出现单台的故障那整个公司的网络都“扑街”,所以汇聚层必然是需要“冗余”一台的,像下图这样。

    这样看不出环路问题,我们只需要稍微挪一下,可以看出4台交换机其实是一个环路。

    要打破环路也很简单,比如我们将其中一根线人为断开,比如把某个端口down掉。

    但这样产生了新的问题,那就是当主用的LSW5故障时,LSW4下面的网络就瘫痪了,这时候需要我们人为的去把LSW15的端口up起来。从发现网络故障到找到人去up端口中间可能过去半个多小时了,这对于一些重要业务来说是不可接受的。所以就需要一个协议或者机制可以自动down掉某个端口来断开链路,在发生单机故障时又能自动恢复链路使网络恢复正常。

    这样的东西已经有啦,那就是STP生成树协议。

    三、STP原理

    1.生成树

    STP为什么要叫生成树协议呢?想象一下,有什么东西既没有环路,各个节点之间又可以互通的。那不就是“树”了嘛,比如下图这样“复杂”的网络结构。

    我们只是在接入层的交换机也做了主备,稍微整理下,会发现出现了至少4个环路,如下图。

    如果要使环路消失,同时每一台交换机又能够互通,我们需要“断开”不必要的链路,比如像下图这样。

    这是不是看起来就像树,LSW1是根,其他的是分支。如果网络继续复杂,我们在汇聚层上面再加一层,也是主备。

    稍微整理下,你会发现结构其实非常熟悉。

    所以要打破网络中的环路,最重要的是找到一个“根”,接着从根出发找到最快到达所有节点的路径,最后将不必要的路径“断开”。为了从功能上实现这一点,STP协议使用了一些概念:

    1)根网桥与非根网桥,根网桥就是作为树根的交换机,非根网桥就是除树根外其他所有的交换机。

    2)根端口,非根网桥上,距离根较近的端口

    3)指定端口,每一条链路上,距离根较近的端口

    4)阻塞端口,如果一个端口不是根端口,也不是指定端口,那他就是阻塞端口。我们将阻塞端口阻塞起来,网络中的环路就消失啦。

    为了依次找到根网桥、根端口、指定端口等,STP协议做了一些约定,并根据约定做各项“选举”,最终得到根和各端口。

    2.根网桥

    根网桥选举依据:

    1)先看优先级

    2)优先级一样看MAC地址

    3)相对较小的是根网桥

    通过dispay stp”命令,可以查看CIST Bridge这个值,其中32768就是优先级,4C1F-CC33-2ADE就是MAC地址,可见所有交换机默认优先级都是一样的32768,那就比较MAC地址较小的,其中LSW4MAC地址相对最小,所以它就是根网桥,其他除LSW4之外的就是非根网桥。CIST Bridge就是桥ID,也即是BID

    3.根端口

    根端口指的是“非根网桥”上,距离根网桥较近的端口,而且每一个非根网桥上有且只有一个根端口,其实也就是在交换机上的所有端口中选一个根端口。选举依据有:

    1)路径开销,就是端口的带宽,带宽越大开销越小,端口总开销的计算是“将根桥到达端口前所有’入’端口开销加起来”,这里只计算入口不计算出口,总开销较小的就是根端口。我们使用的交换机端口默认开销都是200000,这个可以通过display stp查询。

    2)对端BID,如果开销一致,则比较对端的BID(也就是CIST Bridge的值),值较小的就是根端口。

    3)对端PID,如果BID也一样就比较对端的PIDPID指的是Port ID,由端口优先级(默认128+端口号组成。

    4)本端PID,如果对端PID也一样,那就比较本端的PID,较小的就是根端口了。

    下图将所有端口的总COST都标示出来了。

    对于LSW2,两个端口的总COST一样,对端BID明显是靠近根桥的那个更小,所以E0/0/2是根端口。同理LSW3的的E0/0/2是根端口。同理LSW1的根端口是E0/0/2

    为了做下一步的分析,我们假设LSW1两个端口对端的BID一致(这样才能继续分析PID的情况)。可以看到对于LSW1的两个端口,其对端PID是相等的,所以接着可以比本端PID,这个不可能会相等,所以在这个假设情况下E0/0/1会成为根端口,不过这只是假设哈。

    我们实际选举出的根端口应如下图所示。

    4.指定端口

    指定端口,指的是链路上的两个端口中,距离根网桥最近的端口,选举依据有:

    1)路径开销,链路上两个端口中路径开销最小的就是指定端口

    2)交换机BID,路径开销一样时,链路上两个端口所在交换机BID较小的是指定端口

    3)端口PIDBID也一样时,则比较端口的PID,较小的是指定端口

    注意前面选根端口时是在同一个交换机上的不同端口进行选举,而现在是同一个链路上的两个端口间进行选举。像下图标红处,一个链路是由两个端口连接在一起形成的,指定端口要在组成链路的两个端口上进行选举。

    其实一个正常的链路在比较BID时就能得到指定端口了,但为预防有人把同一个交换机的两个端口连起来,所以再加了个PID的比较就万无一失了。

    此外,对于根网桥上的端口,它的端口COST值是200000,但它到根网桥实际开销其实是0,因为他就在根网桥上。根据开销的比较我们可以得到所有指定端口如下图:

    5.阻塞端口

    最后非根、非指定端口就是我们要阻塞的端口了,也就是LSW1上的E 0/0/1这个端口。

    四、STP配置

    通过命令display stp,可以看到交换机默认就启用了MSTP协议,现在我们将其调整为stp协议,并看下执行结果与我们预期的是否一致。

    一共只需要3个命令就完成了STP的启用。

    而后我们用display stp命令看下结果,如下图,根据MAC地址可以知道LSW4确实被选为根网桥。

    接着我们可以看看LSW4的两个端口状态,如下图,Designated port就是指定端口的意思。

    再看下LSW2LSW3,可以看到两个端口的状态都是无误的。

    最后看一下LSW1,一个根端口一个阻塞端口,其中Alternate是备用的意思,所谓阻塞端口也就是备用端口的意思,当其他链路出现故障时,这个端口会被启用作为备用的意思。

    五、回顾

    STP相关的命令不多,而根桥、根端口、指定端口的选举也不复杂,需要注意的是端口总“开销”指的是根桥到该端口所需要“入”的端口开销和。

  • 相关阅读:
    mysql远程登录
    cmd中不能使用中文输入法解决方法
    dedecms sphinx 配置
    Docky需要混合窗口管理器才能工作,请启用混合窗口管理器后重新启动Docky.
    PHPCGI 进程 CPU 100% 与 file_get_contents 函数的关系
    MySQL MyISAM索引类型分析和优化
    ubuntu配置jdk7.0过程
    基于角色的用户权限设计的问题,大家探讨下
    工厂支持多数据库开发的三层结构模式随笔(一)
    分页利器 AspNetPager常用属性
  • 原文地址:https://www.cnblogs.com/cation/p/16797260.html
Copyright © 2020-2023  润新知