1.08k likes | 1.3k Views
对等网络. Peer-to-Peer Networks ( P2P ). 1. 概述. 传统的因特网应用采用客户 - 服务器模式: 所有内容与服务在服务器上,客户向服务器请求内容或服务,客户自己的资源不共享。 这种集中式结构面临服务器负载过重、拒绝服务攻击、网络带宽限制等难以解决的问题。. 对等计算模型. 在对等网络中: 每个节点都有一些资源(处理能力、存储空间、网络带宽、内容等)可以提供给其它节点。 节点之间直接共享资源,不需要服务器参与。 所有节点地位相等(称对等方),具备客户和服务器双重特性。 可缓解集中式结构的问题,充分利用终端的丰富资源。.
E N D
对等网络 Peer-to-Peer Networks (P2P)
1. 概述 • 传统的因特网应用采用客户-服务器模式: • 所有内容与服务在服务器上,客户向服务器请求内容或服务,客户自己的资源不共享。 • 这种集中式结构面临服务器负载过重、拒绝服务攻击、网络带宽限制等难以解决的问题。
对等计算模型 • 在对等网络中: • 每个节点都有一些资源(处理能力、存储空间、网络带宽、内容等)可以提供给其它节点。 • 节点之间直接共享资源,不需要服务器参与。 • 所有节点地位相等(称对等方),具备客户和服务器双重特性。 • 可缓解集中式结构的问题,充分利用终端的丰富资源。
P2P技术的发展 • P2P技术的第一个应用是Napster文件共享系统(1999-2000),用户通过该系统交换音乐文件。 • 自1999年以来,P2P研究得到学术界和商业组织的广泛关注,同时该技术也一直饱受争议。 • P2P技术被广泛应用于计算机网络的各个应用领域,如文件共享、流媒体直播与点播、分布式科学计算、语音通信、在线游戏支撑平台等。 • 目前以文件共享为代表的P2P应用已成为因特网上增长最迅速的应用。
P2P技术的应用(1) • 提供文件或其它内容共享,如Napster、Gnutella、eDonkey、emule、BitTorrent等。 • BitTorrent是最流行的P2P文件共享系统之一: • 种子节点(保存完整的文件拷贝)把一个文件分成N个分片(默认为256KB)。 • 节点X从种子节点随机下载第L个分片,Y 随机下载第M个分片,然后节点X与Y 交换彼此拥有的分片。 • 减轻了种子节点的负担,提高了节点下载的速度与效率。
P2P技术的应用(2) • P2P媒体网: • P2P也非常适合流媒体直播与点播,因此P2P研究热点迅速转移到P2P的流媒体上。 • 目前P2P非常广泛的一个应用是网上实时电视,提供节目的成本很低,用户却可以得到较好的收视质量。 • 流行的软件包括Coolstreaming、AnySee、Gridmedia、PPLive和PPStream等。
P2P技术的应用(3) • 基于P2P方式的协同处理与服务共享平台: • P2P技术将众多终端空闲的CPU资源联合起来,服务于一个共同的计算。 • 计算任务(包括逻辑与数据等)划分成多个片,分配到参与计算的P2P节点上;计算结果返回给一个或多个服务器;众多结果整合得到最终结果。 • 最著名的P2P分布式科学计算系统为搜索外星文明的SETI@home科学实验。
P2P技术的应用(4) • 即时通信交流: • VoIP是一种全新的网络电话通信业务,Skype就是一款典型的P2P VoIP软件。 • Skype的出现给传统电信业带来强烈的冲击,截至2011年年底,Skype占有全球长途通话时长的33%。 • Skype仍在迅速向各个国家渗透。
P2P系统的定义 • P2P系统是一个由直接相连的节点所构成的分布式系统,这些节点能够为了共享内容、CPU时间、存储或者带宽等资源而自组织形成一定的网络拓扑结构,能够在适应节点数目的变化和失效的同时维持可以接受的连接能力和性能,并且不需要一个全局服务器或者权威的中介支持。
2. P2P网络的拓扑结构 • P2P系统的主要概念之一是分散,包括分布式存储、处理、信息共享和控制信息。 • 根据P2P系统的分散程度,可以将P2P架构分成纯分散式和混合式。 • 根据结构关系可以将P2P系统细分为四种拓扑形式: • 中心化拓扑 • 全分布式非结构化拓扑 • 全分布式结构化拓扑 • 半分布式拓扑
2.1 中心化拓扑 • 最早出现的P2P网络结构,也称集中目录式结构,或非纯粹的P2P结构。 • 优点: • 维护简单,资源发现效率高。 • 缺点: • 单点故障;扩放性差;版权问题。 • 对小型网络而言在管理和控制方面有一定优势,不适合大型网络应用。
Napster文件共享系统 • 中央索引服务器保存所有用户上传的音乐文件索引和存放位置。 • 用户需要某个音乐文件时,先查询中央索引服务器,得到存有该文件的节点信息。 • 用户选择合适的节点建立直接连接。 • Napster首先实现了文件查询与文件传输的分离。 Napster的拓扑结构
2.2 全分布式非结构化拓扑 • 也称纯P2P结构,取消了中央服务器,每台机器是真正的对等关系(称为对等机)。 • 每个用户随机接入网络,并与自己相邻的一组节点通过端-端连接构成一个逻辑覆盖网络。 • 对等节点之间的内容查询和内容共享均直接通过相邻节点广播接力传递。 • 每个节点记录搜索轨迹,防止产生搜索环路。 • Gnutella是应用最广泛的全分布式非结构化拓扑。
Gnutella早期的拓扑结构 • 要下载文件的计算机以文件名或关键字生成一个查询,发送给与它相连的所有计算机。 • 存在该文件的计算机与查询机器建立连接;否则继续向自己的邻居节点洪泛。 • 重复该过程,直至找到文件为止。 • 一般通过TTL值控制查询的深度。
全分布式非结构化拓扑的特点 • 将覆盖网络看成完全随机图,节点之间的链路没有遵循某些预先定义的拓扑来构建。 • 优点: • 解决了网络结构中心化的问题,扩展性和容错性较好; • 支持复杂的查询(如多关键词查询、模糊查询等)。 • 缺点: • 查询结果可能不完全,查询速度较慢; • 网络规模较大时,消耗网络带宽多,易造成部分低带宽节点因过载而失效,影响网络的可用性; • 容易受到垃圾信息甚至是病毒的恶意攻击。
2.3 全分布式结构化拓扑 • 采用分布式散列表(DHT)组织网络中的节点: • DHT是由广域范围内大量节点共同维护的巨大散列表。 • 散列表被分割成不连续的块,每个节点被分配一个散列块,并成为这个散列块的管理者。 • 每个节点按照一定的方式被赋予一个惟一的Node ID。 • 资源对象的名字或关键词通过一个散列函数映射为128位或160位的散列值,资源对象存储在Node ID与其散列值相等或相近的节点上。 • 需要查找资源时,采用同样的方法定位到存储该资源的节点。
基于DHT的节点组织 • 每个节点通过散列其IP地址,得到一个128位的节点标识符。 • 所有节点标识符形成一个环形的node ID空间,其中只有一部分对应了实节点。 • Key的散列值为d46a1c的内容存放在节点d467c4上。
全分布式结构化拓扑的特点 • 优点: • 采用确定性拓扑结构,DHT可以提供精确发现。 • 缺点: • 维护机制较复杂,尤其是节点频繁加入/退出造成的网络波动会极大地增加维护DHT的代价。 • 仅支持精确关键词匹配查询,无法支持内容/语义等复杂查询。 • 这种结构目前还没有大规模成功应用的实例。
2.4 半分布式结构 • 亦称混合结构,吸取了中心化结构和全分布式非结构化的优点。 • 选择性能(处理、存储、带宽)较高的节点作为超级节点,各个超级节点上存储其它部分节点的信息。 • 发现算法仅在超级节点之间转发,超级节点再将查询请求转发给适当的叶子节点。 • 半分布式结构是一种层次式结构: • 超级节点之间构成一个高速转发层 • 超级节点和所负责的普通节点构成若干层次
Kazaa的拓扑结构 • 节点按能力不同区分为普通节点和搜索节点。 • 搜索节点与其临近的若干普通节点构成一个自治的簇: • 簇内采用中心化P2P结构 • 簇之间通过纯P2P结构将搜索节点连接起来
Kazaa的特点 • 自动将性能好的机器当成超级节点,采用Gnutella的全分布式结构,不需要中央索引服务器。 • 超级节点存储离它最近的叶子节点的文件信息,其索引功能使得搜索效率大大提高。 • 文件搜索先在本地簇内进行,必要时再通过搜索节点进行有限的泛洪,消除了纯P2P结构中泛洪算法带来的网络拥塞、搜索迟缓等不利影响。 • 搜索节点监控着簇内所有普通节点的行为,一些攻击行为能在网络局部得到控制。 • 超级节点的存在一定程度上提高了网络的负载平衡。
Gnutella后期的结构 • 计算能力较强的节点加入网络时,立即成为一个超级对等节点(SuperPeer),并与其它SuperPeer建立连接,同时设置一个使其保持SuperPeer所需的最小客户节点数目。 • 当该节点在一个规定的时间内收到不少于该数目的客户连接请求时,它继续成为SuperPeer,否则变为一个普通的客户节点。 • 如果没有可用的SuperPeer,它又会在一个给定的时间内担当SuperPeer。
Skype网络结构 • Skype是P2P技术演进到混合模式后的典型应用: • 登录服务器:惟一的集中服务器,存储用户名和密码信息,保证登录名全球惟一,进行用户身份认证等。 • 用户节点:分为普通节点和超级节点。 • 普通节点:下载了skype应用的普通终端。 • 超级节点:具有公网IP地址和足够资源(CPU、存储空间、网络带宽)的普通节点均可为超级节点的候选。
Skype网络结构示意图 • 普通节点必须连接到一个超级节点上,通过超级节点: • 向登录服务器认证自己 • 向好友发送在线信息 • 查找用户 • 检测NAT和防火墙类型
Skype的通信过程 • 初始化:询问skype的最新版本 • 登录:连接到超级节点,进行身份认证等 • 用户搜索:查找用户 • 呼叫与终止:与通信方建立与终止连接 • 媒体传输:传输音频信息
登录 • 客户端启动后连接到超级节点,向登录服务器发送身份认证信息。 • 登录服务器验证用户名和密码的合法性。 • 客户端向好友及其它对等节点发送在线信息。 • 客户端与超级节点交换消息,检测NAT和防火墙类型。 • 客户端发现拥有公网IP地址的在线Skype节点。
连接到超级节点 • 客户端在主机缓存中维护一个超级节点列表,包含一系列超级节点的<IP地址,端口>。 • 初次安装客户端软件后,超级节点列表中至少包含7个<IP地址,端口>,这些便是初始的超级节点。 • 登录时,客户端试图同列表中的每一个表项(超级节点)建立连接。 • Skype没有默认的服务端口号,在安装客户端软件时随机选择(或设置)一个端口号监听,同时监听80和443端口。
向好友发送在线信息 • Skype采用路由缓存机制: • 超级节点缓存查找到的用户信息(缓存72小时)。 • 用户登录后,其状态信息可以通过超级节点通知到好友终端,也可以得到好友的状态。 • 一旦缓存超时,需通过其它超级节点查找用户。
查找用户 • 具有公网地址的客户端,查找用户的过程: • 向超级节点(SN)发送要查找的用户信息; • 若不成功,从SN获取四个节点地址,发送用户信息; • 若不成功,报告SN,获取八个节点地址,发送用户信息; • …… • 成功或失败返回 • 位于私网内的受限客户端,查找用户的过程: • 客户端将需要查找的用户信息发送给其超级节点; • 超级节点完成查找后,返回给私网内的客户端。
呼叫建立和释放 主、被叫都在公网内
呼叫建立和释放(续) 主、被叫至少有一方在私网内
Skype的技术优势 • 较强的NAT和防火墙穿越能力:首先识别NAT和防火墙类型,然后动态选择信令和媒体代理。 • 快速路由机制:采用全球索引技术,用户路由信息分布式存储于网络节点中。 • 结合互联网特点的语音编解码算法:引入专门针对互联网特点的语音质量增强软件。 • 很低的运行成本:很多工作下放给网络节点完成,大大降低了中心服务器的负担,减少了维护和管理成本。
3 P2P网络的资源发现机制 • 中心化结构:集中式索引和存储 • 分布式非结构化:查询请求的洪泛广播 • 分布式结构化:内容可寻址网络
3.1 集中式索引和存储 • 一个集中的目录服务器保存所有资源的位置和使用信息: • 网络中所有文件的元数据(文件名、创建时间等)索引; • 登录用户的连接信息表(IP地址、连接速度等); • 每个用户拥有并愿意共享的文件列表。 • 起始时,客户与目录服务器建立连接,报告其保存的文件列表。 • 当目录服务器收到来自用户的查询时,查找索引表,返回存有所需文件的用户列表。 • 用户选择其中一个对等方建立直接连接,下载文件。
3.2 查询请求的洪泛广播 • 洪泛查询的过程: • 在覆盖网络上,查询节点将一个资源发现请求发送给与其直接相连的所有节点; • 这些节点再向其直接相连的邻居洪泛该请求; • …… • 直到请求被响应或达到最大洪泛次数。 • 早期的Gnutella使用洪泛机制发现网络中的文件。
Gnutella使用的消息 • Ping:节点使用该消息宣告自己。 • Pong:对Ping的响应,包含响应主机的IP地址、能接受响应的端口、本机共享文件数量及所占空间大小。 • Query:搜索请求,包含一个搜索字符串和对响应主机的最小速度要求。 • QueryHit:对Query的响应,包含响应主机的IP地址、能接受连接的端口、连线速度、查询结果集(包含匹配的文件数量以及每个匹配文件的索引、文件大小及文件名)。
Gnutella查询与响应过程 • 一个节点与自己所知道的每一个节点建立TCP/IP连接。 • 节点向每一个连接的节点发送Ping消息;收到Ping消息的节点发送一个Pong消息,同时将Ping消息继续向其邻居传播。 • 节点使用Query查询文件,Query使用相同的洪泛方式传输。 • TTL被用来限制Ping和Query的传播范围。每个消息携带全局唯一的标识符,用于检测和丢弃重复的消息。 • 当收到QueryHit时,表明在响应主机上找到了文件。
3.3 内容可寻址网络 • 分布式P2P系统的核心是一个将文件名映射到文件存放位置的索引系统。 • 查找服务通过将对等节点组织到一个有结构的覆盖网络中,并将消息通过覆盖网络路由到相关对等节点来实现。 • 到目前为止,已经有多个研究项目实现了分布式P2P查找服务。
Content-Addressable Network(CAN) • CAN类似于一张大哈希表,基本操作包括插入、查找和删除<关键字,值>对: • 关键字可能是部分或完整的文件名 • 值可能为获取该文件所需的信息(如大小、位置等) • 网络中每个节点保存哈希表的一块(区)。 • 对一个特定关键字的请求(插入、查找或删除)由中间CAN节点路由到包含该关键字的目标CAN节点。
CAN的坐标空间 • CAN基于一个虚拟的d维笛卡尔坐标空间来组织数据和实现查找功能: • 整个坐标空间被动态分配给系统中的所有节点; • 每个节点都拥有独立和不相交的一块区域; • 如果两个区域在(d-1)维上跨度相同,而在另一个维度上相邻,就称这两个区域相邻; • 若两个节点拥有的区域相邻,就称这两个节点在坐标空间中相邻。
名字到位置的映射 • 存储<key,value>对的方法: • 使用一个均匀哈希函数将key映射成坐标空间中的一个点P,<Key, value>被保存在P所在区域对应的CAN节点中。 • 查询关键字Key: • 使用相同的哈希函数得到点P,从P所在区域对应的CAN节点中得到Value。 • 如果P不在查询节点所拥有的区域中,查询请求通过CAN网络路由到包含P的CAN节点。
CAN路由 • CAN中的节点自动形成一个表示虚拟坐标空间的覆盖网络: • 每个节点学习并维护坐标空间中相邻节点的IP地址和虚拟坐标区域,这组邻居节点就形成了坐标路由表。 • 每条CAN消息都包含目的点P的坐标。 • 节点利用坐标路由表,使用贪婪转发机制将消息转发给距离P最近的邻居节点。
节点加入CAN • 找到一个已有节点: • 在DNS中查找CAN的域名,得到一个引导节点的IP地址。 • 引导节点随机选择当前系统中几个节点的IP地址,提供给新节点。 • 找到一个要分裂的区域: • 在坐标空间中随机选择一个点P,向P发送一个加入请求。 • 该消息通过已有节点送入CAN,路由到P所在区域的CAN节点。 • 该节点将它的区域分裂成两半,将一半分配给新节点。 • 加入路由: • 新节点向区域的原节点了解其邻居节点的IP地址,形成自己的邻居集合;原节点也要更新自己的邻居集合。 • 新老节点将自己当前分配的区域告知其邻居。
新节点加入的例子 节点7加入前 节点7加入后
节点离开CAN • 正常的做法: • 节点显式地将其区域和相关的<key,value>数据库转交给一个邻居节点。 • 如果某个邻居节点的区域可以和该节点的区域合并成一个合法的区域,转交完成。否则, • 该区域转交给当前区域最小的节点,这个节点要临时接管两个区域。 • 节点通过周期性更新消息,告知邻居自己的区域坐标和其邻居节点的区域坐标。 • 当节点失效时,其邻居之一要立即接管失效节点的区域,但失效节点中保存的<关键字,值>丢失。
CAN的缺点 • 经过哈希之后,节点的位置信息被破坏了,来自同一个子网的站点很可能节点号相距很远,这不利于查询性能的优化。 • 基于哈希表的系统不能利用应用本身的信息,许多应用(如文件系统)的数据本身是按照层次结构组织的,而使用哈希函数后这些层次信息就丢失了。