一、STP

STP出现的背景
根本问题:存在环路,所以会带来以下问题
①广播风暴导致网络不可用。
②MAC 地址表震荡导致 MAC 地址表项被破坏。
③多帧复制。
STP主要作用:通过阻塞端口来消除环路,并能够实现链路备份的目的 或(在保证二层物理链路冗余的前提下,逻辑上制造一个无环的拓扑)

STP基本概念
①一个根桥
②两个度量:ID和路径开销。ID分为BID(Bridge ID,桥ID)和 PID(Port ID,端口ID)
桥ID:优先级占据高16位,低48位是MAC地址。优先级默认32768,必须设置4096倍数,0x1000-0xF000
端口ID:高4位是端口优先级,低12位是端口号。端口优先级取值范围是0到240,步长为16,即取值必须为16的整数倍。缺省情况下,端口优先级是128。,

路径开销:端口到根桥累计的路径开销

③三个选举要素:根桥 、根端口 、指定端口
根桥:桥ID越小,优先级越大
根端口:该端口的根路径开销,对端BID,对端PID,本端PID
指定端口:根路径开销,本端BID,本端PID。
④四个比较原则:{ 根桥 ID,累计根路径开销,发送设备 BID,发送端口 PID }
⑤五个端口状态:Forwarding、Learning、Listening、Blocking、Disabled

三个时间参数
①Hello Time:以Hello Time为周期,向周围的设备发送BPDU报文,缺省2s
②Forward Delay:当一个端口处于 Listening 和 Learning 状态的各自持续时间,缺省15s
③Max Age:如果 Message Age 小于等于 Max Age,则该非根桥设备继续转发配置 BPDU 报文;如果Message Age大于Max Age,则该配置BPDU报文将被老化。该非根桥设备直接丢弃该配置 BPDU。缺省20
如果配置 BPDU 是根桥发出的,则 Message Age 为 0。否则,Message Age 是从根桥发送到当前桥接收到 BPDU 的总时间,包括传输延时等。实际实现中,配置 BPDU 报文经过一个桥,Message Age 增加 1。

STP 报文格式

BPDU报文被封装在以太网数据帧中,目的MAC是组播MAC:01-80-C2-00-00-00,Length/Type字段为MAC数据长度,后面是LLC头,LLC之后是BPDU报文头。

BPDU分为配置BPDU和TCN BPDU
配置BPDU在这三种情况下会产生:
①只要端口使能STP,则配置BPDU就会按照Hello Time定时器规定的时间间隔从指定端口发出。
②当根端口收到配置BPDU时,如果优先级比自己的配置BPDU高,则会根据收到的配置BPDU中携带的信息更新自己STP端口存储的配置BPDU信息并从指定接口向下游发送,否则会丢弃该配置BPDU。
③当指定端口收到比自己差的配置BPDU时,会立刻向下游设备发送自己的BPDU。

TCN BPDU会在这三种情况下产生:
①端口状态变为Forwarding状态。
②指定端口收到TCN BPDU,复制TCN BPDU并发往根桥。

其中BPDU DATA中的flag字段的最高位和最低位取决该TCN BPDU是TCA BPDU还是TC BPDU

STP拓扑变化过程

1.在网络拓扑发生变化后,下游设备会不间断地向上游设备发送 TCN BPDU 报文。
2.上游设备收到下游设备发来的 TCN BPDU 报文后,只有指定端口处理 TCN BPDU 报文。
3.上游设备会把配置 BPDU 报文中的 Flags 的 TCA 位设置 1,然后发送给下游设备,告知下游设备停止发送 TCN BPDU 报文。
4.上游设备复制一份 TCN BPDU 报文,向根桥方向发送。
5. 重复步骤 1、2、3、4,直到根桥收到 TCN BPDU 报文。

根桥把配置 BPDU 报文中的 Flags 的 TC 位置 1 后发送,通知下游设备直接删除桥 MAC 地址表项。

拓扑收敛计算

①当链路2中断时
SW3的RP端口消失,所有端口角色重新计算,把自己当做根桥,初始端口为DP,向别的交换机通告自己的BPDU。SW2的Port4收到SW3发的次BPDU,SW2的Port4不等待Hello间隔,立即回应自己端口缓存的BPDU给SW3,SW3的Port3收到后,重新计算后成为RP端口。
所需时间=端口角色变化时间+端口状态变化时间

