科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道多播静态路由引起的循环问题的解决 (1)

多播静态路由引起的循环问题的解决 (1)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

有源树是以多播源作为有源树的根,有源树的分支形成通过网络到达接收主机的分布树,因为有源树以最短的路径贯穿网络,所以也常称为最短路径树(SPT)。

作者:赛迪网 来源:赛迪网 2007年9月28日

关键字: 路由器 汇合点 视音频 静态路由 ip多播

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

 

三、IP多播路由及其协议

1.IP多播路由的基本类型

多播路由的一种常见的思路就是在多播组成员之间构造一棵扩展分布树。在一个特定的“发送源,目的组”对上的IP多播流量都是通过这个扩展树从发送源传输到接受者的,这个扩展树连接了该多播组中所有主机。不同的IP多播路由协议使用不同的技术来构造这些多播扩展树,一旦这个树构造完成,所有的多播流量都将通过它来传播。

根据网络中多播组成员的分布,总的说来IP多播路由协议可以分为以下两种基本类型。第一种假设多播组成员密集地分布在网络中,也就是说,网络大多数的子网都至少包含一个多播组成员,而且网络带宽足够大,这种被称作“密集模式”(Dense-Mode)的多播路由协议依赖于广播技术来将数据“推”向网络中所有的路由器。密集模式路由协议包括距离向量多播路由协议(DVMRP:Distance Vector Multicast Routing Protocol)、多播开放最短路径优先协议(MOSPF:Multicast Open Shortest Path First)和密集模式独立多播协议(PIM-DM:Protocol-Independent Multicast-Dense Mode)等。

多播路由的第二种类型则假设多播组成员在网络中是稀疏分散的,并且网络不能提供足够的传输带宽,比如Internet上通过ISDN线路连接分散在许多不同地区的大量用户。在这种情况下,广播就会浪费许多不必要的网络带宽从而可能导致严重的网络性能问题。于是稀疏模式多播路由协议必须依赖于具有路由选择能力的技术来建立和维持多播树。稀疏模式主要有基于核心树的多播协议(CBT:Core Based Tree)和稀疏模式独立协议多播(PIM-SM:Protocol-Independent Multicast-Sparse Mode)。

2.密集模式协议

(1)距离向量多播路由协议 (DVMRP)

第一个支持多播功能的路由协议就是距离向量多播路由协议。它已经被广泛地应用在多播骨干网MBONE上。

DVMRP为每个发送源和目的主机组构建不同的分布树。每个分布树都是一个以多播发送源作为根,以多播接受目的主机作为叶的最小扩展分布树。这个分布树为发送源和组中每个多播接受者之间提供了一个最短路径,这个以“跳数”为单位的最短路径就是DVMRP的量度。当一个发送源要向多播组中发送消息时,一个扩展分布树就根据这个请求而建立,并且使用“广播和修剪”的技术来维持这个扩展分布树。

扩展分布树构建过程中的选择性发送多播包的具体运作是:当一个路由器接收到一个多播包,它先检查它的单播路由表来查找到多播组发送源的最短路径的接口,如果这个接口就是这个多播包到达的接口,那么路由器就将这个多播组信息记录到它的内部路由表(指明该组数据包应该发送的接口),并且将这个多播包向除了接受到该数据包的路由器以外的其他临近路由器继续发送。如果这个多播包的到达接口不是该路由器到发送源的最短路径的接口,那么这个包就被丢弃。这种机制被称为“反向路径广播”(Reverse-Path Broadcasting)机制,保证了构建的树中不会出现环,而且从发送源到所有接受者都是最短路径。。

对子网中密集分布的多播组来说DVMRP能够很好的运作,但是对于在范围比较大的区域上分散分布的多播组来说,周期性的广播行为会导致严重的性能问题。DVMRP不能支持大型网络中稀疏分散的多播组。

(2)多播开放最短路径优先 (MOSPF)

开放最短路径优先(OSPF)是一个单播路由协议,它将数据包在最小开销路径上进行路由传送,这里的开销是表示链路状态的一种量度。除了路径中的跳数以外,其他能够影响路径开销的网络性能参数还有负载平衡信息、应用程序需要的QoS等。

