0


OSPF(Open Shortest Path First,开放最短链路优先)

系列文章目录💫

🚀RIP(Routing Information Protocol,路由信息协议)
🚀EIGRP(Enhanced Interior Gateway Routing Protocol,增加型内部网关路由协议)
🚀OSPF的特征、术语、路由器类型、LSA类型、区域类型


文章目录


前言🚁

**OSPF是一个内部网关路由协议,使用链路状态而不是距离矢量进行路径选择。OSPF传播LSA (链路状态通告),而不是路由表更新。因为只交换LSA而不交换整个路由表,OSPF网络能以较快的方式收敛。
**OSPF使用链路状态算法来构建并计算到达所有已知目的的最短路径。OSPF区域中的每台路由器都有相同的链路状态数据库,这是-一个包含每台路由器可用接口和可达邻居的列表。


🎶:本文章是续写,http://t.csdn.cn/81LVQ🎶

建立OSPF邻居关系🛵

✨OSPF是一个基于开放标准的链路状态协议。OSPF的操作从高层看由三个主要的元素组成:邻居发现、链路状态信息交换以及最优路径计算。
✨OSPF使用SPF (最短路径优先)或Dijkstra 算法计算最优路径。SPF计算的输入信息是链路状态信息,这些信息在路由器之间通过不同的OSPF消息类型进行交换。这些消息类型有助于提升收敛速度,以及多区域OSPF部署中的扩展性。
✨OSPF也支持几种不同的网路类型,工程师可以在多种不同的下层网络技术之,上配置OSPF。

OSPF特性🛻

✨OSPF由IETF (互联网工程任务组)开发,用来克服距离矢量路由协议的限制。OSPF被广泛部署在当今企业网络中的一个主要原因是它是开放的标准;OSPF不是私有的。RFC1131 中描述了OSPF协议的第1版。当前在IPv4中使用的是第2版,定义在RFC 1247和2328中。OSPF 第3版用于IPv6网络,定义在RFC 5340中。
✨OSPF提供了极大的扩展性以及快速的收敛性能。虽然在小型和中型网络中配置相对简单,但大规模网络中OSPF的部署和排错有时候会很复杂。

  • OSPF
  • 独立传输: OSPF工作在IP上层,使用协议号89。它不依赖传输层协议TCP或UDP的支持。
  • 采用高效的更新:当一台OSPF路由器第一次发现一个新邻居时,它会向新邻居发送包含所有已知链路状态信息的完整更新。-一个OSPF区域中所有路由器的链路状态数据库中必须包含一致且同步的链路状态信息。当一个OSPF网络处于收敛状态,且出现新链路启用或链路不可用事件时,OSPF路由器仅发送部分更给自己的所有邻居。此更新随后会被泛洪给区域内的所有OSPF路由器。
  • 度量: OSPF使用的度量值是从源到目的所有出接口的累加开销值。接口开销与接口带宽成反比,工程师也可以手动进行指定。
  • 更新目的地址:OSPF不使用广播,而是使用组播和单播发送消息。OSPF使用IPv4单播地址224.0.0.5向所有OSPF路由器发送信息,使用224.0.0.6向DR/BDR路由器发送信息。所有OSPFv3路由器的IPv6组播地址是FF02::5,所有DR/BDR路由器的地址是FF02::6。 如果下层网络不支持广播,工程师必须使用单播地址建立OSPF邻居关系。对于IPv6环境来说,该地址是链路本地IPv6地址。
  • 支持VLSM: OSPF 是一个无类路由协议。它支持VLSM (可变长子网掩码)和不连续网络。它在路由更新中携带子网信息。
  • 手工路由汇总:工程师可以在ABR (区域边界路由器)上手动汇总OSPF区域间 路由,也可以在ASBR (自治系统边界路由器)上汇总OSPF外部路由。OSPF没有自动汇总的概念。
  • 认证: OSPF支持明文、MDS以及SHA认证。

注释 :术语IP用作一般意义上的IP,同时表示IPv4和IPv6。除此之外,使用术语IPv4和IPv6来表示特定的协议。

OSPF操作概述🚙

