西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
西西首頁(yè) 電腦軟件 安卓軟件 電腦游戲 安卓游戲 排行榜 專題合集

DTN仿真工具one

v1.5.0 免費(fèi)版
  • DTN仿真工具onev1.5.0 免費(fèi)版
  • 軟件大小:1007KB
  • 更新時(shí)間:2013-06-19 17:43
  • 軟件語(yǔ)言:中文
  • 軟件廠商:
  • 軟件類別:國(guó)產(chǎn)軟件 / 免費(fèi)軟件 / 行業(yè)軟件
  • 軟件等級(jí):4級(jí)
  • 應(yīng)用平臺(tái):WinAll, WinXP
  • 官方網(wǎng)站:暫無(wú)
  • 應(yīng)用備案:
好評(píng):50%
壞評(píng):50%

軟件介紹

DTN仿真工具,one_1.5.0-RC1版本。芬蘭人開(kāi)發(fā)的一個(gè)專門(mén)用于DTN網(wǎng)絡(luò)仿真的軟件,用Java語(yǔ)言寫(xiě)的.里面有一個(gè)README.txt,很有用,不僅介紹了the ONE的一些性能,還有具體的安裝以及示例。

什么叫dtn網(wǎng)絡(luò)?

DTN(delay-tolerant network)是從ad hoc,WSN(wireless sensor network)等自組織無(wú)線網(wǎng)絡(luò)中抽象出來(lái)的一種網(wǎng)絡(luò)模型.其典型特征是節(jié)點(diǎn)之間的鏈路間歇性中斷且中斷持續(xù)時(shí)間較長(zhǎng),以至于在任意時(shí)刻源節(jié)點(diǎn)和目的節(jié)點(diǎn)間可能不存在路徑.

the one的結(jié)構(gòu)

1 .report包:用來(lái)指定導(dǎo)出哪些類型的報(bào)表,具體可查閱readme.txt文檔。

上圖為這些類的繼承關(guān)系,可在配置文件settings中配置,然后反射注入四類訂閱者(由圖可知為ConnectionListener,UpdateListener,MessageListener,ContactTimesReport四種接口的集合,定義在core包中)里面,然后在不同的事件發(fā)生后,對(duì)四個(gè)訂閱者隊(duì)列進(jìn)行遍歷(四個(gè)隊(duì)列存放在類core.SimScenario中)

2 .routing包:用來(lái)指定消息的路由策略,按組指定。

上圖為該包的繼承關(guān)系,如果是研究算法 的同學(xué),注重點(diǎn)就應(yīng)該就是這個(gè)包了,如:DirectDeliveryRouter--只是簡(jiǎn)單地向最后接收者傳遞,不會(huì)傳給別的結(jié)點(diǎn)中轉(zhuǎn),EpidemicRouter--洪范傳輸,還有1.3中新添的EnergyAwareRouter,就具有能源這個(gè)概念了,因?yàn)閺默F(xiàn)在DTN網(wǎng)絡(luò)的利用來(lái)考慮,能源的消耗很關(guān)鍵。還有一些實(shí)現(xiàn)了現(xiàn)今比較流行的dtn路由算法的類

使用 :只需繼承MessageRouter,覆蓋對(duì)應(yīng)的方法,然后加入自己的實(shí)現(xiàn),再在settings配置文件中配置則可。

3 .movement包:用來(lái)指定結(jié)點(diǎn)的移動(dòng)策略,亦為按組指定。

該包的繼承關(guān)系,其中,大部分的移動(dòng)策略(繼承MapBaseMovement)都是基于給定的地圖文件移動(dòng)(還可以分為不同的路線類型,如人行道,汽車道等),也有部分為隨機(jī)移動(dòng)(RandomWaypoint和RandomWalk)和事件驅(qū)動(dòng)(ExternalMovement和ExtendedMovementModel)

4 .input包:分為兩個(gè)類型,一類為繼承ExternalEvent的消息實(shí)體類,基本為每個(gè)消息對(duì)應(yīng)一個(gè)實(shí)體

上圖為各類消息實(shí)體類的繼承關(guān)系

第二類為實(shí)現(xiàn)EventQueue接口的外部事件

其中DTN2Events為與DTNSim2的事件與The One事件的對(duì)接

5 .core包:包括一些核心的類和核心的接口等

具體執(zhí)行流程應(yīng)該是這樣的:

a.讀取配置文件。

b.初始化模擬環(huán)境,把report,routing等都配置好,并把host生成。

c.初始化模擬時(shí)間

d.檢驗(yàn)當(dāng)前時(shí)間是否小于模擬時(shí)間:是,則跳到e,否,則跳到f

e.模擬環(huán)境update,回到d

f.end

其中主要的流程在world.update方法里面,包括:觸發(fā)事件(消息傳輸,丟包等),移動(dòng)host等。

發(fā)現(xiàn)的問(wèn)題

舉個(gè)例子:如EpidemicRouter(即洪范路由算法),覆蓋了父類的update方法

public void update() {

//super.update做了三件事:傳輸完成的終止傳輸,連接斷開(kāi)的終端傳輸,ttl小于零的丟包處理
super.update();

//檢查
if (isTransferring() || !canStartTransfer()) {
return; // transferring, don't try other connections yet
}
//檢查
// Try first the messages that can be delivered to final recipient
if (exchangeDeliverableMessages() != null) {
return; // started a transfer, don't try others (yet)
}
//問(wèn)題在此
// then try any/all message to any/all connection
this.tryAllMessagesToAllConnections();
}

protected Connection tryAllMessagesToAllConnections(){

//檢查
List<Connection> connections = getConnections();
if (connections.size() == 0 || this.getNrofMessages() == 0) {
return null;
}
//消息按優(yōu)先級(jí)排序
List<Message> messages =
new ArrayList<Message>(this.getMessageCollection());
this.sortByQueueMode(messages);
//問(wèn)題在此
return tryMessagesToConnections(messages, connections);
}

protected Connection tryMessagesToConnections(List<Message> messages,
List<Connection> connections) {
for (int i=0, n=connections.size(); i<n; i++) {
Connection con = connections.get(i);

//如果可以傳輸,就傳輸該消息,并返回傳輸?shù)南ⅰ?br />Message started = tryAllMessages(con, messages);

//如果傳輸了,則返回了
if (started != null) {
return con;
}
}

return null;
}

由上面的代碼可看出,每次傳輸,只會(huì)向一個(gè)連接傳輸,但大家都知道,無(wú)線網(wǎng)絡(luò)結(jié)點(diǎn)與結(jié)點(diǎn)的數(shù)據(jù)傳輸,應(yīng)該是廣播的(只是說(shuō)應(yīng)該),導(dǎo)師也是這樣說(shuō)的,但從代碼可以看出,該軟件是特意這樣做的。所以就有矛盾了,所以也就懷疑其自己的結(jié)論了,但自己只是學(xué)軟件的,對(duì)dtn網(wǎng)絡(luò)只是有一點(diǎn)了解,所以也無(wú)從下手,只能是從代碼角度去推斷了。

軟件標(biāo)簽: 仿真

其他版本下載

發(fā)表評(píng)論

昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
查看所有(0)條評(píng)論 > 字?jǐn)?shù): 0/500

TOP
軟件下載