MOSPF是为单播路由多播使用设计的。MOSPF依赖于OSPF作为单播路由协议,就象DVMRP也包含它自己的单播协议一样。在一个OSPF/MOSPF网络中每个路由器都维持一个最新的全网络拓扑结构图。这个“链路状态”信息被用来构建多播分布树。

每个MOSPF路由器都通过IGMP协议周期性的收集多播组成员关系信息。这些信息和这些链路状态信息被发送到其路由域中的所有其他路由器。路由器将根据它们从临近路由器接收到的这些信息更新他们的内部连接状态信息。由于每个路由器都清楚整个网络的拓扑结构,就能够独立的计算出一个最小开销扩展树,将多播发送源和多播组成员分别作为树的根和叶。这个树就是用来将多播流从发送源发送到多播组成员的路径。

(3)独立多播密集模式协议(PIM-DM)

独立多播协议(PIM)是一种标准的多播路由协议,并能够在Internet上提供可扩展的域间多播路由而不依赖于任何单播协议。PIM有两种运行模式,一种是密集分布多播组模式,另一个是稀疏分布多播组模式,前者被称为独立多播密集模式协议(PIM-DM),后者被称为独立多播稀疏模式协议(PIM-SM)。

PIM-DM有点类似于DVMRP,这两个协议都使用了反向路径多播机制来构建分布树。它们之间的主要不同在于PIM完全不依赖于网络中的单播路由协议而DVMRP依赖于某个相关的单播路由协议机制,并且PIM-DM比DVMRP简单。

PIM-DM协议和所有的密集模式路由协议一样也是数据驱动的。但是既然PIM-DM不依赖于任何单播路由协议,路由器某个接收端口(就是返回到源的最短路径的端口)接收到的多播数据包被发送到所有下行接口直到不需要的分枝从树中被修剪掉。DVMRP在树构建阶段能够使用单播协议提供的拓扑数据有选择性的向下行发送数据包,PIM-DM则更加倾向于简单性和独立性,甚至不惜增加数据包复制引起的额外开销。

3.稀疏模式多播路由协议

当多播组在网络中集中分布或者网络提供足够大带宽的情况下,密集模式多播路由协议是一个有效的方法,当多播组成员在广泛区域内稀疏分布时,就需要另一种方法即稀疏模式多播路由协议将多播流量控制在连接到多播组成员的链路路径上,而不会“泄漏”到不相关的链路路径上,这样既保证了数据传输的安全,又能够有效的控制网络中的总流量和路由器的负载。

(1)基于核心树的多播协议 (CBT)

和DVMRP和MOSPF为每个“发送源、目的组”对构建最短路径树不同的是,CBT协议只构建一个树给组中所有成员共享,这个树也就被称为共享树。整个多播组的多播通信量都在这个共享树上进行收发而不论发送源有多少或者在什么位置。这种共享树的使用能够极大的减少路由器中的多播状态信息。

CBT共享树有一个核心路由器用来构建这个树。要加入的路由器发送加入请求给这个核心路由器。核心路由器接收到加入请求后,沿反路径返回一个确认,这样就构成了树的一个分枝。加入请求数据包在被确认之前不需要一直被传送到核心路由器。如果加入请求包在到达核心路由器之前先到达树上的某个路由器,该路由器就接收下这个请求包而不继续向前发送并确认这个请求包。发送请求的路由器就连接到共享树上了。 CBT将多播流量集中在最少数量的链路而不是在一个基于发送源的共享树上。集中在核心路由器上的流量可能会引起多播路由的某些问题。某些版本的CBT支持多个多播核心的使用,和单个多播核心相比多核心更能达到负载平衡。

(2)独立多播稀疏模式协议 (PIM-SM)

和CBT相似,PIM-SM被设计成将多播限制在需要收发的路由器上。PIM-SM围绕一个被称为集中点(RP:Rendezvous Point)的路由器构建多播分布树。这个集中点扮演着和CBT核心路由器相同的角色,接收者在集中点能查找到新的发送源。但是PIM-SM比CBT更灵活,CBT的树通常是多播组共享树,PIM-SM中的独立的接收者可以选择是构建组共享树还是最短路径树。

