摘要:对等网络流媒体技术(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.133229.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的模式将超级节点连接起来,甚至也可以在各个节点之间再次选取性能最优的节点,或者另外引入一个新的性能最优的节点作为索引节点来保存和维护整个网络中可以利用的超级节点信息,并且负责维护整个网络的结构。