华为实现:若交换机有AP端口,RP端口失效时,最好的AP端口会立即成为RP端口。此时不需要计算端口变化,端口状态从Discarding变为Forwarding,所需时间为30s。

②当链路1中断时
SW2的RP端口消失,所有端口角色重新计算,把自己当做根桥,初始端口为DP,向别的交换机通告自己的BPDU。SW3的Port3端口收到SW2发来的次等BPDU,会与SW3的Port3缓存的BPDU相比较。此时AP端口的缓存BPDU更优,则SW3忽略该BPDU并保持AP端口角色。
等待AP端口的缓存BPDU超时后(T>Max Age,缺省20s),SW3的Port3重新计算角色,此时SW3的Port3角色为DP端口,状态为Discarding,向SW2通告自己的BPDU。SW2的Port4和Port5都收到SW3的Port3发出的BPDU,计算后Port4是RP,Port5时AP。
SW2 RP和SW3 DP在接下来30s,从Discarding->Forwarding的状态变迁进入转发状态
所需时间=SW3等待Max Age延时后角色变迁(20s)+SW2 RP和SW3 DP状态变迁(30s)

华为实现:接收BPDU端口收到次等BPDU,会立即重新计算端口角色(没有引入Max Age等待超时),状态由Discarding到Forwarding仍要30s的时间。

③当SW3的Port4失效时
SW2的DP端口4失效时,SW2的端口5和SW3的端口3等待20s,在各自端口缓存的BPDU超时后,重新计算端口角色。SW3端口3仍为AP端口,SW2的端口5成为DP端口,端口状态迁移需要三十秒。

所需时间=SW2的端口5和SW3的端口3等待超时(20s)+SW2 DP状态变迁(30s)

实验

SWA:
#
stp mode stp
stp instance 0 priority 4096
stp pathcost-standard legacy
SWB:
#
stp mode stp
stp pathcost-standard legacy
SWC:
#
stp mode stp
#
interface Ethernet0/0/1stp instance 0 cost 20000
SWD:
#
stp mode stp
stp pathcost-standard legacy[SWA]dis stp brief MSTID  Port                        Role  STP State     Protection0    Ethernet0/0/1               DESI  FORWARDING      NONE0    Ethernet0/0/2               DESI  FORWARDING      NONE
[SWB]dis stp brief MSTID  Port                        Role  STP State     Protection0    Ethernet0/0/1               DESI  FORWARDING      NONE0    Ethernet0/0/2               ROOT  FORWARDING      NONE
[SWC]dis stp brief MSTID  Port                        Role  STP State     Protection0    Ethernet0/0/1               ALTE  DISCARDING      NONE0    Ethernet0/0/2               ROOT  FORWARDING      NONE
[SWD]dis stp brief MSTID  Port                        Role  STP State     Protection0    Ethernet0/0/1               ROOT  FORWARDING      NONE0    Ethernet0/0/2               DESI  FORWARDING      NONE

SWA E0/0/2抓取STP的配置BPDU

二、RSTP

STP的不足
①没有细分端口状态和端口角色
②收敛速度慢:依赖定时器;稳定的拓扑中,根桥主动发出配置BPDU,经过其他设备,传遍整个网络

RSTP对STP的改进
①合并了两种端口状态
根据端口是否转发用户流量和学习 MAC 地址来划分端口状态:
既不转发用户流量也不学习 MAC 地址,那么端口状态就是 Discarding 状态。
不转发用户流量但是学习 MAC 地址,那么端口状态就是 Learning 状态。
既转发用户流量又学习 MAC 地址,那么端口状态就是 Forwarding 状态。

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

③配置 BPDU 格式的改变,对Type字段和Flag字段进行修改
Type字段,配置BPDU类型不再是0而是2,所以运行STP的设备收到RSTP的配置BPDU时会丢弃。
原来运行STP的type字段:0x00,TCN BPDU的Type字段:0x80
Flags 字段,原来保留的中间 6 位,使用了中间6位,这样改变的配置 BPDU 叫做 RST BPDU