✨如图3-1所示,OSPF路由器通过以下通用的链路状态路由过程,创建并维护路由信息,以达到收敛状态。在这里插入图片描述

  • 建立邻居邻接关系: OSPF路由器必须与其邻居建立邻接关系之后才能共享信息。OSPF路由器从所有启用OSPF的接口发送Hello包,用来确定这些链路_上是否有OSPF邻居。如果发现了邻居,OSPF路由器会尝试与该邻居建立邻接关系。
  • 交换链路状态通告:邻接关系建立后,路由器交换LSA (链路状态通告)。LSA包含每条直连链路的状态和开销。路由器将LSA泛洪给邻接的邻居。接收到LSA的邻接邻居立即将LSA泛洪给其他的直连邻居,直到区域中的所有路由器都有相同的LSA为止。
  • 构建拓扑表:收到LSA之后,OSPF路由器会基于收到的LSA构建LSDB(拓扑表)。此数据库中最终会拥有网络拓扑的所有信息。对于区域中所有路由器,LSDB中一定都要有相同的信息。
  • 执行SPF算法:路由器执行SPF算法。SPF算法构建SPF树。
  • 构建拓扑表:路由器把SPF树中的最优路径放人到路由表中,并基于路由表中的条目作出路由决策。

OSPF的分层结构🛹

✨如果在一个简单的网络中运行OSPF,路由器和链路的数量都相对较少,OSPF可以很轻松地推算出到达所有目的的最优路径。然而,包含许多路由器和链路的更大网络的描述信息可能会变得颇为复杂。SPF计算会比较所有可能的路径,而这个计算过程可能会变为一个复杂且耗时的过程。
一个减小复杂性和链路状态信息数据库大小的主要方式是把OSPF路由域分为较小的单元,也称为区域(Area),如图3-2所示。这也减少了路由器执行SPF算法花费的时间。一个区域中的所有OSPF路由器在各自的LSDB中必须包含相同的条目。在区域内,路由器交换详细的链路状态信息。然而,从一个区域传输到另一个区域的信息中,仅包含LSDB条目的明细汇总,并不包含源区域的拓扑详情。这些来自另一个区域的汇总LSA会被直接放到路由表中,不需要路由器重新运行SPF算法。OSPF分层
OSPF使用两层区域分级。

  • 骨干区域或区域0:骨干区域的两个主要要求是,骨干区域必须连接所有其他非骨干区域,且此骨干区域必须总是连续的;不允许分割骨干区域。一般来说,骨干区域中没有终端用户。
  • 非骨干区域:此区域的主要功能是连接终端用户和资源。非骨干区域通常根据功能性或地理位置进行划分。不同非骨干区域之间的流量必须总是经过骨干区域。生多区域拓扑中,有一些特殊的常用OSPF术语。
  • ABR: ABR路由器至少有两个接口分别连接不同区域(包含骨干区域在内)。ABR中包含每个区域的LSDB信息,为每个区域进行路由计算,且在区域之间通告路由信息。
  • ASBR: ASBR路由器至少有一个接口连接到一个OSPF区域,且至少有一个接口连接到外部非OSPF区域。
  • 内部路由器:内部路由器的所有接口都只连接到一个OSPF区域。此路由器完全在区域内部。
  • 骨干路由器:骨干路由器至少有一个接口连接到骨干区域。 ✨根据如网络稳定性这样的因素考量,每个区域的最优路由器数量各有不同,但一般建议每个区域应有不多于50台路由器。

OSPF的设计限制🛴

✨在OSPF路由域中配置多个区域或AS时,OSPF有特殊的限制,如图3-3所示。如果工程师配置了多于一个区域,即多区域OSPF,区域中必须有一个是区域0。该区域被称为骨干区域。工程师在设计网络或从一个区域开始部署时,最好从核心层开始,核心层将成为怄域0,然后可以扩展到其他区域。在这里插入图片描述
✨骨干必须在所有其他区域的中心,其他区域必须连接到骨干。主要原因是OSPF希望所有区域都将路由信息注人到骨干区域,再由骨干把信息分布到其他区域。
✨骨干区域的另一个重要要求是它必须是连续的。话句话说,不允许分割区域0。
✨然而,有时无法满足这两个条件。

OSPF消息类型🚎

