2021-07-21

生成树的含义:

生成树:在一个二层交换网络中,逻辑地阻塞部分接口,使根到所有节点存在唯一最短路径;当最短路径故障时,自动疏通部分接口以保障网络通畅并实现链路备份

生成树在生成的过程中,应该尽量生成一棵星型结构,且最短路径树

生成树产生的原因:

众所周知,企业在设计网络拓扑的时候一般存在四种冗余(也就是备份),分别是线路冗余,设备冗余,网关冗余和电源冗余。

其中,线路冗余在三层架构中一般会存在环路问题,为了避免这个现象产生,就有了生成树这个概念。

在二层网络环境中,出现环路的问题也是比较严重的:

广播风暴;

MAC地址表翻滚;

同一数据帧重复拷贝;

生成树的功能:

生成树协议:在一个二层交换网络中,逻辑地阻塞部分接口;当最短路径发生故障的时候,会自动地打开部分接口,以实现链路备份。

在线路冗余的过程中,难免会出现环路的现象,生成树的存在,会阻塞部分远离根网桥的接口来将原本可怕的环路变成普通的星型结构。这样一来,既能使链路实现冗余备份,也可以避免环路的出现

生成树的工作原理

生成树在工作时存在1种帧、4种角色和5种接口状态

四种角色:根网桥、根端口、指定端口、非指定端口

生成树的报头:桥协议数据单元(BPDU);

五种状态:DOWN、侦听、学习、转发、阻塞

首先来谈BPDU,作为生成树唯一类型的报头,BPDU承载了所有交换机需要的东西,可谓是“既要当爹又要当妈”

BPDU只有根网桥可以发送,在最开始阶段,所有交换机都定义本地是根网桥,进行BPDU的发送,使得网络中所有交换机均收到来自其他设备发送的BPDU,之后基于参数进行对比,选举出根网桥;选举结束后所有非根网桥不再进行发送,只有根网桥周期性地发送。周期为2秒。

TCN——拓扑变更信息,也是BPDU,用于在拓扑结构发生变化或者本地交换机发生故障的时候,为了快速通知其他路由器以更新MAC表,向其发送TCN。邻居交换机收到TCN包后,将ACK位标记为回复,用于可靠消息的传输,再将TCN逐级转发给根网桥,并等待根网桥的通知,所有交换机MAC表的老化时间改为15s

四种角色:

根网桥:在一棵生成树实例中,有切仅有一个根网桥,用于BPDU的发送,指挥和管理其余交换机,它是整棵树的根,二层网络的核心部分
 
根网络的选举:首先比较交换机的BID优先级,小者优先,默认都是32768,可修改;
 
若优先级相同,比较其MAC地址,小者优先
 
 
 
根端口:在每一个非根网桥中,有且仅有一个根端口,离根网桥最近的接口,用于接收根网桥的BPDU和转发TCN
 
选举规则:首先比较流量进入接口时的最小cost值;
 
其次比较对端的BID,小者优先;
 
若对端BID也相同,比较对端接口的PID,小者优先;
 
PID由接口优先级和接口编号组成,先比较接口优先级,小者优先
 
 
 
指定端口:在生成树中的每一条物理链路中存在一个指定端口,用于转发根网桥的BPDU和转发终端设备的数据帧,根网桥的每一个端口都是根端口,根端口的对端一定是指定端口
 
指定端口的选举:首先比较向根端口转发时出接口的最短cost值,小者优先;
 
其次比较两个接口所在交换机的BID,小者优先;
 
若本地BID相同,比较接口的PID(前面已介绍);
 
若PID也相同,直接阻塞该端口。
 
 
 
非指定端口:在选举完以上角色之后,剩余的端口均为非指定端口,并将其逻辑阻塞(该接口只能接收不能转发数据)

5种生成树的比较:

名称公开性特点优缺点
802.1D公开

世界上第一种生成树,后续的

生成树都是在其基础上改进

收敛速度很慢;

链路利用率很低

PVSTCISCO私有

在802.1D的基础上升级,基于

VLAN分成不同的树

仅支持trunk干到为ISL

收敛速度依然很慢;

生成树过多,对交换机负担较大

PVST+公开

在PVST的基础上,支持802.1q

trunk封装;对接入层和骨干加