PIM-SM协议最初先为多播组构建一个组共享树。这个树由连接到集中点的发送者和接收者共同构建,就像CBT协议围绕着核心路由器构建的共享树一样。这共享树建立以后,一个接受者(实际上是最接近这个接收者的路由器)可以选择通过最短路径树改变到发送源的连接。这个操作的过程是通过向发送源发送一个PIM加入请求完成的。一旦从发送源到接收者的最短路径建立了,通过RP的外部分枝就被修剪掉了。

四、IP多播路由中的隧道传输机制

多播中的隧道概念指将多播包再封装成一个IP数据包在不支持多播的互联网络中路由传输。最有名的多播隧道的例子就是MBONE(采用DVMRP协议)。在隧道的入口处进行数据包的封装,在隧道的出口处则进行拆封。在达到本地全IP多播配置传输机制上,隧道机制非常有用。

五、IP多播技术的应用

IP多播应用大致可以分为三类: 点对多点应用,多点对点应用和多点对多点应用。

1.点对多点应用

点对多点应用是指一个发送者,多个接收者的应用形式,这是最常见的多播应用形式。典型的应用包括:媒体广播、媒体推送、信息缓存、事件通知和状态监视。

媒体广播:如演讲、演示、会议等按日程进行的事件。其传统媒体分发手段通常采用电视和广播。这一类应用通常需要一个或多个恒定速率的数据流,当采用多个数据流(如语音和视频)时,往往它们之间需要同步,并且相互之间有不同的优先级。它们往往要求较高的带宽、较小的延时抖动,但是对绝对延时的要求不是很高。

媒体推送:如新闻标题、天气变化、运动比分等一些非商业关键性的动态变化的信息。它们要求的带宽较低、对延时也没有什么要求。

信息缓存:如网站信息、执行代码和其他基于文件的分布式复制或缓存更新。它们对带宽的要求一般,对延时的要求也一般。

事件通知:如网络时间、组播会话日程、随机数字、密钥、配置更新、有效范围的网络警报或其他有用信息。它们对带宽的需求有所不同,但是一般都比较低,对延时的要求也一般。

状态监视:如股票价格、传感设备、安全系统、生产信息或其他实时信息。这类带宽要求根据采样周期和精度有所不同,可能会有恒定速率带宽或突发带宽要求,通常对带宽和延时的要求一般。

2.多点对点的应用

多点对点应用是指多个发送者,一个接收者的应用形式。通常是双向请求响应应用,任何一端(多点或点)都有可能发起请求。典型应用包括:资源查找、数据收集、网络竞拍、信息询问和Juke Box

资源查找:如服务定位,它要求的带宽较低,对时延的要求一般。

数据收集: 它是点对多点应用中状态监视应用的反向过程。它可能由多个传感设备把数据发回给一个数据收集主机。带宽要求根据采样周期和精度有所不同,可能会有恒定速率带宽或突发带宽要求,通常这类应用对带宽和延时的要求一般。

网络竞拍:拍卖者拍卖产品,而多个竞拍者把标价发回给拍卖者。

信息询问:询问者发送一个询问,所有被询问者返回应答。通常这对带宽的要求较低,对延时不太敏感。

Juke Box:如支持准点播(Near-On-Demand)的音视频倒放。通常接收者采用“带外的”协议机制(如HTTP、RTSP、SMTP,也可以采用组播方式)发送倒放请求给一个调度队列。它对带宽的要求较高,对延时的要求一般。

3.多点对多点的应用

多点对多点应用是指多个发送者和多个接收者的应用形式。通常,每个接收者可以接收多个发送者发送的数据,同时,每个发送者可以把数据发送给多个接收者。典型应用包括:多点会议、资源同步、并行处理、协同处理、远程学习、讨论组、分布式交互模拟(DIS)、多人游戏和Jam Session等。

多点会议: 通常音/视频和文本应用构成多点会议应用。在多点会议中,不同的数据流拥有不同的优先级。传统的多点会议采用专门的多点控制单元来协调和分配它们,采用多播可以直接由任何一个发送者向所有接收者发送,多点控制单元用来控制当前发言权。这类应用对带宽和延时要求都比较高。

资源同步:如日程、目录、信息等分布数据库的同步。它们对带宽和延时的要求一般。

并行处理:如分布式并行处理。它对带宽和延时的要求都比较高。

