网络 STP
2021-08-27-19-56-27-293234.png
上帝视角

网络环路

现在的生活已经离不开网络,如果断网,会抱怨这什么破网络,影响刷抖音、打游戏;如果公司断网,那老板估计会骂娘,因为会影响到公司正常运转,直接造成经济损失。网络通信中,通常是以一条链路能够正常工作为前提,如果链路断开或节点故障,那么互联的设备就无法正常通信了,这类网络问题叫做单点故障。没有备份的链路或节点,出现故障会直接断网。
2021-08-27-19-56-27-468224.png
单点故障
如果要提供 7×24 小时不间断的服务,那就需要在网络中提前部署冗余。避免出现单点故障,合理的做法是在网络中的关键设备和关键链路添加冗余。在冗余的网络环境中,任意一条链路发生故障断开,都不会影响网络,直接使用其它链路继续转发数据,解决单点故障的隐患。
2021-08-27-19-56-27-641223.png
冗余链路
但同时也带来了另外的网络问题。这种组网会构成二层环路,会引发广播风暴、重复帧、MAC 地址漂移等问题,严重时会占满链路带宽,或打爆设备 CPU ,导致设备无法正常工作,最终造成网络瘫痪。当然,在实际的网络中,不少二层环路是由于人为的错误操作导致的,比如接错了网线。
2021-08-27-19-56-27-819228.png
二层环路
举个栗子
大刘的主机想要与小美的主机进行通信,现在只知道小美主机的 IP 地址,不知道 MAC 地址。有 IP 地址,就可以通过 ARP 协议来获取小美主机的 MAC 地址。来看看有冗余的网络中数据交换的过程:
STP - 图5
冗余网络

  1. 大刘主机向交换机 A 发送 ARP 广播帧,来解析小美主机的 MAC 地址;

2021-08-27-19-56-28-346223.png
主机发送广播帧

  1. 交换机 A 收到广播帧后,查看自己的 MAC 地址表,没找到相应的表项,就向所有端口(除接收端口之外)泛洪这个广播帧。也就是向 G0/1 和 G0/2 两个端口泛洪广播帧;

2021-08-27-19-56-28-680224.png
广播帧泛洪

  1. 交换机 B 和交换机 C 收到广播帧后,没有对应 MAC 地址表项,也将广播帧所有端口(除接收端口之外)泛洪出去;

2021-08-27-19-56-28-938221.png
广播帧泛洪

  1. 小美主机终于收到了大刘发送的 ARP 广播帧,发现是查询自己的 MAC 地址后,小美主机将会通过单播帧返回自己的 MAC 地址;

2021-08-27-19-56-29-053223.png
主机发送单播帧

  1. 这个过程看似正常,大刘主机发送的 ARP 广播帧顺利到达小美主机,小美主机也进行了响应,但是网络中广播帧的传输还没有结束。在第 3 步中,交换机 C 也把 ARP 广播帧泛洪到交换机 B 。这时交换机 B 就收到了两个相同的 ARP 广播帧,分别来自交换机 A 和交换机 C ,收到的广播帧都会泛洪出去。那么,小美主机也会收到两个相同的 ARP 广播帧,也就是重复帧。出现这种现象说明网络中存在不合理的冗余链路;

2021-08-27-19-56-29-234254.png
重复帧

  1. 接下来看下交换机 C ,交换机 C 收到从交换机 A 发过来的广播帧,同时交换机 C 的 MAC 地址表添加一条表项,记录大刘主机 MAC 地址和端口 G0/0 的映射关系。交换机 C 又从交换机 B 收到相同的广播帧,大刘主机 MAC 地址的映射端口从 G0/0 变成 G0/1 。从不同的端口收到相同的数据帧,导致 MAC 地址表项发生变化的现象,就叫做 MAC 地址漂移,这种现象说明网络中可能存在环路。这样一来,交换机 C 就无法确定大刘主机到底位于自己的哪个端口;

