Login
升级VIP 登录 注册 安全退出
当前位置: 首页 > word文档 > 其他文档 > P2P仿真实习报告

P2P仿真实习报告

收藏

本作品内容为P2P仿真实习报告,格式为 doc ,大小 547840 KB ,页数为 29页

P2P仿真实习报告


('西安电子科技大学一种典型分布式对等网络的设计与模拟姓名:王涛指导人:冯景瑜完成时间:2010-8-16目录第一章绪论.................................................................................................................................11.1课题背景.............................................................................................................................11.2课题意义............................................................................................................................11.3课题目标............................................................................................................................2第二章PeerSim简介..................................................................................................................32.1PeerSim概述....................................................................................................................32.2Cycle-based模式仿真.....................................................................................................32.3小结....................................................................................................................................6第三章基于信任模型的文件共享P2P协议.......................................................................73.1节点模型.............................................................................................................................83.2拓扑模型.............................................................................................................................83.3信任模型思想.....................................................................................................................93.4小结..................................................................................................................................10第四章信任模型协议在PeerSim中的仿真实现.............................................................114.1仿真前的必要准备...........................................................................................................114.2PeerSim仿真流程...........................................................................................................114.3信任协议TrustManage...................................................................................................164.4Observer类......................................................................................................................174.5小结..................................................................................................................................20参考文献......................................................................................................................................21实习感言......................................................................................................................................22第一章绪论1.1课题背景P2P的研究热度呈逐年增长的趋势,作为一种完全分布的计算模型,可以脱离中央服务器实现对等节点间的直接通信,从而充分利用每个网络节点自身的资源,实现整个网络计算资源的充分利用和信息资源的高效共享。当前P2P的研究围绕着一系列的算法,包括构建高效P2P网络拓扑的分布式协议,无结构P2P网络的搜索算法,用以应对搭便车现象(FreeRide)的激励机制等等。由于P2P网络的迅速发展,网络节点数巨大,已经不能靠将这些算法应用于一个已经成熟应用的P2P网络去验证算法的性能。应此,P2P网络中的算法和协议通常在仿真中验证,仿真器根据网络模型构建并模仿节点的行为以及网络的传输模式等等。1.2课题意义作为在现实中已经广泛使用的技术,P2P已经累积了大量需要亟待解决的问题。搭便车者(FreeRider)现象的出现,在很大程度上影响着P2P系统的继续推广在分布式计算P2P系统中,如果没有结点的积极参与,分布式的群集功能就无法体现出来;流媒体P2P系统中,如果大量结点断绝上传服务,那么整个网络的缓存信息就不足以使得画面流畅。同样问题也出现在文件分享型P2P系统中,搭便车者极大的打击着结点分享的积极性,甚至能够损害网络原有拓扑稳定。分析搭便车对网络的影响,检验激励机制的稳定性和可靠性,都需要对P2P节点的行为进行专门的模拟测试。而且,安全问题越来越受到重视。2002年日本一种病毒在Winny这种P2P网络中传播,造成大范围的用户私人信息泄露,Winny的作者也被刑拘。这一事件进一步引起了对P2P网络安全的关注。据最新网络安全研究表明,蠕虫病毒能够在具有小世界特性的P2P网络中更加快速的传播。所以,P2P网络的安全研究1势在必行,而一个能够模拟真实攻防环境的平台可以极大的辅助安全策略的制定。P2P网络还有其他很多原因导致必须结合P2P网络的独有特性,为P2P网络量身定做一个仿真平台。比如不同的P2P系统具有不同的应用场合,每一种应用都有单独的技术规范和检验标准。如果没有统一的仿真环境,想要添加新的应用模拟平台就变得不容易,而且仿真的结果也没有可比性,因为不能保证试验是在统一的参数环境下的进行的。1.3课题目标本次课题的目标是:1.找到一种通用的P2P网络的仿真器,它必须有良好的可扩展性,支持较多的节点,有较高的运行效率;2.该仿真器必须使用Java编写,这样就可将很多现成的协议移植进仿真器,也可便于与其他研究人员交流代码;3.自行设计一种典型的基于信任模型的P2P协议,编写代码并调试使其在仿真器上运行,保存运行数据。2第二章PeerSim简介本章是对PeerSim这一P2P专用网络仿真工具的原理和流程的介绍PeerSim是在本次实习调研阶段发现的P2P仿真软件,由于它很好地满足了课题要求,所以实习接下来的内容都是围绕对他的研究展开的。2.1PeerSim概述PeerSim是一个模拟P2POverlay网络的软件,支持结构化和非结构化P2P网络模拟。PeerSim有两种模拟方式,Cycle-based和Event-driven。Event-driven模式相对精确,Eycle-based模式缺少传输层的模拟而且不能起到并发控制的作用,但占用资源少以适合于大规模的模拟,根据官方所发表的一篇最新论文,在拥有4GB内存的情况下,Event-driven模式目前最多支持十万节点级别,而Cycle-based模式则支持千万个节点级别。PeerSim是一个极易扩展的仿真环境,支持动态网络的仿真,协议需要执行特定的PeerSimAPI,但是只需很少的努力,就可以发展成为真正的执行。在指定的参数空间进行检测也是被支持的。PeerSim开始时只是被当作一项特定研究的工具,而在它获得LGPL开源许可,并被发布以来,它吸引了很多独立的研究团体,到目前为止,PeerSim已经被下载了超过12000次,在150篇论文中被引用,而其中只有很少一部分引用是来自PeerSim的作者。2.2Cycle-based模式仿真Cycle-based模型是一个简化的模型,拥有更好的伸缩性及性能,但是Cycle-based模型缺少对传输层的仿真和并行处理,节点之间是直接通信的,仿真核心以一定的顺序周期性地给以节点控制。在运行时,可以进行任意的操作,如调用其它对象的方法并执行一些计算。PeerSim鼓励基于接口的模块化编程,每一个组件都能被其它实现了相同接3口的组件代替,一般的仿真过程如下:1.选择网络大小(即节点数量);2.选择要实验的一个或多个协议并进行初始化;3.选择一个或多个Control对象来监视感兴趣的属性,并在仿真时修改一些参数(比如,网络大小,协议的内部状态,等等);4.根据配置文件,调用Simulator类运行仿真。在仿真时创建的对象都是实现了一个或多个接口的类的实例,主要的接口如表2-1所示。表2-1Cycle-based下的主要接口NodeP2P网络是由节点组成的,节点是协议的容器。Node接口提供了对节点所包含的协议的访问方法,并为节点提供了固定的ID。CDProtocol这是一个特定的协议,被设计用来在Cycle-based模型中运行,它只定义了在每一个周期中要运行的操作。Linkable一般都由协议来实现,这个接口为其它协议提供了访问邻居节点集合的服务,节点间相同的Linkable协议类的实例定义了一个覆盖网络。Control实现了这个接口的类可以在仿真期间的某个时间点调度执行,这些类一般用于观察或修改仿真过程。图2-1Cycle-based下的调度时序Cycle-based仿真的生命周期是这样的:1.读取配置文件(通过命令行参数传递进来),然后仿真器初始化网络中的节点和节点中的协议,每个节点都拥有相同的协议栈。节点和协议的实例是通过克隆来创建的,只有一个原型是通过构造方法创建,其它的4节点和协议都是从这个原型中克隆而来。基于这个原因,协议类中Clone()方法的实现是很重要的。2.初始化操作,设置每个协议的初始状态。初始化阶段是由Control对象控制运行的,仅在实验开始时运行一次。在配置文件中,初始化的组件可以由init前缀识别,在下面讨论的Initializer对象也是Controls,但为了标记其功能以区别于一般的Control对象,它被配置用来在初始阶段运行。在初始化完成后,Cycle-based引擎在每一个周期中调用所有组件(Protocols和Controls)一次,直到完成了指定的周期数,或者某个组件决定终止仿真为止。在PeerSim中每一个对象(Controls和Protocols)都被赋以一个Scheduler对象,它定义了什么时候本组件将会被执行。在默认情况下,所有对象都会在每个周期中运行。但我们也可以配置一个Protocol或Control只在某些特定的周期中运行,也可以在每一个周期中指定组件的执5行顺序。图2-2配置文件图2-1展示了对Controls和Protocols的调度,其中C代表Control而P代表一个协议。图下方的数字代表PeerSim的周期,在最后一个周期后,可以运行一个Control来获取最后的快照(Snapshot)。6在一个Control收集数据时,数据将会被格式化并发送到标准输出或重定向到一个文件以进行后续的处理。配置文件只是一个普通的ASCII文本,本质上就是java.util.Properties,以#开头的行代表注释。配置文件的信息将以键值对的形式被程序读入,如在图2-2所示的配置文件中,random.seed就是一个键,它的值为1234567890。仿真器在初始化时,在需要初始化随机数产生器时,就会在配置文件中搜索random.seed并读取它的值,用它的值初始化随机数生成器。再如,当初始化节点时,需要给节点装入协议实例,具体去装入哪个类的实例,就必须在配置文件中查找,例如当节点有一个名字叫avg的协议时,配置文件就查找protocol.avg键的值,就能找到实现了这个协议的类。总的来说,配置文件就是由用户设置的参数以及用户自定义的类的路径的集合。2.3小结要利用PeerSim循环驱动模式进行仿真,首先必须理解配置文件的作用,要清楚协议组件和控制组件的作用以及被调度的时机。在循环驱动模式下,一些实际P2P系统中的细节被忽略,带来的回报是支持更多的节点以及更快的执行速度。7第三章基于信任模型的文件共享P2P协议本章主要讲述一个典型的基于信任模型的P2P协议的思想以及运行流程,它的配置文件的内容如下:#设置伪随机数生成器的种子random.seed1234567890#设置循环次数为30次simulation.cycles30#在每轮循环后对网络节点进行洗牌的控制组件control.shfShuffle#设置节点个数为5000network.size5000#节点中的Linkable协议设为IdleProtocolprotocol.lnkIdleProtocol#节点中的第二层协议设为pdSim.TrustManage并设置相关参数protocol.trustpdSim.TrustManageprotocol.trust.linkablelnkinit.con.badPeerPercentage0.1#对节点进行连线以构造拓扑的初始化组件WireKOut及相关参数的设定init.rndWireKOutinit.rnd.protocollnkinit.rnd.k20#设置负责填充节点资源向量的pdSim.InitContent为初始化组件init.conpdSim.InitContentinit.con.protocoltrust#设置初始化组件的调度顺序,先调度init.rnd再调度init.coninclude.initrndcon#设置一个在30轮循环过后观察数据的控制组件8control.obspdSim.Observercontrol.obs.protocoltrust3.1节点模型在本协议中,节点是由一个类实现的,当被实例化后,每个节点将拥有独立的内存空间和协议栈,节点由ID和INDEX两个量来标识,其中ID是在节点初始化后不会发生变化的,所以在任何时候ID都可以唯一地标识一个节点,它可以被理解为代表了现实中节点的IP地址,而INDEX则是和网络动态演进相关的一个标识,当仿真一轮结束后,执行“洗牌”(Shuffle)动作后,节点的INDEX可能会变化。当在网络中查找某个节点时,总是按照INDEX遍历所有节点,以搜寻ID为某个特定值的节点。在PeerSim中节点在默认情况下使用peersim.core.GeneralNode类,当然,用户也可以定义自己的节点类,做法是编写一个实现peersim.core.Node接口的类,并在配置文件中加以说明。节点在网络中的动作是由协议来定义的,节点在初始化时,将按照配置文件装入指定协议的实例,每个节点的每个协议实例都拥有相互独立的内存空间。在本例中,每个节点装入了两个协议分别是负责管理拓扑的lnk协议和负责管理节点相互信任的trust协议,它们是从配置文件的protocol.lnk和protocol.trust两个键读入相应的类的。3.2拓扑模型在PeerSim中,当节点建立起来以后,他们之间是没有连接的,也就是说它们仅仅是孤立的节点,在本协议中,拓扑是由peersim.dynamics.WireKOut类来建立的,在配置文件中可以看到,它的键名为为init.rnd,init表明该类是一个初始化组块。它的主要作用为,为每个节点连接K个邻居节点,K的值是读取配置文件中init.rnd.k的键值得到的,在本协议中,这个值是20,即每个节点有二十个邻居节点。可以看到配置文件中关于拓扑的描述中还有init.rnd.protocollnk,这表明WireKOut是通过节点中的lnk协议的实例来建立连接的,具体做法为:向IdleProtocol协议实例的邻居节点数组中添加相应的节点,而IdleProtocol协议正是节点中负责维护邻居节点数组的协议。每个节点的IdleProtocol协议实9例中的邻居节点数组中存有该节点的所有邻居节点。3.3信任模型思想在P2P网络中,由于任何节点都是可以加入的,同时也为网络中的其他节点提供的转发服务,从网络攻击的角度来看,一个“恶意”节点故意将正常的数据替换成伪造的数据,转发的整个P2P网络中,完全可以欺骗其他P2P的节点而不被发现。P2P网络中由于缺乏统一的管理,在发现伪造的数据后,不能控制P2P节点不下载伪造的数据或者阻止P2P网络中伪造数据的传输,从而导致伪造的数据在P2P网络中肆意传播。而且会处于完全失控状态。P2P使得网络热门资源能够在网络中迅速传播,这给病毒和恶意软件提供了传播的捷径。当然,P2P软件本身有可能是无害的,但共享的文件中却可能因为存在漏洞而被利用。流行的RMVB格式存在一个广告弹出的漏洞,这被许多不法分子所利用作散布不良信息的渠道。热门影片的用户关注程度总是比较高,不法分子在影片中携带弹出式广告,使得有害信息在P2P网络上爆炸式地传播,远远超过了在传统C/S模式下的传播速度。基于信任模型的P2P协议认为,信任是主体对客体特定行为的主观可能性预期,取决于经验并随着客体行为的结果变化而不断修正,在本次仿真的文件共享型P2P网络中,节点之间互相评价,评价的依据为该节点提供的正常的下载次数。每个节点都拥有一些资源,当节点需要一个资源时,它向所有邻居节点发送资源请求消息,当一个节点收到资源请求消息后,它首先检查自己是否拥有请求的资源,如果有,则发回一个资源应答消息,如果没有,则将消息的TTL值减1后向自己的所有邻居节点转发。一个节点在收到一条资源应答消息后首先检查自己是否已经拥有该资源,如果该资源应答消息正是自己所需要的资源,则该节点将首先检查发出应答的节点的信誉值,当该值高于阀值时就下载该节点上的资源,若该值低于阀值,则以一个较小的概率下载该节点上的资源,当下载成功时,将给予提供下载的节点进行评价,一般是将其信誉值加一。恶意节点是对看到的网络中的任何资源请求消息都进行应答的节点,但这类节点只提供非法资源的下载,例如病毒,木马等。当一个节点收到一个非法资源的应答时,将会对发出非法资源应答的节点的信誉值减1。这种机制的结果是:兢兢业10业提供正常资源下载的节点的信誉值将会随着时间的推进趋于正无穷大,而那些发出虚假资源应答消息,提供非法资源下载的节点的信誉值将会趋于负无穷大。图3-1资源请求消息和应答消息的传播3.4小结本章是对一个简单的信任模型的思想的阐述,该协议比较简单,它的主要意义还是在于展示PeerSim的流程,测试PeerSim性能,但其可以进行扩充,以完成更加复杂的功能。11第四章信任模型协议在PeerSim中的仿真实现本章将以代码为主线,讲述如何将上一章的这个简单的信任协议写成Java代码,内容会涉及到各种细节问题。4.1仿真前的必要准备首先在sourceforge上下载PeerSim原始文件,最原始的PeerSim仿真器仅仅是一些文本代码和jar包的集合,要想方便的向PeerSim中添加自己的类,最好先将它导入到eclipse中去,通过实践,我总结出导入过程必须包括以下几步:1.新建一个java工程,可以取名为PeerSim;2.将下载的文件中的src中的文件拷贝到项目的src目录中;3.拷贝配置文件(例如config-example1.txt)到项目目录;4.在eclipse中刷新,在左侧找到config-example1.txt点击右键runas---runconfigrations;5.新建一个javaapplication。MainClass中选择peersim.Simulator,arguments中填写配置文件的路径(例如D:\\java\\PeerSim\\config-example1.txt);6.在eclipse选中工程,右键Properties---JavaBuildPath---Libraries---AddExternalJars,添加在peersim-1.0.5文件夹下的四个Jar包;7.在左侧找到config-example1.txt点击右键runas---runconfigurations---classpath删去默认路径,将peersim-1.0.5文件夹下的四个Jar包的路径添加进来8.此时就可以成功运行了,如果配置文件选为peersim-1.0.5文件夹中自带的config-example1.txt,则一个简单的求各节点平均值的仿真结果就会出现在eclipse中。124.2PeerSim仿真流程在一次仿真中所遇到的代码可分为PeerSim内核代码和用户代码,内核代码就是从网站上下载下来的原始文件夹中包含的代码,用户代码是用户自己编写的协议代码、控制代码以及用户自己定义的类,对于内核代码,我们只需大致了解其运行流程、了解内核提供的接口以及如何使用内核,图4-1就是PeerSim内核代码的大致流程。载入配置文件是通过读取先前设置的runconfigrationsarguments中的文件来达到的,在该仿真器中,外部的配置文件被读入后组织成了TreeMap的形式,即以(键,键值)的形式组织,有一些专门的方法用来查找配置文件的具体项。检测仿真模式是通过检查配置文件来实现的,如果配置文件中包含simulation.cycles键,则模式为循环驱动模式,这个过程由peersim.cdsim.CDsimulator类中的isConfigurationCycleDriven()方法来具体实现的,事件驱动模式也以类似的方式通过检测配置文件中是否含有simulation.endtime键来判断。在明确了仿真模式后,就调用该模式的仿真引擎,在本次实习中用到的是循环驱动模式,所以接下来就调用CDSimulator.nextExperiment()方法。各仿真引擎在运行的第一步就是读取配置文件中设置的循环次数。接下来将会初始化网络中的节点,即调用Network.reset(),在本次实习中,用到的是PeerSim内核中自带的节点模型,也就是peersim.core.GeneralNode类,下面是Network.reset()的代码:if(prototype!=null){//notfirstexperimentwhile(len>0)remove();//thisistocallonKillonallnodesprototype=null;node=null;}len=Configuration.getInt(PAR_SIZE);intmaxlen=Configuration.getInt(PAR_MAXSIZE,len);if(maxlen0){for(inti=0;i


  • 编号:1700774076
  • 分类:其他文档
  • 软件: wps,office word
  • 大小:29页
  • 格式:docx
  • 风格:商务
  • PPT页数:547840 KB
  • 标签:

广告位推荐

相关其他文档更多>