OverSim是一个基于OMNeT++的专门用来仿真P2P网络应用的开源仿真模块。大结构来说,从下至上依次为OMNeT,INET,OverSim三大模块。
OMNeT是高度模块化的,模块是用NED语言定义的,这些模块或者是复合模块(compound modules)——由其他模块组合而成的,或者是简单模块(simple modules)——直接用C++实现。模块之间通过gate和connection来通信交换信息的。提供可视化工具GUI 显示网络拓扑结构、节点和相关信息。具体omnetpp的学习可以参见omnetpp学习社区http://www.omnetpp.org/,上面的更新很快。OMNeT++是一个跨平台的离散时间事件仿真程序, 并不是基于GPL的。同类的仿真软件还有NS2,但是NS2对于P2P的仿真似乎一直没有专门的团队来支持,需要自己付出大量的工作,所以意义不大。其次,OMNeT++是图形界面和实时显示能力,这个是NS2所没有, NS2是基于仿真结果数据来显示仿真状况,属于电影回放playback类型,而OMNeT++是属于现场直播Live, 很适合在早期发现设计中的错误。 OMNeT++只是一个通用的网络仿真软件, 在其上需要对计算机网络进行仿真,需要INET模块。
INET模块是一个独立的计算机通信网络协议集在OMNeT++上的实现, 包括从物理层到应用层的网络协议,真让人叹为观止。 而且这个模块有专门的团队负责维护, 文档方面非常完备。就这点我就没理由不用它了。 INET模块主要用于互联网的仿真.
OverSim模块用于Overlay类型的应用层网络仿真所设计的。主要用在目前主流P2P应用协议的仿真上。OverSim的底层是建立在一套简化的UDP协议之上(依靠了INET里面的实现),在其上,他定义了一套层次框架,由下至上为 Overlay,应用层1,2,3(Applicatoin Tier1, 2, 3) . 根据其设计的说明,Overlay层用于包括通用的底层Overlay协议的实现。而上层具体的应用,可以一层一层的叠加上去,作为Tier1 Tier2 Tier3。拿P2P的仿真来举例,通用的Chord协议的实现就是放在Overlay这层的,而可以利用Chord的各种应用,比如p2p存储, 聊天,媒体播放功能可以作为Tier1层堆叠上去。 各个层次的对上层接口都由OverSim定义,也可以自己扩充(我就扩充了一套专门用于媒体数据传输的接口)。 可以说OverSim提供了一个很不错的P2P设计的程序框架的参考。
OverSim的结构也是分为三个层次,从下至上依次为underlay,overlay,application。
一、Underlying network model
具有三种网络模型:simple、singleHost、INET
1、simple underlay: 每个节点存储一张全局路由表,数据包是从一个节点直接传送到另一节点上,它的时延或者是一衡量或者和节点之间的距离有关。
2、SingleHost underlay:每个OverSim实例只能仿效一个单一的Host,在真实的Internet网络上它能和其他实例即其他Host相连接。(????)
3、 INET:INET underlay 模型是从OMNeT++里的INET构架上衍生而来的,它包含下部是MAC层的所有网络层的仿真模块。如果需要的话,它对整个骨干网的仿真是非常有用的。INET的架构涉及面很广,相信也可以很好实现无线网络的仿真。这些所有的underlaying网络模型都有一致与Overlay协议的UDP接口,所以对于Overlay层来说下面的不同的underlay网络模型都是透明的。
二、Overlay protocols
大多数是有结构的p2p协议,如:Chord、Kademlia、Koorde、Broose,还有无结构的p2p协议,如GIA。本层具有一些功能:
1、Overlay信息处理(RPC和统计资料数据)
Overlay信息处理者提供RPC接口帮助处理由于包丢失引起的超时和包重发;还收集统计数据的信息,如节点发送,接收,转发和丢失的包的数量
2、一般的查找功能
提供一般的迭代查找和递归查找接口,还包括仿真恶意节点的行为。
3、 提供Overlay拓扑结构的可视化
4、 有一个叫Global Observe的模块,现主要提供两个功能:一是作为一个Bootstrap Oracle,为那些想加入Overlay网络的节点提供一个Overlay网络中已存在的随机节点的地址;二是可用于一个全局统计资料的收集者。
5、 Common API 用于Overlay和应用层之间的通信。对于每个想用这个API的Overlay协议必须至少提供一个KBR(key-based routing interface基于Key的路由接口)给应用层。实现DHT的Overlay协议能够用一个KBR接口为应用层提供服务。
三、Applications
KBR test应用依赖于参数值,周期地发送检测信息,随即的Overlay key 或nodesIDs,并记录信息延时和跳数。OverSim发布的最新版本中在增加了很多应用层仿真程序,如:P2PNS,组播应用等等。