2021-08-27-19-56-29-433225.png
MAC地址漂移

  1. 主机收到广播帧,会进行解封装,查看上层的 IP 地址是否是发送给自己的,再进行下一步处理。交换机(只指二层交换机)收到广播帧,会直接进行泛洪。大刘主机发出的广播帧,经过交换机 A 后,从交换机 A 的 G0/1 口泛洪的广播帧,交换机 B 收到后再从 G0/2 口进行泛洪,交换机 C 收到广播帧后,又从 G0/0 口泛洪出去,结果广播帧回到了交换机 A ,交换机 A 再从 G0/1 进行泛洪,最终这个广播帧会一直逆时针、永无止境的进行泛洪;同理,交换机 A 从 G0/2 口进行泛洪的广播帧,也会按顺时针、无休止的在三台交换机上进行泛洪。这种广播帧不停泛洪的现象,叫做广播风暴。广播风暴不仅会大量消耗网络设备的带宽和 CPU 使用率,也会影响到主机。主机收到一个广播帧后,会解封装上送网络层去处理,大量的广播帧泛洪,很可能导致主机瘫痪。

2021-08-27-19-56-29-694226.png
广播风暴
通过这个简单的演示,可以看到了冗余链路带来的风险。重复帧、MAC 地址漂移和广播风暴,都是由一个广播帧引起的,可是网络中不可避免出现广播帧,也不能因为二层环路问题而忽略冗余链路增加网络可靠性的好处。
那么如何在保证网络冗余的情况下,消除二层环路呢?实际上交换机的二层环路是一个典型问题,解决方案也有不少。其中的一个解决方案就是 STP(生成树协议),能够阻断冗余链路来消除可能存在的环路,并且在网络故障时激活被阻断的冗余备份链路,恢复网络的连通性,保障业务的不间断服务。
2021-08-27-19-56-29-989224.png
STP解决环路问题
当网络中部署了 STP 后,交换机之间会交互相关协议报文,并计算出一个无环路的网络拓扑。当网络存在环路时,STP 会将网络中的一个或多个接口进行阻塞,将环路网络结构修剪成无环路的树状网络结构。被阻塞的接口不再转发数据,这样二层环路问题便迎刃而解。STP 会持续监控网络拓扑状况,当网络拓扑发生变化时,STP 能够及时感知,并动态调整被阻塞接口,而无需人工干预。
2021-08-27-19-56-30-162260.png
STP修复网络故障

STP 基本概念

STP 是用在局域网中消除数据链路层物理环路的协议,标准名称是 802.1D 。STP 带来的好处有:

  • 消除环路:STP 可以通过阻塞冗余端口,确保网络无环且连通;
  • 链路备份:当使用的链路因故障断开时,可以检测到这种情况,并自动开启阻塞状态的冗余端口,网络迅速恢复正常。

在了解 STP 的原理之前,先来看看几个专业术语:

1、桥 ID( Bridge ID ,BID )

在公司内使用资产编号标记不同的设备,在 STP 里使用不同的桥 ID 标识不同的交换机。每一台运行 STP 的交换机都有一个唯一的桥 ID 。桥 ID 一共 8 字节,包含 2 字节的桥优先级和 6 字节的桥 MAC 地址。桥优先级的值可以人为设定,默认值是 32768 。桥 MAC 地址通常是交换机默认 VLAN1 的 MAC 地址。
2021-08-27-19-56-30-329243.png
桥ID

2、根桥( Root Bridge ,RB )

STP 要在整个二层网络中计算出一棵无环的 “ 树 ” ,树形成了,网络中的无环拓扑也就形成了。其中最重要的就是树根,树根明确了,“ 树枝 ” 才能沿着网络拓扑进行延伸。STP 的根桥就是这棵树的树根。当 STP 启动后,第一件事就是在网络中选举出根桥。在一个二层网络中,根桥只有一个,其余设备都是非根桥。当网络的拓扑发生变化时,根桥也可能会发生变化。
2021-08-27-19-56-30-561225.png
根桥ID
网络中桥 ID 最小的交换机将成为根桥。在比较桥 ID 大小时,首先比较的是桥优先级,桥优先级的值最小的交换机选为根桥;如果桥优先级相同,那么会比较 MAC 地址,MAC 地址最小的交换机选为根桥。
2021-08-27-19-56-30-729229.png
根桥交换机

3、根路径开销( Root Path Cost ,RPC )