④配置 BPDU 的处理发生变化
拓扑稳定后,配置 BPDU 报文的发送方式:
在拓扑稳定后,无论非根桥设备是否接收到根桥传来的配置 BPDU 报文,非根桥设备仍然按照 Hello Timer 规定的时间间隔发送配置 BPDU

更短的 BPDU 超时计时:
取消了MAX AGE,如果一个端口连续连续 3 个 Hello Time 时间内没有收到上游设备发送过来的配置 BPDU,那么该设备认为与此邻居之间的协商失败。

处理次等 BPDU:
当一个端口收到上游发来的 RST BPDU 报文时,该端口会将自身存储的 RSTBPDU 与收到的 RST BPDU 进行比较,如果该端口存储的 RST BPDU 的优先级高于收到的 RST BPDU,那么该端口会直接丢弃收到的 RST BPDU,立即回应自身存储的 RST BPDU。
在STP中需要将等待自身BPDU超时,才回复自身存储的BPDU。

由此可见,RSTP处理次等BPDU报文不再依赖于任何定时器通过超时解决拓扑收敛,从而加快收敛

⑤快速收敛
Propasal/Agreement机制
当一个端口被选为指定端口时,在STP中,至少要等待一个Forward Delay才能从Learning迁移到Forwarding状态。而在RSTP中,此端口会先进入Discarding状态,再通过P/A机制快速进入Forward状态。

根端口快速切换机制
如果网络中一个根端口失效,那么网络中最优的Alternate端口将成为根端口。

边缘端口的引入
直接与终端设备相连的端口叫边缘端口。边缘端口一旦收到配置BPDU,就成为普通STP端口,从而引起网络震荡

⑥保护功能
BPDU保护
防止边缘端口收到配置BPDU,从而引起的网络动荡。
开启BPDU保护功能之后,如果边缘端口收到BPDU,边缘端口将被error-down,但是边缘端口属性不变,同时通知网管系统。

根保护
防止维护人员的错误配置或网络中的恶意攻击。
启用 Root 保护功能的指定端口收到优先级更高的 RST BPDU 时,端口状态将进入 Discarding 状态,不再转发报文。在经过两倍的 Forward Delay,如果端口一直没有再收到优先级较高的RST BPDU,端 口 会 自 动 恢 复 到 正 常 的Forwarding 状态。

环路保护
由于链路拥塞或者单向链路故障导致端口收不到来自上游交换设备的 RST BPDU 时,此时交换设备会重新选择根端口。原先的根端口会转变为指定端口,而原先的阻塞端口会迁移到转发状态,从而造成交换网络中可能产生环路。
启动了环路保护功能后,如果根端口或Alternate 端口长时间收不到来自上游的 RST BPDU 时,则向网管发出通知信息。而阻塞端口则会一直保持在阻塞状态,不转发报文,从而不会在网络中形成环路。

防TC-BPDU攻击
交换设备在接收到 TC BPDU 报文后,会执行 MAC 地址表项和 ARP表项的删除操作。
启用防 TC-BPDU 报文攻击功能后,在单位时间内,交换设备处理 TC BPDU 报文的次数可配置。如果在单位时间内,交换设备在收到 TC BPDU报文数量大于配置的阈值,那么设备只会处理阈值指定的次数。对于其他超出阈值的 TCN BPDU报文,定时器到期后设备只对其统一处理一次。

RSTP技术详细细节

1、P/A过程

新链路连接成功后,P/A 机制协商过程如下:
①p0 和 p1 两个端口马上都先成为指定端口,发送 RST BPDU。
②S2 的 p1 口收到更优的 RST BPDU,马上意识到自己将成为根端口,而不是指定端口,停止发送 RST BPDU。
③S1 的 p0 进入 Discarding 状态,于是发送的 RST BPDU 中把 proposal 置 1。
④S2 收到根桥发送来的携带 proposal 的 RST BPDU,开始将自己的所有端口进入 sync 变量置位。
⑤p2 已经阻塞,状态不变;p4 是边缘端口,不参与运算;所以只需要阻塞非边缘指定端口 p3。
⑥p2、p3、p4 都进入 Discarding 状态之后,各端口的 synced 变量置位,根端口 p1 的synced也置位,于是便向 S1 返回 Agreement 位置位的回应 RST BPDU。该 RST BPDU 携带和刚才根桥发过来的 BPDU 一样的信息,除了 Agreement 位置位之外(Proposal 位清零)。
⑦当 S1 判断出这是对刚刚发出的 Proposal 的回应,于是端口 p0 马上进入 Forwarding 状态。

