在Peersim中首先要建立节点(节点模型),之后把节点连接起来(拓扑模型)
节点是由一个类实现的,当被实例化后,每个节点将拥有独立的内存空间和协议栈
节点由ID和INDEX两个量来标识,
其中ID是在节点初始化后不会发生变化的,所以在任何时候ID都可以唯一地标识一个节点,它可以被理解为代表了现实中节点的IP地址,
而INDEX则是和网络动态演进相关的一个标识,当仿真一轮结束后,执行“洗牌”(Shuffle)动作后,节点的INDEX可能会变化。
当在网络中查找某个节点时,总是按照INDEX遍历所有节点,以搜寻ID为某个特定值的节点。
在PeerSim中节点在默认情况下使用peersim.core.GeneralNode类
当然,用户也可以定义自己的节点类,做法是编写一个实现peersim.core.Node接口的类,并在配置文件中加以说明。
节点在网络中的动作是由协议来定义的,节点在初始化时,将按照配置文件装入指定协议的实例,每个节点的每个协议实例都拥有相互独立的内存空间。
每个节点装入了两个协议分别是负责管理拓扑的lnk协议和负责管理节点相互信任的trust协议,它们是从配置文件的protocol.lnk和protocol.trust两个键读入相应的类的。
【这样稍微明白了之前的那个配置文件了】
在PeerSim中,当节点建立起来以后,他们之间是没有连接的,也就是说它们仅仅是孤立的节点
在本协议中,拓扑是由peersim.dynamics.WireKOut类来建立的,在配置文件中可以看到,它的键名为为init.rnd,init表明该类是一个初始化组块。
它的主要作用为,为每个节点连接K个邻居节点,K的值是读取配置文件中init.rnd.k的键值得到的,在本协议中,这个值是20,即每个节点有二十个邻居节点。
配置文件中关于拓扑的描述中还有init.rnd.protocol lnk,这表明WireKOut是通过节点中的lnk协议的实例来建立连接的
具体做法为:
向IdleProtocol协议实例的邻居节点数组中添加相应的节点,而IdleProtocol协议正是节点中负责维护邻居节点数组的协议。
每个节点的IdleProtocol协议实例中的邻居节点数组中存有该节点的所有邻居节点。
【这样也算解释了之前的关于配置文件的一些代码吧】
#节点中的Linkable协议设为IdleProtocol
protocol.lnk IdleProtocol
这句话表示,我们设置了负责管理拓扑的协议,这个协议是:IdleProrocol 【虽然现在还不清楚这个协议具体是什么】
#节点中的第二层协议设为pdSim.TrustManage并设置相关参数
protocol.trust pdSim.TrustManage
protocol.trust.linkable lnk
init.con.badPeerPercentage 0.1
第一行:设置了负责管理节点相互信任的协议,这个协议是:pdSim.TrustManage
第二行:【这个还不清楚,以后补上来】
第三行:【这个也是TvT】
#对节点进行连线以构造拓扑的初始化组件WireKOut及相关参数的设定
init.rnd WireKOut
init.rnd.protocol lnk
init.rnd.k 20
第一行:构造拓扑,键名为:init.rnd 值为:WireKOut 因为在这个协议中拓扑是由peersim.dynamics.WireKOut类来建立的
第二行:表明WireKOut是通过节点中的lnk协议的实例来建立连接的
第三行: 每个节点的邻居节点值为20