生成树协议

Posted tmjblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成树协议相关的知识,希望对你有一定的参考价值。

以太网交换网络中为了提高可靠性,通常会使用冗余链路,但这也带来了网络环路,广播风暴及MAC地址表震荡等问题,于是便诞生了STP(生成树协议),RSTP(快速生成树协议)和MSTP(多生成树协议)。

生成树的主要目的就是通过拓朴计算实现:

  1. 消除环路:通过阻塞冗余链路消除网络中的可能存在的环路。
  2. 链路备份:当前活动的路径发生故障时,激活冗余备份链路,恢复网络连通性。

13.1 BPDU

BPDU被封装在以太网数据帧中,组播MAC地址是01-80-C2-00-00-00,分为两种:

  • 配置BPDU

    用来进行生成树计算和维护生成树拓扑的报文,通常所说的BPDU报文就是指配置BPDU

    • 只要端口使能STP,则配置BPDU就会按照Hello time的时间从指定端口发出
    • 当根端口收到配置BPDU时,发现优先级比自己的大时,则会根据BPDU更新自己STP端口配置并从指定接口向下游发送,否则会丢弃该配置。
    • 当指定端口收到比自己差的BPDU时,会立刻向下游设备发送自己的BPDU。
  • BPDU报文格式:

技术图片

  • 其中核心内容是:
    • Root Identifier:当前根桥的BID。
    • Root Path Cost:根路径开销。路径开销(Path Cost)是一个端口变量,是STP协议用于选择链路的参考值。STP协议通过计算路径开销,选择较为“强壮”的链路,阻塞多余的链路,将网络修剪成无环路的树形网络结构。根路径开销就是某端口到根桥所经过的各个桥上的各端口路径开销的累加值。
    • Bridge Identifier:本交换设备的BID。
    • Port Identifier:发送该BPDU的端口ID。PID由两部分构成的,高4位是端口优先级,低12位是端口号,优先级默认为128。

一般用{ 根桥ID,根路径开销,发送设备BID,发送端口PID }形式表示消息优先级,只有当发送者的BID或端口的PID两个字段至少有一个和本桥接收端口不同时,BPDU才会被处理,否则丢弃。

  • TCN BPDU

TCN BPDU是指在下游拓扑发生变化时向上游发送变化通知,直到根节点。

在以下两种情况下会发生:

  • 端口状态为Forwarding状态
  • 指定端口收到TCN BPDU,复制TCN BPDU发往根桥

13.2 STP

在生成树协议中,一台设备被称为一个网桥,或简称桥,每个桥都有一个BID(桥ID),由桥优先级(高16位)与桥MAC(低48位)构成,优先级默认32768。

