Author:bakari Date:2014.1.14
轉載請注出處:http://www.cnblogs.com/bakari/p/3519841.html,謝謝!
本學期開始做真正意義上的研究,主要方向為wireless and mobile network,VANET。之前一直在看paper,現在由於任務需求,需要盡早把一些科研工具學透,包括模擬器,建模解模工具以及非常重要的python,一切都是新東西,只能邊學邊實踐,並盡可能提高效率,盡量地往前趕。
今天第一次接觸one這個模擬器,關於MN的模擬器有很多,之前有接觸過NS2和NS3,NS2是一款開源的免費軟件,用C++外加tcl腳本語言所寫,對於一般的場景已經足夠,主要用於模擬MANET,對於拓撲動態變化的場景適應不是很好,非常不穩定,如VANET,另外,如果仿真的節點過多,速度會非常慢。此外,仿真的腳本用tcl來寫,除了對C++精通外,還要下功夫了解之;
NS3,並不是NS2的升級版,用C++語言所寫,外加一些腳本優化模塊,用python所寫,python是世界上效率最高的語言(Bruce大師所講),在NS3中,新增了802.11協議的很多模塊,而且對物理層中MAC層和PHY層做了相當的優化,仿真速度更快而且占用內存更少,目前不支持GUI,聽說正在開發,但由於沒有GUI,反而減少了仿真的限制,可以自定義節點的數量和通信的接口,更加的靈活,另外一點簡單易學,但需要熟悉python,仿真的腳本部分要用python來寫。
本來之前一直在學NS3,但和學長交流后,他建議我學ONE,ONE也是一款開源免費的,不過是用java所寫的DTN網絡模擬器,使用於任何DTN的環境的路由協議和應用研究分析。它具有面向對象,離散事件驅動、可以模擬真實網絡環境的特點。ONE在單個框架中具有模擬分析多種DTN協議的能力,並且不像其他DTN模擬器那樣只是關注於路由的模擬,它將移動模型、DTN路由和可視化的圖形界面整合為一體。這樣ONE就非常容易進行擴展,並可以提供大量的結果報告和分析模型,以便后期做進一步的數據分析和模擬。
此外,還有一些模擬器,如OMNeT++(類似於ns2)和DTN 路由(如dtnsim and dtnsim2),前者缺乏對DTN很好的支持,而后者只是集中在路由的模擬。另外,還有一款商業的網絡仿真軟件OPNET,功能很強大,可以仿真基本上所有的網絡,如以太網、無線網絡等等。因為是商業軟件,所以它的圖形界面做的很好,並且帶有各種分析工具,提供了大量的網絡設備模型,用戶可以直接使用這些模型進行仿真,同時也可以自己建立進程、節點和網絡進行仿真,最后根據自己的仿真結果分析問題,提出改進意見。但由於是商業的,缺點就是價格很貴,而且模塊的更新很慢。
1、下面主要對今天所看的有關ONE的相關資料進行總結,並鞏固相關知識點:
reference:
【1】The ONE Simulator for DTN Protocol Evaluation
【2】Opportunistic Network Environment simulator
【3】homepage:http://www.netlab.tkk.fi/tutkimus/dtn/theone/可以下載軟件和源碼
首先,從整體上把握ONE的基本框架,如下圖:
從圖上可以看出,在ONE中,一個模擬環境包含節點的移動模擬,路由模擬,可視化的界面以及消息報告模塊。移動模型可以通過整合的移動模塊產生,也可以通過外部的接口人工導入,模擬產生的消息事件可以導出到報告模塊做進一步分析。
節點移動行為通過movement models實現,軟件已經整合了六種移動模型,詳見【2】,當然也可以自定義自己的移動模型,定義的方法有兩種,一種方法通過外部收集的trace集進行導入,trace集有嚴格的數據格式(比如節點位置(GPS),buffer size,速度等),CARWDAD網站中收集了各種移動模型的真實場景的數據。另外一種方法通過一個外部模塊接口實現。路由功能通過routing modular實現,同樣,ONE已經定義了六種路由模型,詳見【2】,這六種路由模型皆為active routing,為了與外部的其他DTN路由模擬器的路由模型(如dtnsim)交互,或是方便自定義自己的路由算法,ONE特意設定了一個passive routing接口,如此,方便了ONE路由模型的擴展。路由模塊主要負責消息的傳送,包括消息的copy,relay,receive,abort等事件。消息事件的產生則由event generator負責。模擬的結果作為輸出事件通過simulation engine輸入到report modular中做進一步分析處理,處理結果再進一步被外部的post-processing tools處理,產生關於本次模擬的統計信息,這些信息可以通過作圖工具(如Graphviz和gnuplot)直觀地顯示出來。另外,GUI可以顯示出整個模擬的場景和節點的狀態信息,如:位置,相遇時間,信息攜帶者,信息傳送的量等。
各個模塊詳細記錄了當前操作的狀態,模塊之間通過bus進行通信,共享各模塊相互操作的結果。如節點移動模塊可以根據路由模塊的狀態改變它的移動行為,反過來,路由模塊可以基於節點移動模塊中的相遇時間調整通信的參數。
2、下面對軟件框架的各個部分進行簡單的說明和整理:
Software architecture
首先,軟件各個模塊的package,以及它們之間的交互顯示如下:
每個模塊分別對應上面的體系結構,其實現都是繼承至一個基類,然后進行自身模塊的擴展,core package實現了DTN主機以及它們之間的連接關系;gui package實現和GUI相關的類,playfield package是它的一個子類,負責整個界面的中央部分,ui實現了與用戶交互的接口類和基於文本的console 接口(傳說中的黑框,ONE中也作為模擬界面,名為patch);routing實現
路由功能,movement實現節點的移動行為,將routing和movement模塊產生的結果導入到report package中進行處理,最后,test package沒有直接和核心模塊相連,它主要包含系統測試的相關類,以此來檢驗模擬的結果是否達到真實的場景需求。
Movement models
如下圖,節點的移動實現都是繼承自MovementModel,軟件實現了六種基本的移動模型,每種模型的運作機理詳見【2】,ExternalMovement模塊可以對導入的trace進行操作,trace數據的移動模型一般是基於map的,其數據格式是WKT,換句話說,只有WKT格式,ONE才能識別,有一個工具可以將獲取的trace數據格式轉化成WKT進行模擬,即一個GIS的開源項目OpenJUMP。
Routing models
同樣,各路由模塊的實現也是繼承自MessageRouter,主要實現了六種active routing, First Contact [13], Direct Delivery [24], Spray and Wait [25] (normal and binary), Epidemic[26], PRoPHET [17] and MaxProp [3].詳見【2】and within reference。PassiveRouter模塊定義了加載其他路由協議的接口。
3、模擬器基本的框架就是這樣,另外加幾點說明:
節點按組分成不同的類型,如car,pedestrian,bus,etc.相同組的成員共享相同的配置參數,如buffer size,radio range 和mobility model。全部的移動模型,報告模塊,路由算法以及事件產生器等模塊在模擬開始建立時就自動加載到模擬環境中,開發人員開發的模塊亦是如此。
External event and reporting frameworks是系統主要外部通信接口,一個充當輸入,一個充當輸出,External event framework將外部消息事件導入到模擬器進行模擬,有兩種導入的方法:trace文件和事件產生器模塊。trace文件包括時間戳的文本文件。而事件產生器模塊則是一個java類,能夠產生和trace文件相同的消息事件。模擬后的結構交由reporting framework進行處理。
ONE提供了兩種模擬的環境,一種就是GUI,另外一種是patch mode,通過命令行實現,批處理的方式在模擬的數據量大,運行時間長的時候使用效果好,由於沒有GUI,所以可以使用硬件全部的處理能力進行模擬。另外,該模式有一個有用的特性叫run indexing。該特性有個好處可以在一個配置文件中定義一組場景,用數組的形式進行存儲,每個場景有不同的配置參數,可以根據不同的參數組合來決定模擬的過程,而且,可以在命令行下定義模擬運行的次數和每次運行的時間。
ONE容易被擴展,因為它的程序被一個開源的GPL許可發布。任何人都可以去修改它並重新發布。為此,開發維護人員已經開發了可擴展的鈎子函數,可以直接利用這些函數接口進行擴展,而不需要對源碼進行修改。將修改的模塊或新添加的模塊作為一個插件來使用,而不用對整個模塊進行批處理,大大方便了開發人員。
4、下面,總結幾款以后會用到的工具:
CRAWDAD:http://crawdad.cs.dartmouth.edu/里面的數據集是真實場景下收集的數據。
OpenJUMP:http://openjump.org/將獲取的map數據轉換成WKT格式進行模擬。
TRANSIMS:Evaluating Vehicle Network Strategies for Downtown Portland: Opportunistic Infrastructure and the Importance of Realistic Mobility Models 可以合成移動的trace集
Graphviz:http://www.graphviz.org/可以顯示節點間的連接圖和消息從源節點到目的節點的傳送圖。
gnuplot:http://gnuplot.info/可以分析節點相遇時間及衡量網絡性能的參數,如延遲,帶寬等。
OpenStreetMap:http://www.openstreetmap.org/允許導出真實世界的道路數據,可以很方便地進行道路拓撲圖的設計工作。在http://www.tm.kit.edu/~mayer/osm2wkt/ 下載一個osm2wkt.jar包進行轉換,方法:java -jar ./osm2wkt.jar mapfile.osm
當然,該模擬器目前還存在一些缺陷,主要表現在:為了使仿真町行,有時需要對現實世界的某些方面進行抽象或完全舍棄,這幾乎是仿真軟件的通病。例如,基於地圖的移動模型無法體現出交通阻塞等現象。ONE仿真的環境缺少物理層和鏈路層的支持,當兩個節點在彼此的通信范圍內時,它們的通信速率是不變的,但是在真實世界中,由於距離或干擾等情況的發生,傳輸速率往往達不到預設的最大值。另外,在仿真過程中,移動設備都是假設為總是開啟的,但是現實中為了節省電能,有些設備往往會切換成空閑狀態,也有一些設備會周期性地對鄰居節點進行探測。綜上分析,ONE仿真環境中的通信時間過於樂觀。不過現在的功能足以實現一個好的DTN網絡模擬,這些問題可以忽略不計。
轉載請注出處:http://www.cnblogs.com/bakari/p/3519841.html,謝謝!