欢迎您访问科普小知识本站旨在为大家提供日常生活中常见的科普小知识,以及科普文章!
您现在的位置是:首页  > 科普文章

P2P 网络结构模型探析

科普小知识2022-06-13 02:36:32
...

摘要:对等网络流媒体技术(p2p)可以利用客户端的计算机能力和带宽资源,使用户实现下载的同时播放流媒体节目,并能利用自身的计算机空闲资源为其它用户提供服务。本文对p2p网络架构进行探讨和研究。

关键词:p2p;流媒体技术;网络架构

一、引言

p2p网络是在ip网络基础之上,通过应用软件构筑起来的一个逻辑覆盖网(logical overlay network),并不是独立于现行的ip网络之外的什么特殊网络。在实际物理网络中安装有某种p2p软件的节点可以构成一个逻辑覆盖网络,而没有安装这种p2p软件的节点则被排除在外。

p2p网络架构,又称为p2p网络模型,是指p2p网络中节点的逻辑组织结构,即节点互联的拓扑结构和节点在与相邻节点保持连接时的行为规范,一般用一个连通的图来表示。但p2p网络的连接图与物理网络的拓扑连接图不同,在覆盖网中相邻的节点可能在实际物理网络中位于不同的子网中,中间相隔多个路由器,而在覆盖网中不相邻的节点在实际物理网络中却可能是直接相连的。p2p网络模型主要分为结构化和非结构化两类,结构化p2p系统是指系统中的数据存放的位置和数据的key值有关,而非结构化p2p系统中,数据的存放位置与数据是无关的。

二、非结构化p2p网络模型

非结构化p2p网络模型按节点的集中化程度又分:

(1)集中式p2p网络模型

以napster为代表的集中式p2p网络架构是最早出现的p2p应用模式,由于仍具有*服务器,没有完全去除服务器的性质,所以又被称为非纯粹的p2p网络。www.11665.cOm在napster系统中,资源的检索过程类似于传统的c/s 模式,即所有节点向*服务器查询资源,但与传统的c/s模式不同的是,资源并非存储在服务器上,而是存储在各个节点中。从服务器的返回结果中,查询节点根据网络流量和延迟等信息选择合适的节点建立直接连接,进行数据传输,数据传输不需要经过*服务器。这种网络架构的资源搜索效率较高,但其主要缺点是*服务器是系统的单故障点,如果*服务器出现故障,则整个系统就会瘫痪,所有节点都没法查询到所需的资源。

(2)纯p2p网络模型

纯p2p网络架构以gnutella为代表,gnutella系统完全取消了服务器的概念,是第一个真正采用无中心结构的p2p文件共享系统。

拓扑维护:gnutella中每个节点维护了一个邻居节点列表,记录了与之相关联的结点的ip地址等信息。相邻节点之间彼此交换邻居节点信息来保持拓扑图的连通性,并替换因节点离线而失效的连接。节点定期向邻居节点发送ping消息,收到ping消息的节点则回应一个pong消息,并附带了当前所拥有的邻居信息。收到邻居列表后节点按照一定规则进行邻居替换,保证自身拥有一定数量的有效邻居。当新的节点加入系统时(它需要知道系统中至少一个节点的ip地址),它向系统已有的节点发送ping消息来获得足够的邻居节点,从而加入系统。信息搜索:gnutella使用洪泛式(flooding)的资源查询机制。发起资源查询的节点向所有邻居节点发送query消息,而收到query消息的节点除了进行本地查询,即看自己有没有所查询资源外,还把查询进一步转发给自己的所有邻居节点。这些节点收到这一消息后,重复进行同样的操作,即进行本地查询和消息广播。为避免无穷递归,每个搜索消息都有一个ttl(time-to-live) 域,它随着转发的进行而递减,ttl为0时消息不再被转发。另外节点对近期接收到的消息进行缓存,以避免重复处理同样的消息。搜索操作结束后,发起搜索的节点会收到一些查询结果,记录了满足条件的文件及其存放的节点ip,节点可从中选择一些节点来下载所需文件。gnutella具有较好的扩展性,也不存在单故障点,但其查询机制效率较低,而且也不能保证搜索到所需的、确实存在的资源,同时每次查询都要产生大量的转发消息,容易形成消息泛滥,增加了网络的负担。

(3)混合式网络模型

