`
剑&箫
  • 浏览: 54574 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

关于P2P的简单总结

    博客分类:
  • P2P
阅读更多

      前段时间看了点关于P2P技术的资料,现在简单的整理写进自己的博客,对于更深入的学习会在后续的博客中更新总结。

这篇博客的主要内容如下:

1.P2P的定义及特点

2.P2P网络拓扑结构

3.P2P关键技术的初步理解

4.JXTA简介

一、首先了解P2P的定义及特点

P2P,即Peer-To-Peer的缩写,意思就是伙伴对伙伴、对等、点到点的意思,应用到网络上就是对等网络、点对点传输网络。某些人对P2P给出了数学意义上的严格定义如下:

1.有某网络N,是架构在Internet之上的网络,满足Internet的所有基本特性。

2.在N网络中,存在两种基本的模式,一种行为定义为P,是生产资源(提供资源)的行为,另一种定义为C,是消费资源(接收资源)的行为。

3.组成N网络的所有结点之间是对等关系,且同时具备行为P和行为C。

4.在N网络中,各Peer之间以无中介的、对等的方式进行双向交换,以执行P和C的行为。

5.N网络依赖Peer的存在而存在,Peer可以自由的加入或退出。

6.当有Peer加入或退出时,N网络仍保持组织、结构等特性不变。

根据以上的定义可以从两个方面来解释P2P网络:

1.从网络概念来讲,P2P网络是一种用户之间通过某一个相同的网络应用程序联系起来,彼此之间可以相互访问、共享计算机资源的网络。

2.从应用上来说,P2P网络是一种不通过中央服务器而将一些独立的计算机资源组织起来,通过Internet运行于个人计算机上,以实现共享文件和资源的应用。

从以上对P2P的描述,可知P2P至少有以下三点特点:

1.P2P网络是对等互联的的网络,组成网络的结点之间是对等、伙伴式的关系。

2.P2P网络结点之间资源的传递是从一点到另一点的,每个结点既是资源的提供者同时也是资源的消费者。

3.P2P网络中的资源是依赖于结点的存在而存在的,且资源可以动态的加入或退出。

二、P2P网络拓扑结构

      在现实世界中,P2P不是作为一个独立的个体网络存在的,不需要人为的部署和专门的硬件组网,它是依赖于某个P2P应用系统自发的组成的网络,从Internet的角度来讲,P2P网络是叠加在底层通信网络的基础设施之上的重叠网络,是网络中的网络,是一个分布式的、具有互操作性的自组织系统。P2P网络的拓扑结构对P2P网络的特点、P2P网络的搜索机制、数据传输机制、结点发现以及充分利用并发挥P2P的功能有十分重要的作用。

那么什么是拓扑结构呢?

     在计算机科学中,网络拓扑结构是指构成网络成员间特定的物理的、或逻辑的排列方式,直观上看,网络拓扑就是在计算机网络中传输媒体的互连的各种设备的物理布局,特别是计算机分布的位置及电缆如何通过它们。

常用拓扑结构图有星型、总线型、网状、环状、树型如下图所示:


    

 
 对P2P网络而言,一般要构造一个非集中式的拓扑结构,在构造的过程中需要解决网络中的大量结点如何命名、组织以及确定结点的加入或离开方式、出错恢复等问题。
根据拓扑结构的关系可以将P2P网络拓扑结构分为四种:

1.集中式拓扑
2.全分布式结构化拓扑
3.全分布式非结构化拓扑
4.混合式拓扑

(一)、集中式P2P网络拓扑的原理
      集中式P2P网络类似于一个抽象的“星型网络拓扑”,由一个中央服务以星状的形式与各客户机连接,但这种连接并不是物理上的星状拓扑,而是基于集中式P2P网络拓扑协议而形成的一个虚拟的星状结构。
      在集中式P2P网络中,网络的主体有一个处于中心地位的索引目录服务器和连接到目录服务器的各结点客户机组成,目录服务器用来管理和组织P2P的各客户端结点。
在网络运行过程中,P2P结点向中央目录服务器注册关于自身的信息(名称、地址、资源和元数据等),但这些注册都分散的存储在各结点中而并非服务器上,查询结点根据目录服务器中的信息的查询来选择与定位其他对等结点并直接建立连接,而不必经过中央目录服务器进行。

(二)、全分布式结构化P2P的原理
      全分布式结构化拓扑的P2P网络主要采用分布式散列表技术来组织网络中的结点。分布式散列表简称DHT,DHT是分布式计算系统中的一类,用来将一个关键值(key)的集合分散到所有的分布式系统中的结点上,并且可以有效地将信息转送到唯一一个拥有查询者提供的关键值的结点。分布式散列表通常是为了拥有极大结点数量的系统,而且系统结点常常会加入或离开而设计的。
      通过DHT技术将广域范围内大量的结点共同形成并维护一个巨大散列表,散列表被分割成不连续的块,每个结点被分配给一个属于自己的散列块,并成为这个散列块的管理者。
DHT类结构能够自适应结点的动态加入或退出,有着良好的鲁棒性、结点ID分配的均匀性和自组织能力。

(三)、全分布式非结构化的P2P网络原理:
      目前,大多数的P2P应用系统是非结构化拓扑结构,这种结构的覆盖网络一般采用完全随即图的组织方式,结点度数服从幂次法则,从而能够较快的发现目的结点。(幂次法则指的是个体的规模和其名次之间存在着幂次方的反比关系。)
采用非结构化的P2P系统,对网络动态变化有较好的容错能力,具有较好的可用性,同时支持复杂查询,采用这种结构的典型案例便是Gnutella,它采用了基于完全随机图的洪泛发现和随机转发机制,为了控制搜索消息的传输,通过TTL的减值来实现。
(四)、混合式P2P网络结构的原理:
      在混合式P2P网络结构中,整个网络中的结点按能力不同区分为普通结点和超级结点两类,超级结点也叫搜索结点,它与其临近的若干普通及诶点之间构成一个小型的、自治的、基于集中式的P2P网络模式。
      这种混合式的P2P拓扑结构在工作过程中,一般会选择一些性能较好的结点作为超级结点,当有结点加入或退出时,系统可以在各个搜索结点之间再次选取性能最优的结点或另外引入一新的性能最优的结点作为索引结点来保存整个网络中可以利用的搜索结点信息,并负责维护整个网络的结构。
三、下面是对P2P的关键技术的初步了解
(一)、P2P网络搜索技术
      P2P根本的思想就在于对等和共享,在P2P系统中,资源分散在各个结点之上,并且结点频繁地加入或退出,使得P2P系统及整个P2P系统的资源都处于不断变化之中,P2P要实现良好、高效、共享机制,就要解决资源的搜索和结点的返现问题。所谓P2P搜索技术,就是一种P2P资源的发现和定位技术。
P2P搜索技术与其结构是密切联系的,有什么样的P2P网络拓扑基本上也就决定了此网络拓扑下的搜索策略。
      集中式搜索是基于一台或多台中央服务器来进行的。中央服务器负责协调或调度单独注册结点上的资源,中央服务器维持着P2P网络中的结点的源的中央目录,并协调结点间的交互。
      结构化P2P网络的搜索:在结构化的P2P系统中,利用DHT机制来对P2P系统中的文件进行定位,一个文件与一个key值对应,key值一般通过对文件进行哈希得到,系统中的每个结点负责保存一定范围的keys,利用put(key,value)的功能进行结点的信息的发布,利用get(key)功能进行信息查询,通过这种机制可以对P2P网络中的文件进行定位。
非结构化P2P网络搜索:这种结构的搜索方法分为两类:盲目搜索和启发式搜索。盲目搜索通过在网络中传播查询信息并且把这些信息不断扩散给每个结点,通过这种泛洪方式来搜索想要的资源。启发式搜索在搜索过程中利用一些已有的信息来辅助查找过程。
混合式P2P网络搜索:这里的混合式P2P搜索技术并不是基于混合式P2P结构的搜索技术,而是运用两种或以上搜索技术进行混合搜索,主要算法:鸡尾酒搜索算法、模拟退火思想的混合搜索算法。

(二)、P2P的体系结构技术
1.动态变化:P2P系统需要一种动态成员的管理机制,专门进行用户加入、离开以及出错的管理。
2.平等的参与:对P2P网络中的任意两个结点而言,如何定义这种平等,如何保证它们之间的平等,如何让这种平等在动态的P2P网络中延续下去以及控制这种平等不被破坏。
3.分散与自治:解决结点在时间和空间上的分散性以及结点在没有中央控制器的前提下,它的运行、控制和管理。
4.角色的划分:在一个P2P系统中如何区分结点的不同功能,如何划分它们的角色。
(三)、P2P的内容存储技术
1.资源的标识:资源的类型包罗万象,如何标识资源的存在
2.资源的获取:复制和缓存
(四)、内容传输技术
P2P通信时需要解决的问题是如何连接其他的终端获得信息、资源和服务,另一个重要问题是如何建立稳定的连接
(五)、P2P的系统安全技术

在P2P网络中网络安全是特别重要的一项内容,其中主要包括如下几个方面:
1.密码系统
2.非公开密钥加密技术
3.公钥加密技术
4.数字签名
5.身份识别和身份认证
四、JXTA简介

      JXTA是一个针对点对点计算的合作项目,它提供一套简单、便利的技术,可以在任何平台、任何地点和任何时间支持P2P计算,是为了构建P2P网络而定制的一组协议。
JXTA的层次结构
JXTA平台主要被分为3层,其分层结构如图:


 

上图所示的各个分层中,各层有不同的基本功能:
核心层(JXTA Core):这一层封装了最根本的东西,包括Peer、对等组、Peer发现、Peer通信、Peer监视和相关的安全原语。
服务层(JXTA Servers):这一层包括P2P网络不是必需的、但很通用的功能,如查找、共享、索引、代码缓存和内容的机制,以及认证、PKI服务等。
应用层(JXTA Application):这一层包括应用JXTA服务开发出来的完整的P2P应用程序。
至于JXTA的一些基本术语,可以在网上搜索《JXTA技术手册》参考。

JXTA协议分类
JXTA协议由6个为特定的、普及型的P2P网络计算设计的协议构成,分为两类:2个核心协议和4个标准服务协议
核心协议:对等体端点协议、对等体解析协议
标准服务协议:对等体发现协议、汇聚协议、对等体信息协议、管道绑定协议

本人对于JXTA的理解就是开发P2P应用程序的类库,但是它是与平台无关的,可以用Java,C++等语言实现P2P应用程序的开发。
JXTA的安装与开发
http://download.java.net/jxta下载 jxse-doc-2.5.zip、jxse-lib-2.5.zip、jxse-src-2.5.zip、jxse-tutorials-src-2.5.zip这四个包,这四个包内容如下:
jxse-doc-2.5.zip:为JXTA的文档压缩包,是应用JXTA的API重要参考工具
jxse-lib-2.5.zip:是JXTA的类库,在进行JXTA开发时需要导入相应的Jar包
jxse-src-2.5.zip:是JXTA的源代码包
jxse-tutorials-src-2.5.zip:是JXTA的一个开发指导示例的源代码,包括JXTA开发的指导文档
JXTA的安装的安装过程就是导入JXTA开发包到具体的开发工程中的过程。
JXTA的Hello World程序运行如下:

public class HelloWorld_JXTA {
	
	public static void main(String[] args){
		System.out.println("Starting JXTA...");
		HelloWorld_JXTA ht = new HelloWorld_JXTA();
		ht.startJXTA();
		System.exit(0);//程序退出
	}
	
	/**
	 * 启动JXTA的方法
	 */
	@SuppressWarnings("deprecation")
	public void startJXTA(){
		//初始化一个结点组对象
		PeerGroup pg = null;
		try{
			pg = PeerGroupFactory.newNetPeerGroup();
			
		}catch(PeerGroupException e){
			System.out.println("Fatal error:group creation failure");
			e.printStackTrace();
			System.exit(1);//系统非正常退出
		}
		System.out.println("Hello JXTA!");
		//打印结点组的名称
		System.out.println("Group name:"+pg.getPeerGroupName());
		//打印ID
		System.out.println("Group ID:"+pg.getPeerGroupID().toString());
		//打印节点名称
		System.out.println("Peer name:"+pg.getPeerName());
		//打印结点ID
		System.out.println("Peer ID:"+pg.getPeerID());
	}
}

 
第一次运行时要对JXTA的管理界面进行相关配置。
程序运行成功后,会在程序同目录下会出现一个.jxta的文件夹:
PlatformConfig文件:由JXTA的配置工具生成,是一个符合XML规范的文本文件。
Jxta.properties文件:定义了一些jxta的属性。
cm目录:本地的缓存文件,记录了发现的所有的PeerGroup。
pse目录:存放Peer用于安全认证的证书信息。
     对于JXTA管理界面的相关设置,到目前为止我还没有完全设置成功,还在进一步的学习中。对P2P的相关总结先到这里,以后有更深入的学习与体会会及时的更新的自己的博客上。

  • 大小: 11.1 KB
  • 大小: 16.4 KB
  • 大小: 24.2 KB
  • 大小: 18.6 KB
  • 大小: 18.3 KB
  • 大小: 97.2 KB
5
2
分享到:
评论
1 楼 jadethao 2011-12-01  
  作者辛苦了。

相关推荐

    简单p2p服务器代码

    通过分析和学习这个代码,你可以深入理解如何用UDP实现一个简单的P2P服务器。 总结来说,构建基于UDP的P2P服务器涉及网络编程、分布式系统和数据通信等多个领域的知识。通过实践和理解"udp_ser"的代码,你可以逐步...

    基于UDP无连接的SOCKET实现简单的P2P通信MFC实现

    总结起来,基于UDP的P2P通信实现需要理解UDP协议的特性和MFC的`CSocket`类的使用,以及如何处理NAT穿透问题。通过学习这个项目,新手可以熟悉P2P通信的基本原理,同时掌握C++和MFC在实际网络编程中的应用。然而,...

    p2p网络模型分析与探

    - 带简单发现服务器的P2P模型:节点通过中心服务器寻找其他节点,但数据交换仍发生在节点间。 - 带发现和查找服务器的P2P模型:中心服务器负责节点发现和数据查找。 - 带发现、查找和内容服务器的P2P模型:除了...

    P2P软件屏蔽工具

    总结来说,P2P软件屏蔽工具是一种解决网络管理和安全问题的有效手段,通过技术手段限制P2P软件的运行,达到保护网络资源、提升网络效率和保障信息安全的目的。"绿茶P2P屏蔽工具"作为其中的一种,可能提供了上述提到...

    P2P搜索技术研究

    #### 四、总结 P2P搜索技术是P2P网络中不可或缺的一部分,对于提升用户体验和资源利用率至关重要。无论是结构化的DHT网络还是非结构化的P2P网络,都在不断地探索更加高效、智能的搜索机制。未来,随着人工智能、...

    P2P文件传输系统

    总结起来,这个“P2P文件传输系统”项目利用了P2P网络的优势,实现了用户之间的直接文件交换。通过VC6.0开发,它使用C++语言和可能的多线程、socket编程技术来构建。用户可以通过“P2PTRAN.exe”执行文件进行操作,...

    基于UDP,P2P的网络通信示例

    总结来说,"基于UDP,P2P的网络通信示例"是一个利用C#编程语言实现的,通过UDP协议和P2P技术,克服NAT障碍,实现局域网内机器间通信的项目。在这个过程中,UDP打洞技术扮演了关键角色,使得不同网络环境下的设备能够...

    win8 win8.1 绝对可用的p2p终结者.

    《关于在Windows 8及Windows 8.1操作系统中使用P2P终结者的全面解析》 在现代互联网环境中,P2P(Peer-to-Peer)技术的广泛应用为用户提供了便捷的文件分享方式,但同时也可能导致网络带宽的过度消耗。为了解决这一...

    台湾P2P软件 Foxy

    总结来说,Foxy作为一款台湾的P2P软件,以其独特的功能和广泛的资源库吸引着用户。然而,如同所有P2P软件一样,用户在享受其便利的同时,也需关注安全和版权问题,合理使用,以确保网络环境的健康和自身权益的安全。

    C# P2P通信 QQ聊天 客户端通信

    总结来说,"C# P2P通信 QQ聊天 客户端通信"项目展示了如何利用C#的套接字编程技术实现点对点的聊天功能,这涉及到TCP连接、数据收发、多线程以及可能的安全措施。通过学习和分析这个项目,开发者可以提升在C#环境中...

    MIWI P2P无线协议

    - **协议层的简化**: MIWI P2P简化了IEEE 802.15.4中的介质访问控制(MAC)层,提供了更简单的握手过程和辅助命令来简化链接断开和通道跳转操作。 - **应用层面的灵活性**: MIWI P2P并未提供具体的应用层决策逻辑,...

    实现P2P网络通信.rar

    本教程将通过Java编程语言,深入探讨如何构建一个简单的P2P网络通信系统。 首先,我们要理解P2P网络的基本原理。在P2P网络中,每个节点(即对等方或peer)都有能力直接与其他节点交换数据,而无需通过中央服务器...

    基于VNC 和P2P 技术的实时课堂直播系统

    - **VNC与RFB协议**:VNC的核心是RFB协议,这是一种基于TCP/IP的简单图形界面传输协议。通过改进RFB协议,增加了音/视频多播支持,提升了用户体验。 - **P2P技术**:P2P技术使得数据传输更加高效、可靠。每个客户端...

    C#_-_P2P与NAT技术

    为了解决这个问题,开发者通常会利用 STUN(简单Traversal of NAT,NAT 穿透)、TURN(Traversal Using Relays around NAT,NAT 穿透借助中继)和 ICE(Interactive Connectivity Establishment,交互式连接建立)等...

    基于UDP协议P2P通信技术的分析及实现

    这种方式虽然简单可靠,但由于所有数据都需要经过服务器转发,可能会导致服务器负载过高以及通信延迟增加等问题。 ![中继站方式示意图](https://example.com/relay.png) **图1** 中继站方式示意图 ##### 4.2 反向...

    p2p--技术介绍--网络编程

    以下是一个使用C#语言实现简单P2P聊天应用的示例代码片段: ```csharp // 监听端口 private void Listen() { try { TcpListener tcpListener = new TcpListener(5656); tcpListener.Start(); statusBar1.Text =...

    c#实现p2p点对点的信息传输

    根据给定的部分内容,我们可以看到一个简单的P2P信息传输示例: 1. **服务器端(监听端)**: - 使用`TcpListener`类监听指定端口。 - 接受客户端连接请求,并获取连接信息。 - 读取客户端发送的数据,并显示...

    网络游戏补丁更新P2P分发解决方案

    #### 六、总结 惠软畅联网络技术有限公司提供的网络游戏补丁更新P2P分发解决方案,不仅解决了传统更新方式中存在的诸多问题,还为游戏开发商提供了一种更加高效、稳定且成本低廉的更新方式。通过该方案的应用,可以...

    雄迈专业型IPC云监控P2P设置方法

    总结来说,雄迈专业型IPC的云监控P2P设置是一项简单而实用的过程,只需几步就能实现远程监控。通过P2P技术,用户可以轻松地管理和查看分布在不同地点的设备,提高监控效率,保障安全。无论是在家中、办公室还是其他...

    jxta学习手册(p2p,java)

    JXTA平台不仅仅是一个简单的P2P平台,它还提供了多种服务,如: - **同等地发现**:帮助同等地找到彼此并建立连接。 - **同等地解析**:获取同等地的信息和状态。 - **同等地状态**:监控同等地的状态和健康状况。 ...

Global site tag (gtag.js) - Google Analytics