STP 交换机每一个端口都对应一个开销值,这个值表示数据通过端口发送时的开销,这个值与端口带宽有关,带宽越高,开销值越小。对于端口开销值的定义有不同的标准,通常设备默认使用 IEEE 802.1t 中定义的开销值,同时还支持其它标准,以便兼容不同厂家的设备。
2021-08-27-19-56-30-897229.png
Cost值标准对比表
非根桥到达根桥可能有多条路径,每条路径都有一个总开销值,也就是根路径开销( RPC ),这个值是通过这条路径所有出端口的开销值累加而来的。STP 不会计算入端口的开销,只在数据通过端口发出时,才计算这个端口的开销。对于根桥来说,根路径开销是 0 。
2021-08-27-19-56-31-133224.png
计算根路径开销

4、端口 ID( Port ID ,PID )

运行 STP 的交换机使用端口 ID 标识每个端口,端口 ID 主要用于选举指定端口。端口 ID 长度为 16 比特,其中前 4 比特是端口优先级,后 12 比特是端口编号。在进行比较时,先比较端口优先级,优先级小的端口优先;在优先级相同时,再比较端口编号,编号小的端口优先。通常情况下,端口编号无法改变,可通过设置端口优先级来影响生成树的选路。
2021-08-27-19-56-31-295222.png
端口ID

5、BPDU

STP 协议使用 BPDU 报文进行交互,BPDU 包含与 STP 协议相关的所有信息,并且使用这些信息来完成生成树的计算。BPDU 是组播帧,地址为 0180-c200-0000 ,并由 STP 交换机产生、发送、接收、处理,终端主机不参与。BPDU 分为两种类型:

  • 配置 BPDU( Configuration BPDU ):在 STP 的初始化过程中,每台交换机都会产生并发送配置 BPDU 。在 STP 树形成后的稳定期,只有根桥才会周期性地发送配置 BPDU ;相应的,非根桥会从自己的根端口收到配置 BPDU ,并更新自己的配置 BPDU ,再从指定端口发送出去。这个过程看起来像根桥发出的配置 BPDU 逐跳的经过了其它交换机。

2021-08-27-19-56-31-590222.png
Configuration BPDU 格式
配置 BPDU 的参数详情如下:
2021-08-27-19-56-31-728222.png
Configuration BPDU 字段表

  • 拓扑变化通知 BPDU( Topology Change Notification BPDU ):简称 TCN BPDU ,是非根桥通过根端口向根桥发送的。当非根桥检测到拓扑变化后,就会生成一个描述拓扑变化的 TCN BPDU ,并从自己的根端口发送出去。

2021-08-27-19-56-31-888224.png
TCN BPDU 格式

STP 树的生成

STP 的基本原理是在一个有二层环路的网络中,交换机通过运行 STP ,自动生成一个没有环路的网络拓扑。这个无环网络拓扑也叫做 STP 树( STP Tree ),树节点为某些交换机,树枝为某些链路。当网络拓扑发生变化时,STP 树也会自动地发生相应的改变。
2021-08-27-19-56-32-051222.png
选举范围示意图
STP 树的生成过程是:首先选举根桥,然后确定根端口和指定端口,最后阻塞备用端口。既然是选举,就看下参选者和选举范围。
2021-08-27-19-56-32-195231.png
选举角色和选举范围
STP 是通过比较 BPDU 中的信息进行选举的,最终的结果是:

  • 在整个 STP 网络中,唯一的一个根桥被选举出来;
  • 对于所有的非根桥,选举出根端口和指定端口,负责转发数据;落选的端口就是备用端口,处于阻塞状态,不能转发数据。

2021-08-27-19-56-32-443221.png
交互BPDU

1、选举根桥

根桥是 STP 树的根节点。要生成一棵 STP 树,首先要确定一个根桥。根桥是整个二层网络的逻辑中心,但不一定是物理中心。
在 STP 交换机刚连接到网络时,每台交换机都以自己为根桥,从所有启动的端口发送 BPDU ,宣告自己是根桥。收到 BPDU 的交换机会比较 BPDU 中的根桥 ID 与自己的根桥 ID ,选择根桥 ID 值小的配置成自己 BPDU 中的根桥 ID 。交换机不停地交互 BPDU ,同时对根桥 ID 进行比较,直至选出一台根桥 ID 最小的交换机作为根桥。根桥会在固定的时间间隔发送 BPDU ,其它设备对 BPDU 进行转发,从而保证网络拓扑的稳定。
2021-08-27-19-56-32-729227.png
选举根桥
根桥交换机往往会承担这个网络中最大流量的转发工作,希望性能最高的交换机当选根桥交换机。但是 STP 在选举时,并不会把交换机的性能列入考量。为了让网络流量更合理的转发,可以通过配置桥优先级的值来影响根桥的选举。
2021-08-27-19-56-32-991223.png
根桥的选举结果
同时,根桥是可以抢占的,在 STP 完成网络收敛后,如果网络中接入一台新的交换机,且新增交换机的优先级比根桥交换机更优,那么新增交换机会成为网络中新的根桥。同时,STP 将会重新收敛、重新计算网络拓扑,这个过程会引发网络震荡,对流量的正常转发造成影响。

