




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
P2P网络中激励机制和公平交换研究项目模拟系统说明书 2006-10-241 总体说明本模拟系统作为P2P网络中激励机制与公平交换研究项目中的一部分,承担着模拟P2P网络和分析激励机制和公平交换的任务。模拟系统暂拟命名为P2PFairExchange。P2PFiarExchage采用Java语言编写,利用PeerSim仿真器模拟P2P网络分析协议。目前,模拟系统已经实现了类似KaZaA协议的非结构化,无中心节点的拓扑结构,构建了普通节点和超级节点的两层网络拓扑结构。如图1-1所示。图1-1 两层的P2P网络2 模拟系统详细分析与说明2.1 背景现实的P2P网络具有规模大,节点的加入和退出难以预知,网络动态性强等特点。在分析网络协议时,难以确定P2P网络的具体环境,同时也难以排除网络中不可预知的因素的干扰。在此种环境中实现对网络协议的准确分析评估是困难的,必须构建一个相对稳定可控制的网络模拟环境。仿真器PeerSim是BISON 项目组为P2P网络研究开发的模拟软件,能很好的构建P2P的网络环境。因而实验采用PeerSim来构建P2P虚拟网络。2.2 peesim仿真器PeerSim是用JAVA实现、基于组件技术的仿真器,很好地支持了P2P网络的可扩展性和动态性。支持基于对象的有标准组件的编程,实现同一接口的组件可以很容易地替代其他的组件。它使用两种模型进行模拟,一种是基于Cycle的模型,另一种是基于Envent的模型。实验采用基于Cycle的模型。PeerSim基本组件和接口如表2-1,表2-1 PeerSim的基本组件和接口NodeThe P2P network is composed of nodes. A node is a container of protocols. The node interface provides access to the protocols it holds, and to a fixed ID of the node.CDProtocolIt is a specific protocol, that is designed to run in the cycle-driven model. Such a protocol simply defines an operation to be performed at each cycle.LinkableTypically implemented by protocols, this interface provides a service to other protocols to access a set of neighbor nodes. The instances of the same linkable protocol class over the nodes define an overlay network.ControlClasses implementing this interface can be scheduled for execution at certain points during the simulation. These classes typically observe or modify the simulation.PeerSim基于Cycle的模拟机制如图2-1所示。 init表示初始化类,在模拟开始初始化虚拟网络中的各个组件;C表示Control类,控制模拟过程中网络的各节点状态行为以及其他在模拟中需要改变的网络环境;P表示Protocol类,定义协议本身。PeerSim通过读取用户定义的configure file来控制模拟的进行。图 2-1 PeerSim基于Cycle的驱动机制 2.3 P2PFairExchangeP2PFairExchange以仿真器PeerSim为模拟平台,创建了JAR包kazaa。实现了类似KaZaA协议的非结构化,无中心节点的拓扑结构,构建了普通节点和超级节点的两层网络结构。kazaa包主要实现了以下的功能:1 为网络中每个节点分配一个随机二维地址(x,y);2 按照一定的几率随机选取超级节点,超级节点间两两连接,形成一个完全无向图;3 每个普通节点与离自己最近的超级节点建立连接,普通节点间无连接;4将每个超级节点及与之连接的普通节点的地址输出到文件,并使用gnuplot进行作图分析模拟结果。P2PFairExchange通过KazaaInitializer类为网络中每个节点随机分配一个二维地址(x,y),WireKazaaTopology构建了普通节点和超级节点的两层网络结构,KazaaObserver输出模拟结果。2.3.1 KazaaProtocolKazaaProtocol类继承PeerSim的protocol类,定义了一个类似容器的类,用于存放节点地址。并提供了对地址进行操作的一系列方法。getX( )和getY( )返回节点的二维地址,setX( double x)和setY(double y)设定节点的二维地址。具体代码如下:/定义一个协议类public class KazaaProtocol implements Protocol /* 二维地址 */ private double x, y; / - / Constructor / - public KazaaProtocol(String prefix) /* 默认初始化为-1*/ x = y = -1; public Object clone() KazaaProtocol inp = null; try inp = (KazaaProtocol) super.clone(); catch (CloneNotSupportedException e) / never happens return inp; public double getX() return x; public void setX(double x) this.x = x; public double getY() return y; public void setY(double y) this.y = y; 2.3.2 WireKazaaTopologyWireKazaaTopology继承WireGraph,完成了随机选取超级节点,建立超级节点间以及超级节点和普通节点间的连接,构建了P2P双层网络结构,是kazaa包中最核心的类。WireKazaaTopology类利用数组marker标识节点是否为超级节点。完成随机建立超级节点的功能后,超级节点间建立两两互连,形成一个完全无向图。普通节点通过方法distance(Node new_node, Node old_node, int kazaaPid)计算自身与所有超级节点间的距离来选取最近的超级节点进行连接。节点间的连接调用类graph的setEdge(int i ,int j )实现。以下为部分代码。 /建立双层拓扑结构 public void wire(Graph g) /标识节点是否为超级节点的数组 int marker = new intNetwork.size(); /生成超级节点 for(int i = 0;i Network.size();+ i) /生成一个1100的随即数 if(CommonState.r.nextInt(100) = (probability*100) markeri = 1; /初始化超级节点间的连接 for(int i = 0;i Network.size();i +) if (markeri = 1) Node superNode = (Node) g.getNode(i); for(int j = 0;j Network.size();j +) if (markerj = 1 & g.isEdge(i,j) = false) g.setEdge(i, j); /* * 初始化普通节点和超级节点间的连接,选取离节点最近的超级节点进行连接 */ for (int i = 0; i Network.size(); + i) if (markeri != 1) Node n = (Node) g.getNode(i); / 选取离此节点最近的节点进行连接 boolean linkMarker = false; int candidate_index = 0; double min = Double.POSITIVE_INFINITY; /如果节点已经有连接,则退出 for (int j = 0; (j Network.size() & (linkMarker = false); j +) if (markerj = 1 ) if (g.isEdge(i,j) linkMarker = true; Node superNode = (Node) g.getNode(j); double value = distance(n, superNode, kazaaPid); if (value min) / candidate = superNode; / best super node to connect to min = value; candidate_index = j; if(linkMarker = false) g.setEdge(i,candidate_index); /* *返回两节点间的距离,如果节点未分配地址则抛出异常 */ private static double distance(Node new_node, Node old_node, int kazaaPid) double x1 = (KazaaProtocol) new_node.getProtocol(kazaaPid).getX(); double x2 = (KazaaProtocol) old_node.getProtocol(kazaaPid).getX(); double y1 = (KazaaProtocol) new_node.getProtocol(kazaaPid).getY(); double y2 = (KazaaProtocol) old_node.getProtocol(kazaaPid).getY(); if (x1 = -1 | x2 = -1 | y1 = -1 | y2 = -1) throw new RuntimeException( Found un-initialized KazaaProtocal . Use e.g., KazaaInitializer class in the config file.); return Math.sqrt(x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2); 2.3.3 KazaaInitializerKazaaInitializer实现Control接口,为网络中每个节点分配一个随机地址。调用CommonState类生成随机数。以下为部分代码。 public boolean execute() / 为每个节点设置一个随机地址 for (int i = 0; i Network.size(); i+) Node n = Network.get(i); KazaaProtocol prot = (KazaaProtocol) n.getProtocol(pid); prot.setX(CommonState.r.nextDouble(); prot.setY(CommonState.r.nextDouble(); return false; 2.3.4 KazaaObserverKazaaObserver继承GraphObserver,将每个超级节点及节点的邻居节点的地址输入到文件中,文件名从configure file中读取。部分代码如下。/* *将网络中节点的地址输出到ps输出流中*/private static void graphToFile(Graph g, PrintStream ps, int kazaaPid) for (int i = 0; i g.size(); i+) Node current = (Node) g.getNode(i); double x_to = (KazaaProtocol) current.getProtocol(kazaaPid).getX(); double y_to = (KazaaProtocol) current.getProtocol(kazaaPid).getY(); for (int index : g.getNeighbours(i) Node n = (Node) g.getNode(index); double x_from = (KazaaProtocol) n .getProtocol(kazaaPid).getX(); double y_from = (KazaaProtocol) n .getProtocol(kazaaPid).getY(); ps.println(x_from + + y_from); ps.println(x_to + + y_to); ps.println(); 2.3.5 configure fileConfigure file 是PeerSim模拟中一个重要的组成部分,模拟需要的所有组件和参数都必须在configure file中定义,PeerSim驱动器通过读取congfigure file中的这些组件和参数来驱动模拟。本模拟实验模拟周期为1,网络规模为100,以5%的几率生成超级节点。调用kaza包以及PeerSim库中的一系列组件进行模拟,如下所示。# Complex Network file:random.seed 1234567890#模拟周期simulation.cycles 1#网络规模network.size 100#协议类protocol.link IdleProtocolprotocol.kazaa kazaa.KazaaProtocol#初始化类init.0 kazaa.KazaaItocol kazaainit.1 kazaa.WireKazaaTopologyin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论