The ONE中有一系列report的参数来检测试验,比如说消息参数就有传输成功率和往返时间、节点接触次数,相互接触次数以及消息传输延迟时间,消息源节点和目的节点的距离等。还有一些用于和其他程序交互的参考模块。节点连接信息可以直接在DTN的模拟环境中体现出来,the ONE就是一个可以用来模拟该环境的模拟器。还有一些生成其他参数的report程序可以输出适合ns2移动节点扩展的移动轨迹。
1 AdjacencyGraphvizReport 节点连接次数报告,反应节点之间的亲密关系,从该报告中可以看到哪些节点连接紧密。节点生成在某段时间内所有节点之间的连接次数。
eg:c2--d3 [weight=3] 表示从开始运行到结束节点c2和d3的接触次数,只有运行结束才会产生该报告。-----可以利用Graphviz生成邻接图。
2 ConnectivityDtnsim2Report 记录连接的信息,生成两个节点的连接情况。
eg:715.60 a0 <-> b1 up 表示在时间715.60的时候,节点a0请求和节点b1建立连接,991.60 a0 <-> b1 down表示991.60时间a0请求和b1断开连接
3 ContactsDuringAnICTReport 两个节点的接触次数 eg:0 85,前面的数字表示节点a主动找b的连接次数,后面的数字表示节点b主动找a的连接次数,代码中并没有显示出具体节点,如果需要可以在代码中添加相应代码即可。???
4 ContactsPerHourReport 每个小时中所有节点接触的次数 eg:0 4,表示第一个小时,接触4次;1 13,表示第二个小时,接触13次。
5 ContactTimesReport 某个时间的接触次数,eg:66.0 3 其中66.0表示时间,3表示节点接触次数。
6 CreatedMessagesReport 生成的消息的信息,主要包括消息生成时间,消息id,消息大小,消息的源节点,消息的目的节点,ttl大小和是否有反馈消息
7 DeliveredMessagesReport 显示传输成功消息的传输信息,包括消息的接收时间、消息id、消息大小、传递消息的跳数、传递消息的时间、源节点、目的节点、消息余下的ttl、有无返回结果以及消息的传输路径内容。
eg:# time ID size hopCount deliveryTime fromHost toHost remainingTtl isResponse path
721.6000 M23 1488617 1 51.6000 b1 a0 299 N b1->a0
其中721.6000代表消息接收时间 ,M23代表消息id ,1488617代表消息大小,1代表传递消息的跳数,51.6000代表消息的传递时间(生成消息时间-接收消息时间),b1消息的源节点,a0消息的目的节点 ,299代表TTl大小,N代表消息没有反馈信息,b1 ->a0代表消息的传输路径是从b1传递到a0。
8 DistanceDelayReport 生成消息的一些传输信息,包括源节点和目的节点的距离,消息的产生时间,和消息的跳数以及消息id等内容。
eg:# distance at msg send delivery time hop count MSG_ID
81.3747 51.6000 1 M23
其中81.3747代表消息源节点和目的节点的距离,51.6000代表消息产生时间,1代表跳数,M23代表消息的id。
9 DTN2Reporter 连接DTN2的report ?
10 EncountersVSUniqueEncountersReport 该报告反应了节点接触次数和接触的节点个数信息,该报告的行数为节点的个数,中间的数字是该节点和别的节点的接触次数,后面的数字为该节点接触的节点个数
eg:
0 4 3
1 3 3
2 4 2
3 3 2
4 6 1
意思就是一共有五个节点,第一个节点接触次数为4,接触了3个节点
11 EnergyLevelReport ??无法运行
12 EventLogReport 记录消息的报告,主要记录内容有消息生成时间,action名字(没有找到调用该方法的地方,没有找到action的具体含义),节点(如果该action的第一个节点不为空就显示第一个节点,第二个节点不为空就显示第二个节点,都不为空就都显示),消息id,其他信息(有就显示,没有就不显示)
13 InterContactTimesReport没看懂 ?
14 MessageDelayReport 传输延迟消息的信息,包括延迟时间和延迟率 延迟时间=消息收到时间-消息创建时间,延迟率=延迟消息个数/创建的消息个数。
eg:# messageDelay cumulativeProbability
303.0000 0.0033
15 MessageDeliveryReport 反应消息传输成功率的一个report,报告主要包含消息产生时间,生成消息个数,成功传输消息个数和传输成功率
eg:# time created delivered delivered / created
883.0000 30 10 0.3333
四个数字分别代表上述四个指标,其中传输成功率=(1.0 * delivered) / created;
16 MessageGraphvizReport 该报告反映成功传输消息的信息,在报告开头,显示有多少个消息被成功传输,之后详细列出来成功传输消息的传输路径。
eg: 15 messages delivered at sim time 9000.0000
digraph msggraph{
t3<——>t5;
……}
17 MessageLocationReport 需要参数 ?
18 MessageReport 成功传输的消息的信息,主要包括消息id、消息的创建时间和接收时间
19 MessageStatsReport 该报告是消息的一些综合信息,(不是单个消息的信息,而是所有消息的信息)主要包括创建消息个数(created),延迟的消息个数(relayed),中止失败的消息个数(aborted),丢弃的消息个数(dropped),移除的消息个数(removed),成功传输的消息个数(delivered),传输成功率(delivery_prob),有反馈的消息传输成功率(response_prob),开销率(overhead_ratio),平均延迟(NaNlatency_avg),中位数带宽延迟(NaNlatency_med),平均跳数,中继节点个数,平均节点缓存消息的时间,节点缓存消息的中间时间,平均往返时延,往返时延的中位数。
其中传输成功率deliveryprob = (1.0 * delivered成功传输的消息个数) / Created创建消息个数; 开销率overHead = (1.0 * (Relayed延迟的消息个数-this.nrofDelivered成功传输的消息个数)) /this.nrofDelivered成功传输的消息个数; 有反馈的消息传输成功率responseProb = (1.0*this.nrofResponseDelivered) / this.nrofResponseReqCreated。
20 MovementNs2Report 显示节点的下一跳信息,主要有下一跳节点的x坐标和y坐标,以及节点的运行速度。
eg: ns- at 0.79999 “\$node-(1) setdest 1438.52160 400.64871 12.381985”
21 PingAppReporter 生成两个节点的一些信息(具体哪两个节点要在PingAppReporter中指定 ),报告中的内容有报告产生时间,节点a发送消息个数,接收消息个数,节点b发送消息个数,接收消息个数,和三个成功率,分别为节点a的传输成功率=节点a接收消息个数/节点a发送消息个数,节点b的传输成功率,还有节点a和b的传输成功率=b接收的节点个数/节点a发送个数(注:具体的a和b要在代码中确定)?
22 Report ?
23 TotalContactTimeReport报告显示所有节点接触的时间和,主要有生成报告的时间和所有节点接触的时间和。
24 TotalEncountersReport
25 UniqueEncountersReport
26 ConnectivityONEReport
针对上面一些report分一下类,考察消息的report主要有CreatedMessagesReport(生成消息的信息) 、DeliveredMessagesReport (成功传输消息的传输信息)、DistanceDelayReport (消息的传输距离)、EventLogReport 、MessageDelayReport (传输延迟消息的信息)、MessageDeliveryReport (消息传输成功率)、MessageGraphvizReport (成功传输消息的传输路径)、MessageStatsReport (综合信息,包括开销率,传输成功率,平均延迟等)
考察节点信息的主要有 AdjacencyGraphvizReport (节点连接次数报告)、ConnectivityDtnsim2Report (连接信息报告)、ContactsPerHourReport (每小时节点接触次数)、ContactTimesReport (某个时间节点接触次数)、EncountersVSUniqueEncountersReport (节点接触次数和接触节点个数)、MovementNs2Report (当前节点的下一跳坐标,运行速度)、PingAppReporter (两个节点之间传输成功率)、TotalContactTimeReport(所有节点接触时间总和)、TotalEncountersReport(节点接触的最大次数)、UniqueEncountersReport (接触其他节点的个数)、ConnectivityONEReport (节点连接的时间)
建立新的拓扑结构,只需要更改Data文件夹下面的数据,和配置文件。
期间也遇到了小小的麻烦,第一个就是坐标问题,经过珊珊同学的思考,我们终于搞清楚模拟器中的坐标和定义时节点的坐标的联系了,贴上来,大家一起分享
假设我们新建节点为(Xa,Ya),(Xb,Yb),(Xc,Yc)
取m=Xa,Xb,Xc中的最小值, n= Ya,Yb,Yc中的最大值
则以上三个点在模拟器中相应的坐标为(Xa-m,n-Ya),(Xb-m,n-Yb),(Xc-m,n-Yc)
为了这个问题,纠结了一个下午,点的坐标和路径直接相关,而路径建立的不对,就不能用地图模式进行实验。所以解决了节点坐标的问题之后,不能用地图模式进行实验的问题也迎刃而解了(我之前的实验一直不能用地图模式进行)。
和1.3版本想对比1.4版本的模拟器还有个优点:reports的结果显而易见,1.3版本的还需要自己分析,自己计算,而1.4版本的直接就生成了可以作为性能考察指标的数据结果。
一 Maxprop算法
二 Prophet算法
Maxprop算法的性能是目前接触到的几个算法中性能最好的,在基于模型的拓扑结构上运行效果极其的好,好到无法超越,看了这么长时间,对该算法都没有思路
再讲讲第二个算法吧
prophet算法最初出自于《MobiHoc Poster:Probabilistic Routing in Intermittently Connected Netwoks》这篇文章,该算法的思想就是添加了概率的传递性。
PROPHET协议是一种基于概率策略的路由协议,利用节点间相遇的历史信息和传递性来选择下一跳节点,以传输可预测性P(a,b)作为概率度量标准,即:
1 p2=p1+(1-p1)*0.75(其中0.75也是作者取的数字,为什么选择这个数字,作者并未说明,可能是实验数据显示0.75比较合适)
其中,a表示任意节点,b表示节点a所知道的目的节点,已知ab在t1时刻相遇的概率是p1,求t2时刻的概率p2,。界定的传输可预测性以向量形式储存,且可在节点间进行交换。
该公式p2=p1+(1-p1)*a 是针对t1时刻相遇,t2时刻又相遇的节点接触概率的计算方法
2 对于不经常遇见的节点,他们之间的相遇概率会随着时间的增加而减少,计算公式为p2 = p1*(r的k此方)k为时间,r这里是参数
r值这里取的值为0.98,我经过多次实验发现0.98的效果也是最好。
3 另外,传输可预测性具有传递性,即若节点A常与节点B连接,而节点B又常与节点C连接,则可以认为节点C与节点A能够以高成功率转发消息。传递性可表示为
p(a,c)=p(a,c)old+(1-p(a,c)old)*p(a,b)*p(b,c)*beta
其中beta属于[0,1],为常量因子,PROPHET协议的消息转发思想为,当节点A与B连接时,若节点B具有更高的传输可预测性,则节点A将消息转发到节点B。
ONE中的代码为
if (prophetSettings.contains(BETA_S)) {
beta = prophetSettings.getDouble(BETA_S);
}
else {
beta = DEFAULT_BETA;
}
代码中定义是这样的:public static final String BETA_S = "beta";
找了几遍都没有找到BETA_S是多大,DEFAULT_BETA的值为0.25.
作者在文章中提到了三点future work
1 增加ACK机制
2 建立模拟场景来分析该算法的好坏
3 改善文章提到的两个方程式,提高传输成功率
针对上述三点改善的地方,第一点已经实现,在十字型拓扑结构下改善效果明显,多个节点情况下不是很明显
对于第二点还没有思路
对于第三点,也尝试了很多,目前还没有找到合适的方法……
这里描述一个别的作者针对第三点所做的改善,一个新作者改进了老作者根据ab节点t1时刻的传输成功率p1估算t2时刻的传输成功率,新作者认为用这个时刻来估计这个值,误差会比较大,他采取的方法是
p=(p1*t1+p2*t2)/(t1+t2)
他的思想不是采取t2时刻的接触概率,而是采取这一段时间的平均接触概率。比如说,现在要计算t2时刻他们的接触概率,新作者的意思是不采取t2时刻接触概率,而是用这段时间的平均概率来表示t2时刻的接触概率。新作者的思路是
先用老作者提出了的公式计算出p2,p2=p1+(1-p1)*0.75计算出来p2
然后用p=(p1*t1+p2*t2)/(t1+t2)这个公式计算出来在[t1,t2]时间段的值
添加可视化的折线图
作为参照标准的实验运行结果是:
数据传输成功率0.0447(节点传输半径设置的比较小,所以成功率很低)
丢包率 0.4680
开效率0.9008
平均延迟148.7397
节点个数增加一倍
数据传输成功率0.7165
丢包率0.510
开效率:0.9487
平均延迟:208.5433
发送速率增加1倍
数据传输成功率0.0457
丢包率0.292
开效率:0.4624
平均延迟:144.6739
传输半径增加1倍
数据传输成功率0.0645
丢包率0.454
开效率:1.1852
平均延迟:143.0825
缓冲大小增加1倍
数据传输成功率0.0774
丢包率0.487
开效率:0.8150
平均延迟:1014.4911
TTl大小增加1倍
数据传输成功率0.0447
丢包率0.467
开效率:1.0076
平均延迟:655.3519
消息大小增加1倍
数据传输成功率0.0232
丢包率0.529
开效率:0.8236
平均延迟:234.5695
在节点比较少的情况下,增加节点个数可以大大提高传输成功率