2、选举根端口( Root Port ,RP )

根桥选举出来后,其它没有成为根桥的交换机称为非根桥。STP 会为每个非根桥选举一个根接口,也就是在交换机的所有端口中,选择距离根桥最近的一个端口,这就是根端口。
在 STP 树形成后的稳定期,根桥依然会周期性的向网络中发送 BPDU ,而非根桥的根端口会收到 BPDU ,并向指定端口发送出去。
那是如何选择根端口的呢?根桥周期性的发送 BPDU ,非根桥的所有端口都能收到 BPDU ,对比端口收到的 BPDU 中的参数值。
2021-08-27-19-56-33-293226.png
选举根端口的流程

  • 选择根路径开销( RPC )最小的端口;

2021-08-27-19-56-33-568254.png
选举根端口第一步

  • 如果 RPC 相同,那就选对端桥 ID( BID )最小的端口;

2021-08-27-19-56-33-794225.png
选举根端口第二步

  • 如果对端桥 ID 相同,那就选对端端口 ID( PID )最小的端口。

2021-08-27-19-56-34-089222.png
选举根端口第三步
准确的说,选举根端口的目的是选举出 STP 网络中每台交换机上与根交换机通信效率最高的端口。

3、选举指定端口( Designated Port ,DP )

根端口确保了交换机到根桥的路径是唯一的,也是最优的。网络中的每条链路与根桥之间的路径也要是唯一且最优的。当一条链路中有两条或两条以上的路径到达根桥,就必须确定出一个唯一的指定端口,防止出现二层环路。指定端口不但是这条链路内所有端口中到达根桥的最优接口,还会向链路内发送 BPDU 。
虽然选举指定端口的范围和根端口不同,但是选举的原则是一致的。指定端口的选举同样会按照以下过程进行:
2021-08-27-19-56-34-496231.png
选举指定端口的流程

  • 选择根路径开销( RPC )最小的端口;
  • 如果 RPC 相同,那就选对端桥 ID 最小的端口;
  • 如果对端桥 ID 相同,那就选对端端口 ID 最小的端口。

2021-08-27-19-56-34-722227.png
选举指定端口
如果有人不小心将同一台交换机上的两个端口用网线连接起来,网络中就会产生环路。选举指定端口就是为了预防这种错误连接导致环路的情况。当出现这种连接时,STP 会以端口 ID 较小的端口作为指定端口,从而打破环路。
为什么根桥交换机的所有端口都是指定端口呢?
因为根桥交换机端口的根路径开销都是 0 ,根据选择选举原则,成为这条链路的指定端口。

4、阻塞备用端口( Alternate Port ,AP )

在确定了根端口和指定端口后,交换机上剩下的非根端口和非指定端口都叫做备用端口。备用端口是打破环路的关键,STP 会对这些备用端口进行逻辑阻塞。逻辑阻塞,是指端口不会接收或发送任何数据,但是会监听 BPDU 。当网络的一些端口出现故障时,STP 会让备用端口开始转发数据,用来恢复网络的正常通信。
2021-08-27-19-56-34-980222.png
三种端口的异同如下:
2021-08-27-19-56-35-136223.png
三种端口对比表
一旦备用端口被逻辑阻塞后,STP 树的生成过程就完成了。

STP 端口状态机