协同处理:如共享文档的编辑。它对带宽和延时的要求一般。

远程学习:这实际上是媒体广播应用加上对上行数据流(允许学生向老师提问)的支持。它对带宽和延时的要求一般。

讨论组:类似于基于文本的多点会议,还可以提供一些模拟的表达。

分布式交互模拟(DIS):它对带宽和时延的要求较高。

多人游戏: 多人游戏是一种带讨论组能力的简单分布式交互模拟。它对带宽和时延的要求都比较高。

Jam Session:这是一种音频编码共享应用。它对带宽和时延的要求都比较高。

IP多播带入了许多新的应用并减少了网络的拥塞和服务器的负担。目前IP多播的应用范围还不够大,但它能够降低占用带宽,减轻服务器负荷,并能改善传送数据的质量,尤其适用于需要大量带宽的多媒体应用,如音频、视频等。这项新技术已成为当前网络界的热门话题,并将从根本上改变网络的体系结构。

 

下面介绍一个多播静态路由引起的循环解决方法:

一、问题:

在r3和r1之间使用了GRE通道,所有的路由器接口配置为sparse-mode,R4 ip为(1.1.4.4)但R1无法ping通多播源。

二、示意图如下:

multicast source -----R5------R3-------R223----R1--e0 
............................................| 
............................................| 
............................................R4 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

三、原配置如下:

R1#mtrace 1.1.15.1 150.100.2.1 239.255.8.8 
Type escape sequence to abort. 
Mtrace from 1.1.15.1 to 150.100.2.1 via group 239.255.8.8 
From source (?) to destination (?) 
Querying full reverse path... 
0 150.100.2.1 
-1 1.1.12.5 PIM [default] 
-2 1.1.12.3 PIM [default] 
-3 1.1.16.4 PIM Reached RP/Core [1.1.15.0/24] 
-4 1.1.16.3 PIM [default] 
-5 1.1.16.4 PIM Reached RP/Core [1.1.15.0/24] 
-6 1.1.16.3 PIM [default] 
-7 1.1.16.4 PIM Reached RP/Core [1.1.15.0/24] 
-8 1.1.16.3 PIM [default] 
-9 1.1.16.4 PIM Reached RP/Core [1.1.15.0/24] 
-10 1.1.16.3 PIM [default] 
-11 1.1.16.4 PIM Reached RP/Core [1.1.15.0/24] 
-12 1.1.16.3 PIM [default] 
-13 1.1.16.4 PIM Reached RP/Core [1.1.15.0/24] 
-14 1.1.16.3 PIM [default] 
-15 1.1.16.4 PIM Reached RP/Core [1.1.15.0/24] 
-16 1.1.16.3 PIM [default] 
-17 1.1.16.4 PIM Reached RP/Core [1.1.15.0/24] 
-18 1.1.16.3 PIM [default] 
-19 1.1.16.4 PIM Reached RP/Core [1.1.15.0/24] 
-20 1.1.16.3 PIM [default] 
-21 1.1.16.4 PIM Reached RP/Core [1.1.15.0/24] 
-22 1.1.16.3 PIM [default] 
-23 1.1.16.4 PIM Reached RP/Core [1.1.15.0/24] 
-24 1.1.16.3 PIM [default] 
-25 1.1.16.4 PIM Reached RP/Core [1.1.15.0/24] 
-26 1.1.16.3 PIM [default] 
-27 1.1.16.4 PIM Reached RP/Core [1.1.15.0/24] 
-28 1.1.16.3 PIM [default] 
-29 1.1.16.4 PIM Reached RP/Core [1.1.15.0/24] 
-30 1.1.16.3 PIM [default] 
-31 1.1.16.4 PIM Reached RP/Core [1.1.15.0/24] 
-32 1.1.16.3 PIM [default] 
R1# 
04:55:18: MRT: Update (*, 224.0.1.40), RPF Null, PC 0x354F1F4 
R1#sh run 
Building configuration... 