✨OSPF使用5种类型的路由协议包,共享通用的协议头部。每个OSPF包被直接封装在IP头部中。OSPF的IP协议号是89。

  • 类型1: Hello 包。Hello 包负责发现、构建并维持OSPF邻居邻接关系。为了建立邻接关系,链路两端的OSPF对等体必须针对Hello包中携带的一些参数达成一致,之后才能成为OSPF邻居。
  • 类型2: DBD (数据库描述)包。在OSPF邻居邻接关系建立后,DBD包负责描 述LSDB,使得路由器之间可以对比数据库是否同步。
  • 类型3: LSR (链路状态请求)包。该LSR数据包在数据库同步过程中使用。路由器会发送LSR,请求其OSPF邻居发送缺失LSA的最新版本。
  • 类型4: LSU ( 链路状态更新)包。LSU数据包包括几种类型的LSA。LSU包负 责泛洪LSA,以及发送对LSR包的LSA响应。LSA响应只会发给之前以LSR包形式请求LSA的直连邻居。进行泛洪时,邻居路由器负责把收到的LSA信息重新封装在新的LSU包中。
  • 类型5: LSAck (链路状态确认)包。LSAck 负责进行可靠的LSA泛洪。路由器 必须明确确认每个收到的LSA,可以用一个LSAck包确认多个LSA。

OSPF路由协议概述🏎️

✨当网络发生故障时,路由协议应尽快检测故障并找出网络中的另–条路径。链路状态协议支持快速收敛。链路状态协议还可以充分扩展来支持多供应商环境。这就是链路状态协议广泛应用于企业和服务提供商环境的原因。
✨与传统的距离矢量路由协议相比,链路状态协议具有以下优势。

  • 更易扩展:链路状态协议使用分层设计,如果设计正确,就能够扩展到规模非常大的网络。
  • 每台路由器都有完整的拓扑图:由于每台路由器都包含网络中所有路由器和链路的完整信息,所以每台路由器可以单独选择无环路的有效路径(根据成本而定),从而到达网络的每个邻层。
  • 拓扑发生变化时发送更新,并定期重新泛洪:链路状态协议发送拓扑变化的更新。通过使用触发更新,可以保留带宽。此外,可以定期进行更新。
  • 能够快速响应拓扑变化:链路状态协议与邻接路由器建立邻居关系。它会快速检测邻居的故障,然后通过使用触发更新将故障信息传递到网络中的所有路由器。及时报告通常会加快收敛速度。
  • 路由器之间可以传递更多信息:运行链路状态协议的路由器在网络中使用一个通用视图。这意味着每台路由器都有关于其他路由器和路由器链路的完整信息,包括每个路的度量。

与传统的距离矢量协议相比,链路状态协议具有以下又是

  • 更高的内存使用率:链路状态协议保存网络中所有端点的图,这就需要内存来将此信息保存在RAM中。
  • 更高的CPU使用率:尽管链路状态协议反应迅速,但还需要更多的计算来转发数据库。因为链路状态协议维护所有节点的数据库,所以路由更改需要重新计算LSDB。
  • 复杂性:链路状态协议需要更为广泛的配置。

OSPF协议数据结构🎶

运行链路状态路由协议的路由器必须首先识别其他路由器,并与其相邻的路由器
建立邻居邻接关系。通过与相邻路由器交换hello数据包,路由器即可建立邻居邻接关系。然后将邻居路由器放人邻居数据库。如图4-1 所示,路由器A识别出路由器B和D为邻居。图4-1还表示中转网络。中转网络是一个术语(不专属于OSPF),表示网络中有不止一台路由器,而且很可能有流量用作从来源到目标的中间路径。中转网络的反义词是末节网络。末节网络只有一台路由器、一个目标。在这里插入图片描述
✨路由器之间建立邻居关系之后,就会通过可靠地交换LSA来同步其LSDB。LSA
说明某个路由器和与该路由器连接的网络。交换LSA来构建数据库的过程如图4-1所示。LSA存储在LSDB (拓扑数据库)中。通过交换所有LSA,路由器可以获取网络的完整拓扑。该区域中的每台路由器都应具有该区域的相同拓扑数据库。
✨建立LSDB之后,每台路由器对拓扑图应用最短路径优先(SPF) 算法。SPF算法
使用Dijkstra计算( 由荷兰计算机科学家于1956年开发)。SPF算法构建一个树,其中树根代表路由器自身,叶子代表远程网络。路由器自身位于树根位置,并根据到达目标所需的累积成本来计算到达每个目标的最短路径。
✨到达目标网络选择的最佳路径要放人路由表中的候选路径。这包括一个目标网络,以及到达该网络的下一跳IP地址。
✨图4-1中路由器A.上的路由表表明,数据包应发送到路由器才能到达网络X。
✨每当拓扑发生变化,都会创建新的LSA并发送到整个网络。所有路由器在收到新的LSA时会更改其LSDB,并对更新的LSDB运行SPF算法来验证到达目标的新路径。