2、拓扑变化通知机制
(1)触发条件:一个非边缘端口迁移到 Forwarding 状态
(2)拓扑变化交换机产生通知
①TC置位的BPDU向所有处于转发状态的非边缘的DP和RP端口去扩散
②为转发端口开启TC While计时器,时长是2个Heloo间隔
③清空所有接口MAC地址关联表(边缘端口除外)
(3)周边交换机扩散通知
①交换机收到TC置位的BPDU向其他DP/RP端口扩散
②清空所有接口MAC地址关联表,除了收到TC BPDU的接口
③开启TC While计时器。并且继续向所有转发状态的非边缘DP/RP继续转发

3、扩展性及优化 RSTP STP 兼容
当一个网段里既运行 STP 的交换设备 又运行 RSTP 的交换设备,把自己的端口转换到 TP 工作模式。

实验

SWA:
stp mode rstp
stp instance 0 priority 4096
stp pathcost-standard legacy
#
interface Ethernet0/0/1stp root-protection
#
interface Ethernet0/0/2stp root-protection
SWB:
stp mode rstp
stp pathcost-standard legacy
#
interface Ethernet0/0/3stp bpdu-filter enablestp edged-port enable
SWC:
stp mode rstp
stp pathcost-standard legacy
#
interface Ethernet0/0/1stp instance 0 cost 20000
#
interface Ethernet0/0/3stp bpdu-filter enablestp edged-port enable
SWD:
stp mode rstp
stp pathcost-standard legacy

SWA E0/0/2抓取STP的配置BPDU

三、MSTP

MSTP基本概念

①MST 域(MST Region)
MST 域是多生成树域(Multiple Spanning Tree Region),由交换网络中的多台交换设备以及它们之间的网段所构成。
②VLAN 映射表
VLAN 映射表是 MST 域的属性,它描述了 VLAN 和 MSTI 之间的映射关系。
③域根
域根(Regional Root)分为 IST(Internal Spanning Tree)域根和 MSTI 域根。
IST域根如图所示,在 B0、C0 和 D0 中,IST 生成树中距离总根(CIST Root)最近的交换设备是IST域根。
一个 MST 域内可以生成多棵生成树,每棵生成树都称为一个 MSTI。MSTI 域根是每个多生成树实例的树根。
④主桥
主桥(Master Bridge)也就是 IST Master,它是域内距离总根最近的交换设备。
⑤总根
全网中BID最小为总根,其他域中,离根最近的交换机为域根。
⑥CST
公共生成树 CST(Common Spanning Tree)是连接交换网络内所有 MST 域的一棵生成树。
⑦IST
内部生成树 IST(Internal Spanning Tree)是各 MST 域内的一棵生成树。
⑧CIST
公共和内部生成树 CIST 是通过 STP 或 RSTP 协议计算生成的,连接一个交换网络内所有交换设备的单生成树。

实验