Current configuration : 1546 bytes 
! 
version 12.1 
no service single-slot-reload-enable 
service timestamps debug uptime 
service timestamps log uptime 
no service password-encryption 
! 
hostname R1 
! 
logging rate-limit console 10 except errors 
! 
ip subnet-zero 
no ip finger 
no ip domain-lookup 
! 
ip multicast-routing 
cns event-service server 
! 
! 
! 
interface Loopback0 
ip address 1.1.1.1 255.255.255.0 
ip ospf network point-to-point 
! 
interface Tunnel0 
ip address 1.1.103.1 255.255.255.252 
ip pim sparse-mode 
tunnel source Loopback0 
tunnel destination 1.1.3.3 
! 
interface Ethernet0 
ip address 1.1.15.1 255.255.255.0 
ip pim sparse-mode 
! 
interface Ethernet1 
ip address 1.1.11.1 255.255.255.0 
! 
interface Serial0 
no ip address 
encapsulation frame-relay 
no frame-relay inverse-arp 
frame-relay lmi-type cisco<BR>! 
interface Serial0.1 point-to-point 
ip address 1.1.8.1 255.255.255.252 
frame-relay interface-dlci 106 
! 
interface Serial1 
no ip address 
shutdown 
! 
router ospf 64 
router-id 1.1.1.1 
log-adjacency-changes 
area 0 authentication message-digest 
area 11 virtual-link 1.1.3.3 message-digest-key 1 md5 cisco 
passive-interface Tunnel0 
network 1.1.1.1 0.0.0.0 area 11 
network 1.1.8.1 0.0.0.0 area 11 
network 1.1.11.1 0.0.0.0 area 11 
network 1.1.15.1 0.0.0.0 area 10 
! 
ip kerberos source-interface any 
ip classless 
no ip http server 
ip pim rp-address 1.1.4.4 
ip mroute 150.100.2.0 255.255.255.0 Tunnel0 
ip mroute 1.1.4.4 255.255.255.255 Tunnel0 
! 
! 
! 

line con 0 
privilege level 15 
logging synchronous 
transport input none 
line aux 0 
line vty 0 4 
login 
! 
end 

``````````````````````````````````````````````````````````````` 
R1#sh ip pim interface 

Address Interface Ver/ Nbr Query DR DR 
Mode Count Intvl Prior 
1.1.15.1 Ethernet0 v2/S 0 30 1 1.1.15.1 
1.1.103.1 Tunnel0 v2/S 1 30 1 0.0.0.0 
R1#sh ip pim nei 
PIM Neighbor Table 
Neighbor Interface Uptime/Expires Ver DR 
Address Priority/Mode 
1.1.103.2 Tunnel0 00:38:46/00:01:29 v2 1 / S 

``````````````````````````````````````````````````````````````` 

R3#sh ip pim interface 

Address Interface Ver/ Nbr Query DR DR 
Mode Count Intvl Prior 
1.1.16.3 Serial0/0 v2/S 1 30 1 1.1.16.4 
1.1.12.3 Serial0/1.1 v2/S 1 30 1 1.1.12.5 
1.1.103.2 Tunnel0 v2/S 1 30 1 0.0.0.0 
R3#sh ip pim nei 
R3#sh ip pim neighbor 
PIM Neighbor Table 
Neighbor Interface Uptime/Expires Ver DR 
Address Prio/Mode 
1.1.16.4 Serial0/0 04:21:08/00:01:26 v2 1 / DR S 
1.1.12.5 Serial0/1.1 04:20:55/00:01:37 v2 1 / DR S 
1.1.103.1 Tunnel0 00:40:26/00:01:20 v2 1 / S 
R3# 
R3#sh run 
Building configuration... 

Current configuration : 3174 bytes 
! 
! Last configuration change at 19:40:44 mgt Sun Feb 28 1993 
! 
version 12.2 
service timestamps debug datetime msec 
service timestamps log datetime msec 
no service password-encryption 
! 
hostname R3 
! 
! 
username R5 password 0 cisco 
clock timezone mgt -8 
ip subnet-zero 
! 
! 
no ip domain lookup 