了解OSPF中的度量🚀

在这里插入图片描述
✨计算OSPF成本的公式是:成本=参考带宽/接口带宽(以位/秒为单位)。默
认参考带宽为108,也就是10000000bit/s,或者说等于快速以太网的带宽。因此,10Mbit/s以太网链路的默认成本为108/ 107= 10,而T1链路的成本为108/ 108= 1。OSPF的参考带宽基于快速以太网(100Mbit/s) 的速度。速度较高的链路成本为1,因为OSPF成本用整数表示(没有小数部分)。在这种情况下,需要手动更改该接口的OSPF成本或将参考带宽调整为更高的值。示例4-1显示如何将参考带宽设置为1 Gbit(1000 Mbit/s)。在这里插入图片描述
✨在示例4-1的情况下,由于路由器全局设置为将参考带宽调整为1000(Mbit/s),
所以1这个值是Gbit以太网速度。还可以在每个接口上设置该值。示例4-2将快速以太网接口的接口成本增加到10,这就相当于10 Mbit以太网。在这里插入图片描述
✨路由器到达远程网络的成本是路由器到该网络的路径上所有链路的累积成本。在图4-2中,路由器A通过路由器B到达网络X的成本是30(10+20),通过路由器D的成本是20 (10+ 10)。通过路由器D的路径更好,因为它的成本更低。

建立OSPF邻居邻接关系🚤

✨在共享信息之前,邻居OSPF路由器必须在网络.上互相识别,因为OSPF路由取决于两台路由器之间链路的状态。此过程利用Hello协议来完成。Hello协议使用hello数据包(见图4-3)通过确保邻居间的双向通信来建立和维护邻居关系。如果路由器发现自己被列在hello数据包的“邻居”字段中,则表明已经建立了双向通信。在图4-3中,用*标记的参数必须与所发生的邻接关系匹配。
✨加人OSPF的每个接口都使用多播地址224.0.0.5定期发送Hello数据包。hello 数据包包含以下信息。在这里插入图片描述
✨加人OSPF的每个接口都使用多播地址224.0.0.5定期发送Hello数据包。hello 数据包包含以下信息。

  • 网络掩码:这是运行接口OSPF的子网掩码。
  • 路由器ID:路由器ID是唯–标识路由器的32位数字。首次启动路由器或重OSPF的任何时间都会设置路由器ID。OSPF按照以下顺序选择路由器ID。
  • 将可选的router-id命令输人OSPF配置模式。
  • 如果尚未配置router-id命令,则使用超过所有回路接口的最高IP地址。
  • 如果都没有配置,则使用已配置物理接口的最高IP地址。
  • Hello和空载间隔:hello间隔指定路由器发送hello数据包的频率(以秒为单位)。多路访问网络上的默认hello间隔为10秒。空载间隔是路由器等待从邻居接收消息,然后再声明邻居路由器停止运行的时间(以秒为单位)。默认情况下,空载间隔是hello间隔的4倍。邻居路由器上的这些计时器必须相同,否则将无法建立邻接。
  • Neighbors : Neighbors 字段列出了已建立双向通信邻接路由器。如果路由器发现自已被列在邻居发来的hello数据包的Neighbors字段中,则表明已经建立了双向通信。
  • 区域ID:要进行通信,两台路由器必须共享一个相同网段,而且它们的接口必须属于该网段的同一个OSPF区域。邻居也必须共享相同的子网和掩码。这些路由器都将拥有该区域中的相同链路状态信息。
  • 路由器优先级:路由器优先级是-一个8位数字,该数字代表路由器的优先级。OSPF使用优先级选择指定路由器(DR) 和备份指定路由器(BDR)。 在某些类型的网络中,OSPF选择DR和BDR。DR充当在子网上分发路由信息的中心点。这样可以减少路由器之间的流量。
  • DR和BDRIP地址:如果已知,那么这些是特定网络的DR和BDR的IP地址。
  • 身份验证数据:如果启用了路由器身份验证,则两台路由器必须交换相同的身份验证数据。身份验证并非是必需的,但如果启用了身份验证,那么所有邻接路由器都必须配置有相同的密钥。
  • Options : Options字段是表示区域是正常区域(1), 还是末节区域(0) 的一个位元。