思路:配置MSTP域,配置各实例主根桥和备份根桥,配置将要被阻塞端口的开销值,使能MSTP(全局上stp enable),配置边缘端,配置保护功能,配置二层vlan
SWA:
#
vlan batch 10 20
#
stp instance 1 root primary
stp instance 2 root secondary
stp pathcost-standard legacy
#
stp region-configurationregion-name RG1instance 1 vlan 10instance 2 vlan 20active region-configuration
#
interface GigabitEthernet0/0/1port link-type trunkport trunk allow-pass vlan 10 20
#
interface GigabitEthernet0/0/2port link-type trunkport trunk allow-pass vlan 10 20SWB:
vlan batch 10 20
#
stp instance 1 root secondary
stp instance 2 root primary
stp pathcost-standard legacy
#
stp region-configurationregion-name RG1instance 1 vlan 10instance 2 vlan 20active region-configuration
#
interface GigabitEthernet0/0/1port link-type trunkport trunk allow-pass vlan 10 20
#
interface GigabitEthernet0/0/2port link-type trunkport trunk allow-pass vlan 10 20SWC:
vlan batch 10 20
#
stp pathcost-standard legacy
#
stp region-configurationregion-name RG1instance 1 vlan 10instance 2 vlan 20active region-configuration
#
interface GigabitEthernet0/0/1port link-type accessport default vlan 10stp bpdu-filter enablestp edged-port enable
#
interface GigabitEthernet0/0/2port link-type trunkport trunk allow-pass vlan 10 20stp instance 2 cost 20000
#
interface GigabitEthernet0/0/3port link-type trunkport trunk allow-pass vlan 10 20SWD:
vlan batch 10 20
#
stp pathcost-standard legacy
#
stp region-configurationregion-name RG1instance 1 vlan 10instance 2 vlan 20active region-configuration
#
#
interface GigabitEthernet0/0/1port link-type accessport default vlan 20stp bpdu-filter enablestp edged-port enable
#
interface GigabitEthernet0/0/2port link-type trunkport trunk allow-pass vlan 10 20stp instance 1 cost 20000
#
interface GigabitEthernet0/0/3port link-type trunkport trunk allow-pass vlan 10 20[SWA]dis stp brief MSTID  Port                        Role  STP State     Protection0    GigabitEthernet0/0/1        ALTE  DISCARDING      NONE0    GigabitEthernet0/0/2        ROOT  FORWARDING      NONE1    GigabitEthernet0/0/1        DESI  FORWARDING      NONE1    GigabitEthernet0/0/2        DESI  FORWARDING      NONE2    GigabitEthernet0/0/1        DESI  FORWARDING      NONE2    GigabitEthernet0/0/2        ROOT  FORWARDING      NONE[SWB]dis stp brief MSTID  Port                        Role  STP State     Protection0    GigabitEthernet0/0/1        ROOT  FORWARDING      NONE0    GigabitEthernet0/0/2        DESI  FORWARDING      NONE1    GigabitEthernet0/0/1        DESI  FORWARDING      NONE1    GigabitEthernet0/0/2        ROOT  FORWARDING      NONE2    GigabitEthernet0/0/1        DESI  FORWARDING      NONE2    GigabitEthernet0/0/2        DESI  FORWARDING      NONE[SWC]dis stp brief MSTID  Port                        Role  STP State     Protection0    GigabitEthernet0/0/1        DESI  FORWARDING      NONE0    GigabitEthernet0/0/2        ROOT  FORWARDING      NONE0    GigabitEthernet0/0/3        DESI  FORWARDING      NONE1    GigabitEthernet0/0/1        DESI  FORWARDING      NONE1    GigabitEthernet0/0/2        DESI  FORWARDING      NONE1    GigabitEthernet0/0/3        ROOT  FORWARDING      NONE2    GigabitEthernet0/0/2        ALTE  DISCARDING      NONE2    GigabitEthernet0/0/3        ROOT  FORWARDING      NONE[SWD]dis stp brief MSTID  Port                        Role  STP State     Protection0    GigabitEthernet0/0/1        DESI  FORWARDING      NONE0    GigabitEthernet0/0/2        DESI  FORWARDING      NONE0    GigabitEthernet0/0/3        DESI  FORWARDING      NONE1    GigabitEthernet0/0/2        ALTE  DISCARDING      NONE1    GigabitEthernet0/0/3        ROOT  FORWARDING      NONE2    GigabitEthernet0/0/1        DESI  FORWARDING      NONE2    GigabitEthernet0/0/2        DESI  FORWARDING      NONE2    GigabitEthernet0/0/3        ROOT  FORWARDING      NONE