ip multicast-routing 
! 
isdn switch-type basic-net3 
! 
! 
voice call carrier capacity active 
! 
! 
! 
! 
! 
! 
! 
! 
! 
mta receive maximum-recipients 0 
! 
! 
! 
! 
interface Loopback0 
ip address 1.1.3.3 255.255.255.0 
ip ospf network point-to-point 
! 
interface Tunnel0 
ip address 1.1.103.2 255.255.255.252 
ip pim sparse-mode 
tunnel source Loopback0 
tunnel destination 1.1.1.1 
! 
interface FastEthernet0/0 
ip address 1.1.9.3 255.255.255.0 
duplex auto 
speed auto 
standby use-bia 
standby ip 1.1.9.1 
standby priority 105 
standby preempt 
standby track Serial0/0 
! 
interface BRI0/0 
no ip address 
encapsulation ppp 
dialer pool-member 1 
isdn switch-type basic-net3 
! 
interface Serial0/0 
ip address 1.1.16.3 255.255.255.0 
ip pim sparse-mode 
encapsulation frame-relay 
ip ospf network point-to-point 
frame-relay map ip 1.1.16.4 314 broadcast 
no frame-relay inverse-arp 
frame-relay lmi-type cisco 
! 
interface FastEthernet0/1 
ip address 1.1.10.3 255.255.255.0 
duplex auto 
speed auto 
! 
interface Serial0/1 
no ip address 
encapsulation frame-relay 
no frame-relay inverse-arp 
! 
interface Serial0/1.1 multipoint 
ip address 1.1.12.3 255.255.255.248 
ip pim nbma-mode 
ip pim sparse-mode 
ip ospf message-digest-key 1 md5 cisco 
ip ospf hello-interval 5 
ip ospf priority 255 
frame-relay map ip 1.1.12.2 302 broadcast 
frame-relay map ip 1.1.12.5 305 broadcast 
! 
interface Dialer0 
ip address 1.1.32.34 255.255.255.252 
encapsulation ppp 
ip ospf demand-circuit 
load-interval 30 
dialer pool 1 
dialer string 34121735 
dialer load-threshold 51 outbound 
no peer neighbor-route 
no cdp enable 
ppp authentication chap 
ppp multilink 
! 
router ospf 64 
router-id 1.1.3.3 
log-adjacency-changes 
area 0 authentication message-digest 
area 2 virtual-link 1.1.4.4 message-digest-key 1 md5 cisco 
area 11 range 1.1.8.0 255.255.252.0 
area 11 virtual-link 1.1.1.1 message-digest-key 1 md5 cisco 
passive-interface Tunnel0 
network 1.1.3.3 0.0.0.0 area 11 
network 1.1.9.3 0.0.0.0 area 11 
network 1.1.10.3 0.0.0.0 area 11 
network 1.1.12.3 0.0.0.0 area 0 
network 1.1.16.3 0.0.0.0 area 2 
network 1.1.32.34 0.0.0.0 area 0 
neighbor 1.1.12.5 poll-interval 6 
neighbor 1.1.12.2 poll-interval 6 
! 
ip classless 
ip http server 
ip pim rp-address 1.1.4.4 
! 
! 
logging history debugging 
logging trap debugging 
dialer-list 1 protocol ip permit 
! 
call rsvp-sync 
! 
! 
mgcp profile default 
! 
dial-peer cor custom 
! 
! 
! 
! 
! 
line con 0 
privilege level 15 
logging synchronous 
line aux 0 
line vty 0 4 
login 
! 
ntp authentication-key 1 md5 070C285F4D06 7 
ntp authenticate 
ntp source Loopback0 
ntp master 2 
! 
end

四、解决步骤:

在R3上改动配置,相关方面的配置如下,就可实现目标:

inter t0 
ip unnumber lo0 
tunnel source lo0 
tunnel destination 1.1.1.1 
ip pim dense-mode 
exit 

ip mroute 1.1.15.0 255.255.255.0 t0

(stub 端)R1上面的相关配置如下:

inter t0 
ip unnumber lo0 
tunnel source lo0 
tunnel destination 1.1.3.3 
ip pim dense-mode 
exit 

inter e0 
ip addr 1.1.15.1 255.255.255.0 
ip pim dense-mode 
exit 

ip mroute 150.100.2.0 255.255.255.0 t0 
(或者使用ip mroute 0.0.0.0 0.0.0.0 t0)

在任何一个方向部署multicast source都可以建立树。

注:可以用dvmrp tunnel来和pim一起做来达到起到上述效果。(T004)

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章