速,省去20s的holdtime

收敛速度慢;

生成树多;

RSTP公开

公有的为802.1w,在原来的

PVST+上进一步改进,取消计时器,分段式同步,将端口加速

收敛速度快;

整个交换网络一棵树,链路利用率低

MSTP公开华为现在使用的生成树,也叫802.1s,继承了快速生成树的基础,将多个vlan放在一个组内

收敛速度快;

链路利用率高;

生成树的配置(华为):

分组
[sw1]stp enable 
[sw1]stp region-configuration 
[sw1-mst-region]region-name a    所有设备应在一个域内
[sw1-mst-region]instance 1 vlan 1 to 5
[sw1-mst-region]instance 2 vlan 6 to 10
[sw1-mst-region]active region-configuration     激活当前配置(必须配置该指令)
 
 
stp instance 1 root primary      优先级修改为0
stp instance 2 root secondary    优先级修改为4096
 
 
[sw1]stp instance  1  priority ?
  INTEGER<0-61440>  Bridge priority, in steps of 4096
 
[sw1]interface GigabitEthernet 0/0/1
[sw1-GigabitEthernet0/0/1]stp instance 1 cost ?
  INTEGER<1-200000000>  Port path cost
 
[sw1-GigabitEthernet0/0/1]stp instance 1 port priority ?
  INTEGER<0-240>  Port priority, in steps of 16
 
 
注意:若将创建某个组,但该组内的vlan,在本交换机上没有创建,同时没有为该vlan服务的接口;该组将没有任何信息;整个交换网络中所有设备的分组信息必须完全一致;
定义本地为组1 的主根,组2 的备份根

在 Perl 中,使用 `==` 运算符比较字符串时,Perl 会尝试将字符串隐式转换为数字进行数值比较。这种行为可能导致不符合预期的结果,因为日期时间字符串通常无法直接转换为有意义的数值。 对于以下两段代码的行为差异: 1. `'2021-07-21 00:00:00' == '2025-08-13 00:00:00'` 输出 `test` 2. `'2025-07-21 00:00:00' == '2025-08-13 00:00:00'` 不输出 `test` ### 原因分析 #### 数值转换规则 当 Perl 遇到非纯数字的字符串并试图将其转换为数值时,它会从左到右解析字符,直到遇到第一个无法识别为数字的部分为止。例如: - `'2021-07-21 00:00:00'` 被转换为 `2021`(忽略后面的 `-07-21...`) - `'2025-08-13 00:00:00'` 同样被转换为 `2025` 因此,表达式 `'2021-07-21 00:00:00' == '2025-08-13 00:00:00'` 实际上等价于 `2021 == 2025`,结果为假(不输出 `test`)。 然而,如果某些情况下两个字符串都被转换成相同的数值,则可能会出现意外的“相等”判断。例如: - 如果两个字符串都以相同的前缀开始,并且后续字符导致相同的数值截断,则可能误判为真。 #### 具体案例解释 - `'2021-07-21 00:00:00' == '2025-08-13 00:00:00'` 的比较实际上是在比较 `2021` 和 `2025`,结果为假。 - `'2025-07-21 00:00:00' == '2025-08-13 00:00:00'` 的比较实际上是在比较 `2025` 和 `2025`,结果为真,因此输出 `test` [^1]。 ### 正确的字符串比较方式 为了正确比较日期字符串,应使用 `eq` 运算符进行字符串比较,而不是 `==`。例如: ```perl if ('2021-07-21 00:00:00' eq '2025-08-13 00:00:00') { print "test\n"; } ``` 这样可以确保比较是基于完整的字符串内容,而不是数值转换后的部分数据 [^1]。 ### 示例代码 ```perl # 错误的比较方式(使用数值比较) if ('2025-07-21 00:00:00' == '2025-08-13 00:00:00') { print "test\n"; # 输出 test } # 正确的比较方式(使用字符串比较) if ('2025-07-21 00:00:00' eq '2025-08-13 00:00:00') { print "test\n"; # 不输出 } ``` ### 总结 - 使用 `==` 会导致 Perl 将字符串转换为数值进行比较,这可能会产生错误的结果。 - 使用 `eq` 可以确保字符串按字面意义进行比较,避免因数值转换而导致的误判。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值