生成树技术详解(STP、RSTP、MSTP)相关推荐

  1. STP/RSTP/MSTP 精华详解

    STP/RSTP/MSTP 精华详解: STP 概述 : 因为二层设备的互联,并因为交换机的转发原理,会导致物理环路的产生.这时就会使用到STP协议 STP:在有环的拓扑里面形成一个无环的逻辑拓扑(从 ...

  2. vlan配置实例详解_【精品网络干货】二层MSTP防环技术详解

    一.MSTP 出现的背景: RSTP 在 STP 基础上进行了改进,实现了网络拓扑快速收敛.但 RSTP 和 STP 还存在同一个缺陷:由于局域网内所有的 VLAN 共享一棵生成树,因此无法在 VLA ...

  3. 计算机网络之STP(Spanning Tree Protocol)生成树协议详解及其实验配置

    目录 1.STP概念 1.1  STP选举过程 1.1.1 根桥和根端口的选举 1.1.2 端口角色的选举 2.STP端口状态解释及转换 2.1 STP的五种端口状态 2.2 STP过程中的两种常见问 ...

  4. 【HCIE-RS 天梯路】STP RSTP MSTP

    生成树协议 STP(Spanning Tree Protocol)用于二层破环 不使用生成树协议可能会导致:       1. 广播风暴 2. MAC地址漂移 三层口没有STP 生成树协议模式:(实例 ...

  5. 《策略驱动型数据中心——ACI技术详解》一1.3 数据中心设计

    本节书摘来自异步社区<策略驱动型数据中心--ACI技术详解>一书中的第1章,第1.3节,作者[美]Lucien Avramov [意]Maurizio Portolani,更多章节内容可以 ...

  6. 《策略驱动型数据中心——ACI技术详解》——1.3 数据中心设计

    本节书摘来自异步社区<策略驱动型数据中心--ACI技术详解>一书中的第1章,第1.3节,作者: [美]Lucien Avramov [意]Maurizio Portolani 更多章节内容 ...

  7. 简洁版本 STP/RSTP/MSTP的区别以及各自的特点

    参考:https://blog.csdn.net/cisco_eigrp/article/details/47134357 生成树相关的几个概念STP/RSTP/MSTP STP:IEEE Std 8 ...

  8. STP/RSTP/MSTP协议简介

    STP/RSTP/MSTP协议简介 STP 一.STP协议 二.为什么要有STP协议? BPDU 一.什么是BPDU? 二.BPDU的功能 三.BPDU的类型 端口 一.端口角色 二.端口状态描述 三 ...

  9. vlan配置实例详解_网工知识角|MUXVLAN技术详解,基本原理一篇搞定

    学网络,就在IE-LAB 国内高端网络工程师培养基地 MUX VLAN(Multiplex VLAN )提供了一种通过VLAN进行网络资源控制的机制.通过MUX VLAN提供的二层流量隔离的机制可以实 ...

最新文章

  1. python自增_python – 类实例的自动递增ID
  2. 通过分析 JDK 源代码研究 TreeMap 红黑树算法实现--转
  3. Python-Django-Ajax进阶
  4. nginx中的try_files指令解释
  5. 康乐php一键脚本,kangle一键脚本
  6. 从零开始刷Leetcode——字符串(13.14.20.28)
  7. LTE学习:CCE(control channel element)控制信道单元(1)
  8. 生产和服务使用的计算机软件,Windows效率 篇三:Windows 10软件推荐,将你的生产力工具发挥到极致!...
  9. yuv422sp to yuv422p
  10. 如何降低IE安全级别
  11. linux中MIB与MB单位的区别
  12. __gxx_personality_v0详解
  13. Mac重启和关机没反应解决办法
  14. 基于 Squid 实现爬虫代理服务
  15. 火地晉 (易經大意 韓長庚)
  16. Avro技术应用_5. 利用 Camus 来将 Avro 数据从 Kafka 拷贝到 HDFS -- 待完善
  17. 树形控件--zTree 很好很强大
  18. 明日之后辐射高校145层怎么过 辐射高校145层攻略
  19. matlab毕达哥拉斯质数,这位天才发现了素数、完美数和亲和数,证明三角形内角和是180°...
  20. navicat连接远程mysql数据库

热门文章

  1. Adobe Lightroom For Mac安装使用教程
  2. 利用飞秋的udp用java语言进行震动攻击
  3. 技术部突然宣布:JAVA开发人员全部要会接口自动化测试框架
  4. 成本费用空缺,所得税税负高,怎么合理避税?
  5. 奥的斯服务器显示shutdown,奥的斯电梯故障代码及故障实例分析
  6. 企业宣传片的拍摄要点!
  7. 07 输出螺旋式数字方阵
  8. 射频电路layout 总结
  9. 程序员必备的软件开发工具
  10. opencv contrib模块 示例 WeChat qrcode微信二维码检测解码