STP 不但定义了 3 种端口角色:根端口、指定端口、备用端口,还讲定义了 5 种端口状态:禁用状态、阻塞状态、侦听状态、学习状态、转发状态
2021-08-27-19-56-35-395227.png
STP接口状态表
STP 交换机的端口启动时,首先会从禁用状态自动进入到阻塞状态。在阻塞状态,端口只能接收和分析 BPDU ,不能发送 BPDU 。如果端口选为根端口或指定端口,则会进入侦听状态,这时端口可以接收并发送 BPDU ,这种状态会持续一个 Forward Delay 的时间,默认是 15 秒。15 秒后端口会进入到学习状态,并持续一个 Forward Delay 的时间。学习状态的端口可以接收和发送 BPDU ,同时开始进行 MAC 地址学习,为数据转发做好准备。最后,端口由学习状态进入到转发状态,就开始进行数据转发。在整个状态的迁移过程中,端口一旦关闭或发生链路故障,就会进入到禁用状态;如果端口不再是根端口或指定端口,那么端口状态会立刻退回到阻塞状态
2021-08-27-19-56-35-608221.png
STP端口状态机
在 STP 的生成过程中,为什么要有两个 Forward Delay 时间?
侦听状态有一个 Forward Delay 的时间,是因为 BPDU 泛洪到全网需要一定的时间,STP 完成全网拓扑的计算同样需要时间,所以停留 15 秒让 STP 有充分的时间计算全网拓扑,避免网络中出现临时的环路。在学习状态又有一个 Forward Delay 的时间,是由于交换机的接口上未学习到任何 MAC 地址,需要时间学习 MAC 地址,避免网络中出现不必要的数据帧泛洪现象。停留 15 秒,为进入转发状态做好准备。

STP 时间参数

STP 定义了 3 个重要的时间参数。

  • Hello Time( Hello 时间 ):STP 交换机发送配置 BPDU 的时间间隔,默认是 2 秒。如果要修改时间参数,那么必须在根桥上修改才有效。
  • Forward Delay(转发延迟):接口从侦听状态进入学习状态,或从学习状态进入转发状态的延迟时间,默认值是 15 秒。避免在 STP 树的生成过程中可能出现的临时环路,或短暂的数据帧泛洪现象,分别在侦听和学习的端口状态各停留一个转发延迟时间。对于 STP 而言,一个阻塞端口选举为根接口或指定接口后,进入转发状态至少需要经历 30 秒的时间。
  • Max Age(最大生存时间):BPDU 的最大生存时间,也称为 BPDU 的老化时间,Max Age 的值由根桥指定,默认值是 20 秒。如果端口在 20 秒内收到 BPDU ,最大生存时间会重新计时;如果端口一直没收到 BPDU ,那么 BPDU 将会老化,设备会重新在端口上选择最优 BPDU ,也就是重新进行根接口的选举。

由于时间参数的设计,一个 STP 接口从阻塞状态进入到转发状态,可能需要 30 ~ 50 秒的时间,这段时间内,网络无法正常使用。

举例说明

2021-08-27-19-56-35-802223.png
端口状态迁移示意图

  1. 交换机 A 、B 、C 一起启动,各交换机的每个互联端口立即从禁用状态进入到阻塞状态。在阻塞状态的端口只能接收而不能发送 BPDU ,所以任何端口都收不到 BPDU 。在等待 Max Age 后,每台交换机都会认为自己是根桥,所有端口的角色都成为指定端口,并且端口的状态迁移为侦听状态。
  2. 交换机的端口进入到侦听状态后,开始发送自己产生的配置 BPDU ,同时也收到其它交换机发送的配置 BPDU 。因为各个交换机发送 BPDU 的时间有一定的随机性,所以有可能交换机 B 和交换机 C 先选举根桥为交换机 B ,再收到交换机 A 的配置 BPDU ,最后选举出根桥为交换机 A 。因此,无论交换机开始的状态如何,也不管中间过程有多大差异,最终的结果总是确定且唯一的:桥 ID 最小的交换机会成为根桥。端口在侦听状态持续 Forward Delay 的时间后,开始进入学习状态。由于交换机 C 的 G0/2 端口已经成为备用端口,所以状态也会变成阻塞状态。
  3. 各个端口(交换机 C 的 G0/2 端口除外)陆续进入学习状态后,会持续 Forward Delay 的时间。在这段时间里,交换机开始学习 MAC 地址和端口的映射关系,同时希望 STP 树在这个时间内能够完全收敛。
  4. 之后各个端口(交换机 C 的 G0/2 端口除外)相继进入转发状态,开始进行数据帧的转发。

    STP 的改进和代替技术

    在实际应用中,STP 有很多不足之处,RSTP/MSTP 对 STP 进行了哪些改良?有哪些其它技术用来代替生成树技术?欲知具体细节,且看下篇文章。

    实战演练

    STP 基础配置

    我们用 3 台交换机搭建一个网络环境,而且网络中存在二层环路。为了对网络进行破环,将在交换机上部署 STP 。
    网络拓扑
    2021-08-27-19-56-36-004229.png
    实验拓扑图
    实验要求
  • 三台交换机( SW )配置 STP 功能,使用命令指定根桥交换机,使用命令改变端口状态。
    操作步骤
  1. 三台 SW 按照网络拓扑图,对相应的端口进行连接。SW 默认的生成树工作模式是 MSTP ,并且自动协商出了根桥、根端口和指定端口。交换机的桥优先级默认是 32768 ,MAC 地址最小的交换机成为网络中的根桥。通过命令查看,发现 SWB 选举为根桥。