构建链路状态数据库🛳️

  • 构建和同步化LSDB时使用的4个数据包类型如图4-4所示,在这里插入图片描述
  • DBD (数据库描述符)数据包: DBD数据包用于概要描述每个邻居的网络路由。DBD包括出现于路由器的LSDB中的LSA条目报头相关信息。每个LSA条目报头包括关于链路状态类型、通告路由器的地址、链路成本以及序列号的信息。路由器使用序列号来确定接收到的链路状态信息的更新程度。
  • LSR (链路状态请求)数据包:在DBD数据包交换后,路由器使用LSR数据包请求所缺少的信息。路由器将收到的信息与已有信息进行比较。如果收到的DBD数据包有最新的链路状态条目,路由器会向另一个路由器发送LSR数据包来请求更新的链路状态条目。
  • LSU(链路状态更新)数据包:所有缺失的信息通过发送LSU数据包来发送到邻居,LSU数据包包含不同的LSA。
  • LSAck(链路状态确认)数据包:通过确认每个数据包来确保信息的可靠传输和交换。

OSFP区域结构🦼

🕛本节介绍OSPF主干和非主干(普通)区域的双层层次结构,以及多区域OSPF术语。
🕘在小型网络中,路由器链路的网络不是很复杂,而且到达各个目标的路径也能轻松确定。但是在大型网络中,网络高度复杂,而且到达每个目标的可能路径数目很庞大。因此,比较所有可能路由的Dijkstra计算方法非常复杂,并且可能要花大量时间才能完成。
🕒如果链路状态路由协议具有良好的网络设计,可以通过将网络划分为若干区域来减少Djkstra计算的规模。一个区域中的路由器数量和该区域中泛洪的LSA数量较小, 这意味着一个区域的链路状态或拓扑数据库比较小。因此,Dijkstra 计算更简单、花费时间更少。区域内的路由器维护关于链路的详细信息,以及其他区域中关于路由器和链路的一-般或汇总信息。但是,默认情况下并不执行汇总,必须对此进行配置。使用多区域OSPF设计的另一个优点是,某个区域中的拓扑更改只会导致在该区域内进行LSA泛洪。因而只会在发生拓扑变化的区域内重新计算SPF。

OSPF数据包格式🚚

