1. 介绍

RSTP(Rapid Spanning Tree Protocol),快速生成树协议,标准为802.1w(已合入802.1D-2004)
RSTP是对STP技术的修改和补充,最大特点就是快速收敛

2. 概念

2.1 端口属性

RSTP定义了如下端口属性

 - 链路类型, Link Type
- 端口角色, Port Role
- 端口状态, Port State

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

2.2 链路类型

RSTP定义了三种链路类型

 - 点对点(Point-to-Point Link): 交换机间的连接
- 共享(Shared Link):           交换机到hub(集线器)的连接
- 边缘(Edge):                  交换机到终端设备的连接

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

2.3 端口角色

RSTP重新定义了端口角色

 - Root Port:       根端口
- Designated Port: 指定端口
- Alternate Port:  替代端口, 到根网桥的替换路径, 用以替换的根端口, 责任是为其他网桥的链路作备份
- Backup Port:     备份端口, 是指定端口的备份端口, 是为本网桥的端口作备份
- Edge Port:       边缘端口, 指网桥上连接到终端设备的端口, 此类端口可以实现快速迁移

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

   

TIP:
- 备份端口只存在于两种情况下
1. 两端口通过点到点链路相连成一个环路
2. 网桥与共享LAN网段有两条或两条以上的连接(如上方右图所示)

- 边缘端口与PortFast(in STP):
相同点: 都是连接到最终的工作站,当边缘端口禁用或启用时,不会产生拓扑改变
不同点: 当RSTP的边缘端口收到BPDU时,该端口立即失去边缘端口的状态,变成一个正常的生成树端口。

2.4 端口状态

RSTP端口状态定义如下

 - Discarding
- Learning
- Forwarding

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

STP端口状态和RSTP端口状态比较如下所示:

STP (802.1D) Port State RSTP (802.1w) Port State Is Port Included in Active Topology? Is Port Learning MAC Addresses? Is Port Send and Receive data?
Disabled Discarding No No No
Blocking Discarding No No No
Listening Discarding Yes No No
Learning Learning Yes Yes No
Forwarding Forwarding Yes Yes Yes

3. 比较

RSTP继承自STP,两者之间的差别如下

3.1 报文结构

RSTP和STP在报文之间的差别如下

 - [Version] : 0x00 -> 0x02
- [Message Type] : 0x00 -> 0x02
- Use all field in [Flags]
- Add [Version 1 Length] field

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

下面是STP BPDU和RSTP BPDU的抓包比较图

3.2 处理方式

RSTP新的BPDU处理方式如下

3.2.1 间隔发送BPDU

在STP中,只有RB才会定时发送C BPDU,其他网桥将RB的C BPDU进行中继
而在RSTP中,每个hello time(2s)就发送一个自己生成的C BPDU信息

3.2.2 快速的老化信息

STP中,必须等到20s的老化时间到,才能更新BPDU;
在RSTP中,两个网桥则采用keep-alive机制;当一台网桥在连续三次没有收到BPDU的情况下,认为邻居的根和指定根已经丢失,立即老化自己的BPDU配置信息;这种老化机制可以快速的检测故障

3.2.3 对Inferior BPDU处理

STP中指定端口收到下级的BPDU会马上把端口保存的更优的BPDU发送出去,但对非指定端口不会做同样处理
RSTP中不管是否是指定端口,收到inferior BPDU都会马上发送本地更优的BPDU给对端,或接受并覆盖原先的BPDU配置信息

3. 原理

RSTP的快速收敛是通过以下P/A协商机制、根端口快速切换机制和边缘端口机制来实现的

4. 拓扑

RSTP拓扑改变(Topology Change)

在STP中,Topology Change的处理时由两部分来完成
1. 利用TCN/TCA BPDU将拓扑变化上报的根桥
2. 根桥通过将FLAG中的TC比特置位(持续时间Max Age),通知所有其它交换机

在RSTP中,只有当非边缘端口进入转发(Forwarding)状态的时,才能导致拓扑改变;端口改变到其他状态不再引起拓扑改变

检测到拓扑改变后的网桥会做以下动作:
1. 本网桥为所有非边缘指定端口及根端口启动一个计时器TC While Timer(2倍的hello time);这个时间也是通知到全网网桥拓扑变更所需的时间
2. 清空这些端口上的MAC地址
3. 在TC While Timer有效期内,这些端口向外发送TC位置1的BPDU