13.2.1 角色

  • 根桥:优先级最高的桥会被选为根桥

    选举方式:

    1. 所有交换机启动时都认为自己是根桥,所有端口都为指定端口
    2. 先比较BID(数值越小越优先)
    3. 如果相同则会比较MAC地址,越小越优先
  • 根端口:去根桥路径开销最小的端口,每个非根桥都要选举根端口,根桥上没有根端口

    选举方式:

    1. 比较开销值,选开销值最小的
    2. 如果两个或两个以上端口连接到同一台交换机,则选择发送者PID最小的端口。
    3. 如果两个或两个以上端口通过Hub连接到同一台交换机的同一个接口上,还是选择PID最小的端口作为根端口。
  • 指定桥

    • 对于一台设备而言,与本机直接相连并且负责向本机转发配置消息的设备
    • 对于一个局域网而言,负责向本网段转发配置消息的设备
  • 指定端口

    每个网段都应该有一个指定端口,根桥的所有端口都是指定端口。

    • 对于一台设备而言,指定桥向本机转发配置消息的端口
    • 对于一个局域网而言,指定桥向本网段转发配置消息的端口

    选举方式:

    1. 比较累计路径开销,最小的为指定端口
    2. 如果以上条件相同,比较BID,最小的为指定端口
    3. 如果以上条件相同,比较PID,最小的为指定端口
    • 累计开销值
  • 预备端口:未被选举为根端口或指定端口的端口,将被阻塞

  1. 选举一个根桥
  2. 每个非根交换机选举一个根端口
  3. 每个网段选举一个指定端口
  4. 阻塞预备端口(非根、非指定端口
  5. 收敛完成后,根桥每隔一个hello time发送BPDU,非根桥进行中继。

13.2.2 端口状态

端口状态 说明
Disabled 端口状态为Down,不处理BPDU报文,也不转发用户流量。
Listening 过渡状态,开始生成树计算,端口可以接收和发送BPDU,但不转发用户流量。
Learning 过渡状态,建立无环的MAC地址转发表,不转发用户流量,防止环路。
Forwarding 端口可以接收和发送BPDU,也转发用户流量。只有根端口或指定端口才能进入Forwarding状态。
Blocking 端口仅仅接收并处理BPDU,不转发用户流量

状态迁移图:

技术图片

  1. 端口Up或使能了STP,会从Disabled状态进入到Blocking状态。
  2. 端口被选举为根端口或指定端口,会进入Listening状态。
  3. 端口的Forward Delay定时器超时,会进入Learning/Forwarding状态。
  4. 端口不再是根端口或指定端口时,会进入Blocking状态。
  5. 端口Down或者去使能STP时,就进入Disabled状态。

13.2.3 定时器

  • Hello Time

    发送BPDU的时间间隔,默认为2秒,当拓扑稳定后,只有在根桥上修改才有效。TCN BPDU的发送不受此定时器管理。

  • Forward Delay Time

    设备状态迁移的状态时间。Forward Delay Timer指一个端口处于Listening和Learning状态的各自持续时间,默认是15秒。即Listening状态持续15秒,随后Learning状态再持续15秒。

    链路故障会引发网络重新进行生成树的计算,导致结构变化。新选出的根端口和指定端口立刻开始数据转发的话,可能会造成临时环路,于是有了状态转移机制,需要经过两倍的Forward Delay Time,才能生效。

  • Max Age

    端口的BPDU报文老化时间,可在根桥上修改,默认是20秒。

13.2.4 常见问题

  • 根桥故障

    发现故障后,首先等到Max Age超时,已收到的BPDU作废,非根交换机开始选举根桥,经过两个Forward Delay Time之后恢复转发。缺省情况下至少需要50秒。

  • 直连链路故障

    交换机之间有两台链路互联,一条主用,一条备用,如果主用链路故障,需要两倍的Forward Delay Time恢复到转发状态。

  • 非直连链路故障

    交换机之间产生了非物理层故障,缺省情况下也是至少需要50秒

  • 拓扑改变导致MAC地址表错误

    交换网络中交换机依赖MAC地址表转发数据帧,缺省情况下老化时间为300S,如果拓扑发生变化,MAC地址表中未及时老化的表项会导致数据转发错误。

  • 拓扑改变导致MAC地址表变化

    当网络拓扑发生变化时,交换机会从自己的指定端口向外发送TCN BPDU报文,接收到TCN BPDU报文的交换机向发送者回复TCA报文,根交换机接收到TCN BPDU报文向网络中发送TC BPDU,收到TC BPDU的交换机将MAC地址表老化时间设为15s。

13.3 RSTP

STP的劣势:

  • STP收敛速度过慢

  • STP没有细致区分端口角色和端口状态,对于用户而言,Listening、Learning和Blocking状态都不转发用户流量,没有区别。从使用和配置的角度而言,端口最本质的区别还是在于端口的角色。

  • STP只有根桥发送BPDU

RSTP做出以下改变:

  1. 如果一个端口在超时时间(超时时间=Hello Time × 3 × Timer Factor)内没有收到上游设备发送过来的配置BPDU,那么该设备认为与此邻居之间的协商失败。而不像STP那样需要先等待一个Max Age。

  2. 新增两种端口角色,删除3种端口状态

  3. 拓扑稳定后,非根桥设备也会按照hello time时间发送BPDU

  4. 不使用定时器

  5. 引入快速收敛机制,包括Proposal/Agreement机制、根端口快速切换机制、边缘端口

  6. 引入多种保护功能,包括BPDU保护、根保护、环路保护、防TC-BPDU攻击。

13.3.1 端口角色

RSTP的端口角色共有4种:根端口、指定端口、Alternate端口(预备端口)和Backup端口(备份端口)。

分类 Alternate端口 Backup端口
从配置BPDU报文发送角度来看 由于学习到其它网桥发送的配置BPDU报文而阻塞的端口 由于学习到自己发送的配置BPDU报文而阻塞的端口
从用户流量角度来看 提供了从指定桥到根的另一条可切换路径,作为根端口的备份端口 提供了另一条从根桥到相应网段的备份通路,作为指定端口的备份

13.3.2 端口状态

缩减为3种:

  • Discarding:端口既不转发用户流量也不学习MAC地址;
  • Learning:端口不转发用户流量但是学习MAC地址;
  • Forwarding:端口既转发用户流量又学习MAC地址。

13.3.3 快速收敛机制

  • P/A机制

    STP的收敛时间较长主要是因为确认端口状态。

    Proposal/Agreement机制,其目的是使一个指定端口尽快进入Forwarding状态。
    技术图片

    只需请求和回复,一般都是秒级。

  • 根端口快速切换机制

    RP一旦出现状况,AP在保证无环的情况下立刻切换成RP,进入Forwarding状态

  • 次等报文处理机制

    RSTP处理次等报文BPDU报文不再依赖定时器,会立即发送本地最优的BPDU给对端。

  • 边缘端口

    在RSTP里,交换机连接终端的接口可设置为边缘接口。此种接口可从disable状态立即转到forwarding状态,但是如果收到BPDU就会丧失边缘接口属性,成为普通STP端口,参于到生成树计算,引起网络震荡。

13.3.4 保护功能

  • BPDU保护

    在RSTP网络中,边缘接口在正常情况下是不会收到BPDU,启用保护之后,如果有人伪造RST BPDU恶意攻击交换机,边缘端口将被Error-Down,但属性不便,同时会通知网管系统,并且在交换机上留下日志信息。

  • 根保护

    由于错误配置或恶意攻击,网路中的合法根桥可能会收到优先级更高的BPDU报文,使合法根失去根地位,导致网络拓扑错误变动,所以可以对根的指定接口配置根保护。一旦启用,收到优先级更高的报文后端口会进入discarding状态,不再转发报文,经过两个Forward Delay时间后,如果端口一直再没有收到优先级更高的BPDU,端口会自动回复到正常的。

  • 环路保护

    在RSTP中,端口状态是依靠不断接收上游设备BPDU维持的,一旦链路出现故障导致收不到RST BPDU,交换设备便会重新选择端口角色,有可能造成交换网络中产生环路。

    启动环路保护后,如果RP和AP长时间收不到上游设备的BPDU报文则向网管发出通知信息,同时RP会进入discarding状态,角色切换为DP,AP保持阻塞,但角色切换为DP,不转发报文,直至链路问题解决,收到BPDU报文进行协商后,恢复至之前角色,并且在交换机上留下日志信息。

  • 防TC-BPDU攻击

    收到TC BPDU后会执行MAC地址表项和ARP表项删除工作。

    为防止恶意攻击,可启用防TC-BPDU攻击功能,处理TC BPDU报文的次数可配置。

13.3.5 兼容性

当一个网段里既有运行STP的交换设备又有运行RSTP的交换设备,STP交换设备会忽略RSTP BPDU,运行RSTP的交换设备在某端口上接收到运行STP的交换设备发出的配置BPDU,在两个Hello Time时间之后,便把自己的端口转换到STP工作模式,发送配置BPDU,从而实现了互相兼容。

13.4 MSTP

RSTP在STP基础上进行了改进,实现了网络拓扑快速收敛。但RSTP和STP还存在同一个缺陷:由于局域网内所有的VLAN共享一棵生成树,因此无法在VLAN间实现数据流量的负载均衡,链路被阻塞后将不承载任何流量,还有可能造成部分VLAN的报文无法转发。

MSTP的解决方案就是把一个交换网络划分成多个域,每个域内形成多棵生成树,生成树之间彼此独立.

13.4.1 网络层次

技术图片

  • MSTP网络中包含1个或多个MST域(MST Region),每个域中包含一个或多个MSTI(多生成树实例)。

技术图片

  • VLAN映射表是MST域的属性,它描述了VLAN和MSTI之间的映射关系。如图中所示,MST Region 4的VLAN映射表是:

    • VLAN1映射到MSTI1
    • VLAN2映射到MSTI2
    • 其余VLAN映射到MSTI3
  • CST

    公共生成树,是连接所有MST域的一棵生成树。

  • IST

    内部生成树,是各MST域内以一棵生成树。

  • SST

    单生成树,运行STP或RSTP的交换设备只能属于一个生成树。如果MST域中只有一个交换设备,这个交换设备构成单生成树。

  • CIST

    公共和内部生成树,所有区域的IST加上CST就构成了一棵完整的生成树。

  • 总根

    CIST的根桥

  • 域根

    分为IST域根和MSTI域根

    • IST域根就是距离总根最近的交换设备
    • MSTI域根就是域中不同MSTI的根
  • 主桥

    也就是IST Master,是域内距离总根最近的交换设备。如果总根在MST域内,则总根为该域的主桥。

13.4.2 端口角色

在RSTP的基础上增加了两种端口:

  • 域边缘端口

    是指位于MST域的边缘并连接其它MST域或SST的端口。

  • Master端口

    Master端口是MST域和总根相连的所有路径中最短路径上的端口,它是交换设备上连接MST域到总根的端口。

    Master端口是域中的报文去往总根的必经之路。

    Master端口是特殊域边缘端口,Master端口在CIST上的角色是Root Port,在其它各实例上的角色都是Master端口。

13.4.3 端口状态

端口状态与RSTP相同

13.4.4 拓扑计算

  • CIST的计算

    优先级向量(依次递减):{ 根交换设备ID,外部路径开销,域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID }

    经过比较配置消息后,在整个网络中选择一个优先级最高的交换设备作为CIST的树根。在每个MST域内MSTP通过计算生成IST;同时MSTP将每个MST域作为单台交换设备对待,通过计算在MST域间生成CST。CST和IST构成了整个交换设备网络的CIST。

  • MSTI的计算

    优先级向量(依次递减):{ 域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID }

    MSTI的特点:

    • 每个MSTI独立计算自己的生成树,互不干扰。
    • 每个MSTI的生成树计算方法与STP基本相同。
    • 每个MSTI的生成树可以有不同的根,不同的拓扑。
    • 每个MSTI在自己的生成树内发送BPDU。
    • 每个MSTI的拓扑通过命令配置决定。
    • 每个端口在不同MSTI上的生成树参数可以不同。
    • 每个端口在不同MSTI上的角色、状态可以不同。

    在运行MSTP协议的网络中,一个VLAN报文将沿着如下路径进行转发:

    • 在MST域内,沿着其对应的MSTI转发。
    • 在MST域间,沿着CST转发。

13.4.5 快速收敛机制

新添了增强P/A机制。

技术图片

  1. Proposal和Agreement同时置位,上游设备发送Proposal报文,请求进行快速迁移。下游设备接收到后,把与上游设备相连的端口设置为根端口,并阻塞所有非边缘端口。
  2. 上游设备继续发送Agreement报文。下游设备接收到后,根端口转为Forwarding状态。
  3. 下游设备回应Agreement报文。上游设备接收到后,把与下游设备相连的端口设置为指定端口,指定端口进入Forwarding状态。

13.5 VBST

华为提出的生成树协议,与MSTP类似,但是比MSTP更加简单。

VBST是一个VLAN对应一棵生成树,不同VLAN的流量按照不同的路径转发。每棵生成树之间相互独立。

沿用了以下概念:

  • 一个根桥
  • 两种度量:ID和路径开销。
  • 三种端口状态:Discarding、Learning和Forwarding
  • 五种端口角色:根端口、指定端口、边缘端口、Alternate端口和Backup端口
  • 三种定时器:Hello Time、Forward Delay和Max Age
  • 两种快速收敛机制:普通和增强P/A机制
  • 四种保护机制:BPDU保护、TC保护、Root保护和环路保护
  • 与STP/RSTP相同的拓扑计算机制

不同点:

  • VBST协议中BID是由优先级、VLAN ID与MAC地址构成。桥优先级与VLAN ID之和占据前16位,其余的低48位是MAC地址。

以上是关于生成树协议的主要内容,如果未能解决你的问题,请参考以下文章

生成树协议

STP生成树协议

思科生成树协议STP

生成树协议

生成树协议

生成树协议基本原理