🕥每个OSPF数据包都具有OSPF数据包头部,长度为24字节。OSPF数据包头和数据被封装到IP数据包中,在该IP数据包包头中,协议字段被设为89, TTL值被设置为1,目的地址则被设为以下两个组播地址之一-: 224.0.0.5 或224.0.0.6。如果OSPF数据包被封装在以太网帧内,则目的MAC地址也是组播地址: 01-00-5E-00-00-05 或01-00-5E-00-00-06。OSPF数据包包头的格式如图4-2所示,各字段含义如下所述。在这里插入图片描述

  • 版本:OSPF的版本号。
  • 类型:OSPF数据包类型。
  • 数据包长度:OSPF数据包的长度,包括数据包头部的长度,单位为字节。
  • 路由器ID:始发路由器的ID。
  • 区域ID:始发数据包的路由器所在区域。
  • 校验和:对整个数据包的校验和。
  • 身份验证类型:验证类型有3种,其中,0表示不验证;1表示简单口令验证;2表示MD5验证。
  • 身份验证:数据包验证的必要信息,如果验证类型为0,将不检查该字段;如果验证类型为1,则该子段包含的是一个最长为64位的口令;如果验证类型为2,则该字段包含一个KeyID、验证数据的长度和一一个不会减小的加密序列号(用来防止重放“replay" 攻击)。这个摘要消息附加在OSPF报文的尾部,不作为OSPF报文本身的一部分。

✨✨✨OSPF数据包包括以下5种类型,每种数据包在OSPF路由过程中发挥各自的作用。

-(1)Hello
✨✨Hello用于建立和维持OSPF邻接关系。Hello 数据包格式如图4-3所示,除了OSPF包头,各字段的含义如下所述。在这里插入图片描述

  • 网络掩码:与发送方接口关联的子网掩码。
  • Hello间隔:连续两次发送Hello数据包之间的时间间隔,单位为秒。
  • 路由器优先级:用于DR/BDR选举,8比特,范围为0~255。
  • 路由器Dead间隔:宣告邻居路由器无效之前等待的最长时间。
  • 指定路由器(DR):DR的路由器接口IP地址,如果没有,该字段为0.0.0.0。
  • 邻居列表:列出相邻路由器的OSPF路由器ID。 (2)DBD(Database Description,数据库描述) 🕞🕞DBD包含发送方路由器的链路状态数据库的摘要(LSA 头部信息),接收方路由器使用本数据包与其本地链路状态数据库对比,以便检查链路状态数据库是否同步。DBD数据包格式如图4-4所示,除了包头,各字段含义如下所述。在这里插入图片描述
  • 接口MTU:在数据包不分段的情况下,路由器接口能发送的最大IP数据包的大小。
  • I:初始位, 发送的第一个DBD包I位置1,后续的DBD包I位置0。
  • M:后继位,最后一个DBD包,M位置为0,其他M位置wei1。
  • MS:主从位,用于协商主/从路由器,置1表示主路由器,置0表示从路由器。
  • DD序列号:在数据库同步过程中,用来确保路由器收到完整的DBD数据包,该序列号由主路由器在发送第一个DBD时设置,后继数据包的序列号将依次增加。 6.LSA头部:LSA头部包含的信息可以唯一地标识一个LSA,其格式如图4-5所示。在这里插入图片描述
  • 老化时间:发送LSA后经历的时间,单位为秒。
  • 类型: LSA的类型。
  • 链路状态ID:标识LSA,LSA类型不同标识方法也不同。
  • 通告路由器:始发LSA通告的路由器ID。
  • 序列号:每当LSA被更新时都加1,可以帮助识别最新的LSA。
  • 校验和:除了老化时间之外的LSA全部信息的校验和。
  • 长度: LSA头部和LSA数据的总长度。

(3)LSR ( Link-State Request,链路状态请求)
✨✨在LSDB同步过程中,路由器收到DBD包后,会查看自己的LSDB中不包括哪些LSA,或者哪些LSA比自己的更新,然后把这些LSA记录在链路状态请求列表中,接着通过发送LSR数据包来请求DBD中任何LSA条目的详细信息。LSR数据包格式如图4-6所示,除了包头,各字段的含义如下所述。在这里插入图片描述

  1. 链路状态类型: LSA 的类型。
  2. 链路状态ID:标识LSA, LSA类型不同标识方法也不同。
  3. 通告路由器:始发LSA通告的路由器ID。 (4)LSU ( Link-State Update,链路状态更新) ✨✨LSU用于回复LSR或通告新的更新。LSU数据包格式如图4-7所示,除了包头,各字段的含义如下所述。
  4. LSA的数目:更新包中包含LSA的数量。
  5. LSAs:一个更新包中可以携带多个LSA。在这里插入图片描述 (5)LSAck ( Link-State Acknowledgement,链路状态确认) ✨✨路由器收到LSU后,会发送一个LSAck数据包来确认接收到了LSU. LSAck数据包格式如图4-8所示。多个LSA可以通过单个LSAck来确认。在这里插入图片描述

总结⛴️

提示:这里对文章进行总结:

OSPF是目前应用最为广泛的链路状态路由协议,通过区域划分很好地实现了路由的分级管理。在大规模网络的情况下,OSPF可以通过划分区域来规划和限制网络规模。本文介绍了建立OSPF邻居关系🛵OSPF特性🛻OSPF操作概述🚙
OSPF的分层结构🛹OSPF的设计限制🛴OSPF消息类型🚎OSPF路由协议概述🏎️OSPF协议数据结构🎶了解OSPF中的度量🚀建立OSPF邻居邻接关系🚤
构建链路状态数据库🛳️OSFP区域结构🦼OSPF数据包格式登内容。


本文转载自: https://blog.csdn.net/m0_61703913/article/details/124171936
版权归原作者 牧鸯人 所有, 如有侵权,请联系我们删除。

“OSPF(Open Shortest Path First,开放最短链路优先)”的评论:

还没有评论