其他网桥接收到TC置位的RSTP BPDU,做如下处理:
1. 清空除收到TC端口以外的所有端口的MAC地址
2. 在所有的端口和根端口上启动TC While Timer,并发送TC报文。然后在这段时间内,这些端口也向外发送TC。

通过上面的机制,TC快速地泛洪到整个网络中,而无需经过根桥

下图为实例,其中SW-4发生了TC

5. 兼容性

RSTP的端口在连续三次接收到STP BPDU,则端口协议将切换到STP协议,切换到STP协议的RSTP端口将丧失快速收敛特性,出现STP与RSTP混用的情况;故一般建议将STP设备放在网络边缘

参考:
<rstplib分析>
<CCNP生成树经典笔记>

RSTP介绍的更多相关文章

  1. STP RSTP

    一.透明网桥 1.对于一般的透明网桥来说,通常都具有以下的特点: +拓展LAN的能力 +自主动态学习站点的地址信息 当网桥的某个端口上收到含有某个源MAC地址的数据帧时,它就把该MAC地址和接收该数据 ...

  2. Linux STP介绍

    1. 介绍 STP(Spanning Tree Protocol)即生成树协议,标准为IEEE802.1D-1998STP是一种二层冗余技术,利用STA算法构建一个逻辑上没有环路的树形网络拓扑结构,并 ...

  3. STP详解-STP、RSTP、MSTP

    STP详解 01 冗余链路中存在的问题 如图所示LSW1和LSW2之间有两条线路相连,它们之间任何一条链路出现故障另外一条线路可以马上顶替出现故障的那条链路,这样可以很好的解决单链路故障引起的网络中断 ...

  4. CSS3 background-image背景图片相关介绍

    这里将会介绍如何通过background-image设置背景图片,以及背景图片的平铺.拉伸.偏移.设置大小等操作. 1. 背景图片样式分类 CSS中设置元素背景图片及其背景图片样式的属性主要以下几个: ...

  5. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  6. Windows Server 2012 NIC Teaming介绍及注意事项

    Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...

  7. Linux下服务器端开发流程及相关工具介绍(C++)

    去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...

  8. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

  9. HTML DOM 介绍

    本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...

随机推荐

  1. node.js express环境下中文需要注意的地方

    问题一: 最近在nuxt项目中开始着手把一些跨域的请求转移到express里,其实跟其他语言差不多,http对象发请求,接收请求都写得很顺畅.之前用的请求部分大多数是get请求,所以除了注意编码问题之 ...

  2. 1px移动端显示问题

    设计图上的标注要有1px的线条,css本来以为直接写个1px就能万事大吉了,手机上怎么看都很粗. 至于具体为什么会这样,百度看了一圈,有点懵懵懂懂,大概就是物理分辨率高于实际网页的像素分辨率的原因吧. ...

  3. 【工具】Sublime Text 自动保存功能

    经常需要所以要频繁用到"ctrl+s"保存还是挺麻烦的,所以有的人需要用到失去焦点自动保存功能,这里简单记录下 1.点击"Preferences"里的设置-用户 ...

  4. 从源码带你看懂functools的partial方法

    1.what? partial是什么, partial也叫偏函数.源码的描述是: 部分应用给定参数和关键字的新函数. New function with partial application of ...

  5. HDU 6053 ( TrickGCD ) 分块+容斥

    TrickGCD Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  6. C语言中可变参数的使用

    在C语言程序编写中我们使用最多的函数一定包括printf以及很多类似的变形体.这个函数包含在C库函数中,定义为 int printf( const char* format, ...); 除了一个格式 ...

  7. Curl之解决中文乱码

    利用iconv命令 curl http://www.baidu.com | iconv -f gb2312 -t utf-8 iconv命令可以将一种已知的字符集文件转换成另一种已知的字符集文件.它的 ...

  8. 1180: [CROATIAN2009]OTOCI(LCT)

    1180: [CROATIAN2009]OTOCI Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 1200  Solved: 747[Submit][ ...

  9. poj2631 Roads in the North(求树的直径)

    Roads in the North Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2941   Accepted: 144 ...

  10. Android 自定义debug.keystore

    场景分析: 有时候,我们要使用第三方的服务,需要提供自己的包名以及keystore的sha1值,比如微信支付,百度地图,都需要包名和keystore的sha1值作为唯一标识.这时候我们测试的时候,如果 ...