2021-08-27-19-56-36-770225.png
SW默认状态

  1. 在三台交换机上分别配置工作模式从默认的 MSTP 改成 STP ,并且启动 STP 功能。stp mode 命令用来修改交换机的工作模式。stp enable 命令用在设备上激活生成树功能,默认处于激活状态,所以这条命令为可选。

2021-08-27-19-56-37-248223.png

  1. 在实际的网络部署中,我们通常会修改某台设备的优先级,确保它成为这个网络的根桥,从而保证 STP 的稳定性。假设 SW1 是高性能的核心交换机,SW2 和 SW3 是普通性能的接入交换机。可以将 SW1 设置成根桥。在 SW1 配置的 stp root primary 命令让它成为网络中的根桥,实际上这条命令是把交换机的优先级设置成最小值 0 ,而且这个优先级不能修改。因此在 SW1 使用替代命令 stp priority 0 也能实现相同效果。stp priority 命令可以修改设备的 STP 优先级,取值范围是 0 ~ 61440 ,而且要是 4096 的倍数,例如 0 、4096 、8192 等。

2021-08-27-19-56-37-887258.png
根桥配置

  1. 在设备上使用 display stp 命令查看 STP 状态,SW1 上的输出如下。交换机的桥 ID 是 0.4c1f-ccff-4a7d ,其中 0 为交换机的优先级值,这就是命令 stp root primary 的作用。4c1f-ccff-4a7d 是交换机的 MAC 地址,且根桥的 MAC 地址也是 4c1f-ccff-4a7d ,说明这台交换机就是根桥。

2021-08-27-19-56-38-392254.png
查看STP状态

  1. 还可以使用 display stp brief 命令查看接口的 STP 状态,在 SW1 上输出如下。由于 SW1 是根桥,所有端口都是指定状态,都处于转发状态。

2021-08-27-19-56-38-892480.png
查看STP接口状态

  1. SWC 的 G0/0/2 端口将会被阻塞,命令输出如下。为什么 G0/0/2 的端口状态是禁用,而不是阻塞。因为 STP 已经不再使用,交换机默认使用 MSTP ,即使将生成树的模式修改为 STP ,交换机的端口状态依然和 MSTP 保持一致。端口角色( Role )也是 MSTP 中的概念。

2021-08-27-19-56-39-055483.png
查看SWC的STP接口状态

  1. 因为 SWC 的 G0/0/1 端口是根端口,收到的 BPDU 比 G0/0/2 收到的更优,所以端口被阻塞。如果我们希望阻塞的不是 G0/0/2 ,而是 G0/0/1 端口,那就要让 G0/0/2 成为根端口,比如将 G0/0/1 端口的 Cost 值调大,让 SWC 的 G0/0/1 到达根桥的 RPC 比 G0/0/2的更大。SWC 增加配置如下:

2021-08-27-19-56-39-206492.png
修改STP端口Cost值

  1. 再观察下 SWC 的端口状态,G0/0/2 端口成为根端口,G0/0/1 端口被阻塞。

2021-08-27-19-56-39-609484.png
查看SWC的端口状态

功能验证

查看三台 STP 交换机的端口状态,是否符合预期结果。
2021-08-27-19-56-40-116480.png
查看三台交换机的端口状态
还可以抓包验证 STP 交互的 BPDU 报文内容是否正常。
2021-08-27-19-56-40-560482.png