kazaa是混合式p2p模型的典型代表,它在纯p2p分布式模型基础上引入了超级节点的概念,综合了集中式p2p快速查找和纯p2p去中心化的优势。kazaa模型将节点按能力不同(计算能力、内存大小、连接带宽、在线时间等)区分为普通节点和超级节点两类。当一个普通节点启动kazaa程序时,它首先与某一超级节点建立tcp连接,然后向这个超级节点发送它所拥有的文件的元数据,元数据包括:文件名,文件大小,文件内容的哈希值(hash value),以及其它信息(在按关键字查询时将用到这些信息)。文件内容哈希值是一个文件的唯一标识,在某文件的下载任务失败后,kazaa客户端可以根据此文件内容的哈希值自动搜索哈希值相同的文件。

超级节点维护着所有隶属于它的普通节点的文件标识和对应的ip地址等信息,有点类似于napster中的*服务器。超级节点与其所属的若干个普通节点构成一个自治的簇。而整个p2p网络中各个不同的簇之间再通过纯p2p的模式将超级节点连接起来,甚至也可以在各个节点之间再次选取性能最优的节点,或者另外引入一个新的性能最优的节点作为索引节点来保存和维护整个网络中可以利用的超级节点信息,并且负责维护整个网络的结构。

普通节点的文件搜索先在本地所属的簇内进行:普通节点向所属的超级节点发送查询关键字,超级节点收到查询请求后,在本地目录数据库中查找相关文件,若成功找到,则返回文件的元数据,包括文件所在节点的ip地址。只有查询结果不充分的时候,才在超级节点之间进行有限的洪泛查询;超级节点向与其有连接关系的其他超级节点广播这个查询消息。收到这个消息的超级节点做本地数据库查询,如果能找到,则向提交请求的普通节点返回查询结果,否则,继续广播查询消息。

kazaa的这种混合式网络架构,可有效地消除p2p结构中使用洪泛算法带来的网络拥塞,也提高了资源搜索效率,并且超级节点的引入也能在一定程度上提高整个网络的负载平衡。

三、结构化p2p网络模型

结构化(structured)p2p网络模型与非结构化p2p网络模型的根本区别在于每个节点所维护的邻居是否能够按照某种全局方式组织起来,以利于快速查找。结构化p2p模式采用纯分布式的消息传递机制,及根据关键字进行查找的定位服务。目前的主流方法是采用分布式哈希表(distributed hash table,dht)这种资源定位技术:首先将网络中的每一个节点分配虚拟地址(vid),同时用一个关键字(key)来表示其可提供的共享内容。取一个哈希函数,这个函数可以将key转换成一个哈希值h(key)。网络中节点相邻的定义是哈希值相邻。发布信息的时候就把(key,vid)二元组发布到具有和h(key)相近地址的节点上去,其中vid 指出了文档的存储位置。资源定位的时候,就可以快速根据h(key)到相近的节点上获取二元组(key,vid),从而获得文档的存储位置。

不同的dht算法决定了不同的p2p网络的逻辑拓扑,有的结构化p2p网络具有环形拓扑结构,有的具有网状拓扑结构,而有的是采用多维向量空间。

chord:chord采用了相容哈希函数 (consistent hashing),把所有节点和节点的文档对应到一个由n个整数所形成的标识环(identifier circle)上。每个节点用一个节点标识(node id)来代表节点在标识环中的位置,节点标识是节点ip的哈希值。而每个文档则用一个文档标识(object id)来表示,文档标识也是通过对求文档的哈希值来得到。当一个新文档加入系统时,系统会根据文档标识来寻找其在标识环中的后继者(successor)来保存这个新文档的信息,即保存此文档的节点的ip地址等信息。一个标识k的后继者successor(k)均是从k开始,沿标识环顺时针方向所找到的第一个节点,即节点标识符大于等于k的第一个节点。

can:相对于chord使用环状架构,can则采用基于虚拟的d维笛卡尔坐标空间实现其数据组织和查找功能,整个坐标空间动态地分配给系统中的所有节点,每个节点都拥有独立的互不相交的一块区域。虚拟坐标空间采用下面的方法保存(关键字,值)对。当保存(k1,v1)时,使用统一的哈希函数把关键字k1映射成坐标空间中的点p。那么这个值将被保存在该点所在区域的节点中。

pastry:在pastry中,每一个节点都被分配了一个128位全局唯一的节点标识(nodeid),当给定一条消息和一个关键字时,pastry节点将会把这条消息路由到在当前所有的pastry节点中nodeid和关键字最接近的那个节点。pastry考虑了网络的位置信息,它的目标是使消息传递的距离最短。距离采用类似于ip路由的hop数的标量距离来度量。

参考文献

[1] 龚海刚, p2p 流媒体关键技术的研究进展.计算机研究与发展.2005

[2] 郭水强, gnutella网络中的异构延迟现象及解决方案.计算机应用研究.2004