茹新宇,劉 淵,陳 偉
(1. 江蘇聯(lián)合職業(yè)技術學院 無錫交通分院,江蘇 無錫 214151; 2. 江南大學 數(shù)字媒體學院,江蘇 無錫 214122)
新網(wǎng)絡仿真器NS3的研究綜述*
茹新宇1,劉 淵2,陳 偉2
(1. 江蘇聯(lián)合職業(yè)技術學院 無錫交通分院,江蘇 無錫 214151; 2. 江南大學 數(shù)字媒體學院,江蘇 無錫 214122)
仿真可實現(xiàn)用相對較小的成本與時間研究探索并解決問題。從簡述NS2和NS3的特點與區(qū)別入手,分別從基本概念、核心概念及其模型三個方面詳細介紹了NS3的體系結構、數(shù)據(jù)包傳輸過程、基本對象與類及其跟蹤模型等細節(jié)。最后從理論上深度論述了NS3在研究領域的TCP實現(xiàn)過程。
網(wǎng)絡仿真器;類;模型;應用程序接口;套接字;繼承;帶寬
仿真是指當所研究的系統(tǒng)造價昂貴、實驗危險性大或需要很長時間才能了解其參數(shù)變化所引起的后果時,利用模型重現(xiàn)實況,并通過模仿一些真實的事務或過程狀態(tài)來研究已存在的或設計中的系統(tǒng)[1]。隨著仿真實驗在多種場合的廣泛使用,其現(xiàn)已成為計算機領域較為普遍的評價方法之一。同樣,研究通信體系和網(wǎng)絡協(xié)議也需要網(wǎng)絡仿真器的支持。但目前許多典型的仿真器如OPNET、QualNet和REAL等,由于使用條款限制或研發(fā)成本過高而得不到廣泛應用??紤]到實施成本、情景再現(xiàn)、現(xiàn)場難度等,安裝真實網(wǎng)絡并不可行,網(wǎng)絡仿真器NS應運而生。它通常用于路由、多播及AdHoc網(wǎng)絡,支持當前流行協(xié)議,為有線、無線網(wǎng)絡提供仿真結果。
網(wǎng)絡仿真器主要基于特定條件,通過提供虛擬環(huán)境,允許仿真指定節(jié)點或路徑的網(wǎng)絡行為,如流量建模與性能分析等。NS2是個離散事件仿真器,事件由節(jié)點觸發(fā)。當數(shù)據(jù)包到達節(jié)點后,仿真器按事件預定的執(zhí)行時間排序隊列、按步處理。作為一款用于網(wǎng)絡教育和研究的開源軟件,NS2在學術界已大獲成功,但也存在著較多問題,如它采用分裂對象模型,由C++代碼以及腳本語言OTcl協(xié)調(diào)完成,因而導致系統(tǒng)結構松散,分析工具“各自為政”,學習難度較大。另外仿真期間,網(wǎng)絡層存在著大量抽象,導致不連續(xù)以及跟蹤困難,結果常需要通過解析文件來提取。
NS3基于社區(qū)開發(fā)和維護,具有良好的發(fā)展勢頭。它是用C++編寫的可選Python腳本的API離散事件網(wǎng)絡仿真器。它具有面向?qū)ο?、低耦合、互操作、適合無線管理、便捷性符合WSN協(xié)議等特點。同時,它具有良好的開發(fā)環(huán)境,包括COM類的接口聚合與查詢、自動內(nèi)存管理、回調(diào)對象等核心功能,便于仿真新的復雜模型。
當前,NS3已試圖避免重復出現(xiàn)NS2所存在的問題,如模型之間的互操作性與耦合不足、缺乏內(nèi)存管理、分裂語言對象調(diào)試等。最明顯的區(qū)別是腳本語言的選擇,NS2在OTcl中編寫腳本,仿真結果由NAM實現(xiàn)可視化,但它無法純粹地從C++運行仿真。而NS3(包括協(xié)議和場景)完全用C++編寫,帶有可選的Python綁定,腳本編寫方便。NS3提供了全新的動畫顯示軟件Net Anim,可勾畫出網(wǎng)絡拓撲及標記IP地址,便于更好地演示數(shù)據(jù)包發(fā)送、傳遞以及接收過程。
NS3項目始于2006年,目前已發(fā)展到了3.26這一穩(wěn)定版本。它是廣泛汲取了當前主流仿真器NS2、YANS和GTNets的成功經(jīng)驗及其他新技術綜合而成的。其核心及各功能模塊由C++代碼完成[2],仿真效率極高[3]。其在功能實現(xiàn)、版本更新、用戶使用量等方面都飛速趕超著NS2[4]。
NS3對外提供了豐富的擴展接口,研究者依據(jù)自身需求可更改或增減模塊。它被構建為庫,其靜態(tài)或動態(tài)鏈接到仿真拓撲并啟動NS3主程序(該程序定義了拓撲結構和仿真啟動時間)。NS3體系結構的底層到頂層都是開源的,用戶可獨立擴展相應模塊。它還將API導出至Python,允許Python以與C++相同方式導入模型。它雖沒有NS2的所有模型,但卻增加了部分新功能。另外NS2部分模型也已移植進了NS3,其豐富的模型幾乎涉及網(wǎng)絡技術所有方面。它包含網(wǎng)絡組件模擬接口,如網(wǎng)絡傳輸協(xié)議、通信媒介、套接字服務、客戶端/服務器端應用程序等;擁有事件調(diào)度器,可通過執(zhí)行相關事件,模擬真實的通信“行為”。同時它還具有完整的跟蹤機制及基于文本的跟蹤日志,方便用戶通過第三方軟件來解析數(shù)據(jù)傳輸過程及結果分析。
NS3由一系列層次分明的功能模塊拼接而成,其最底層核心(core)模塊實現(xiàn)了NS3的核心功能,如智能指針、動態(tài)類型系統(tǒng)、事件調(diào)度器、回調(diào)機制、跟蹤記錄、對象聚合等功能,同時提供了額外的C++語法,使編程更容易。網(wǎng)絡(network)模塊包括數(shù)據(jù)包等網(wǎng)絡仿真對象,主要描述數(shù)據(jù)包、Pcap或Ascii文件操作及網(wǎng)卡和套接字等抽象基類、IP地址、節(jié)點與隊列等。核心和網(wǎng)絡這兩個模塊組成一個適用于不同網(wǎng)絡類型的通用仿真底層,當前已實現(xiàn)了互聯(lián)網(wǎng)和移動網(wǎng)。其他模塊(包括各種協(xié)議、應用及設備等)都建立在這個底層模塊之上。互聯(lián)網(wǎng)(Internet)模塊包括IPv4/6和MAC-48 (EUI-48在IEEE 802的術語) 地址類,以及用于TCP/IP堆棧的抽象基類。移動(mobility)模塊包含移動模型的抽象基類,為移動網(wǎng)絡提供了豐富的移動模型,如靜態(tài)、恒速、恒定加速度、隨機游走、隨機路點和隨機方向等。
目前,NS3具有TCP/IP、WiFi、CSMA(以太網(wǎng))和P2P(點對點)等模型。其中包含有OLSR協(xié)議等路由模塊。協(xié)議棧模塊是真實協(xié)議的抽象,執(zhí)行TCP/UDP/IPv4等堆棧的連接管理、傳輸控制及路由地址等功能。設備模塊為多個NetDevice類的實現(xiàn),而應用模塊則為應用程序提供服務。
Helper提供了一套簡單的C++類,可實現(xiàn)不用指針即可訪問已封裝的底層API。NS3程序可直接訪問所有的API,頂層依據(jù)底層服務所編寫的仿真腳本來運行[5]。
TCP類在網(wǎng)絡模型中與IPv4/6協(xié)議一起駐留,實現(xiàn)彼此通信的多個類與網(wǎng)絡層之間的交互,并向應用層提供了可靠的數(shù)據(jù)傳送。NS3為真實環(huán)境提供了較低層次的抽象來構造網(wǎng)絡組件[6],其基本對象是節(jié)點、應用、信道和網(wǎng)絡設備等,借助類來實現(xiàn)或表示。
(1)節(jié)點(Node):狹義上將包含應用程序、堆棧、網(wǎng)絡設備及具有內(nèi)存、CPU和I/O接口的計算機稱為節(jié)點。在NS3中把所有連接到網(wǎng)絡的基本計算單元或終端都抽象為節(jié)點,由C++中的Node類表示,給仿真提供管理計算設備的表示方法。在進行開發(fā)時,用戶可將節(jié)點看作一臺主機,進行應用、協(xié)議棧、網(wǎng)卡等添加,使其完成所需工作。
(2)應用(Application):它可在節(jié)點上運行,并與堆棧通信,是數(shù)據(jù)包的發(fā)生器和“消費者”。NS3不存在系統(tǒng)軟件,生成仿真活動的用戶程序抽象成應用,可將其部署在節(jié)點上來驅(qū)動仿真器運行。NS3應用在C++中通過抽象Application類來實現(xiàn),該類用于管理用戶層應用程序的多種仿真接口。開發(fā)者在實現(xiàn)自己定義的應用時,只需要繼承Application類即可。
(3)信道(Channel):一組網(wǎng)絡設備對象間的物理連接器。NS3中把多個節(jié)點連在一起的對象稱為信道,在C++中,用Channel類實現(xiàn)。該類提供了管理通信子網(wǎng)和節(jié)點對象的連接方法,并具有模擬仿真數(shù)據(jù)包在傳輸過程中的傳播延遲和排隊延遲等功能。
(4)網(wǎng)絡設備(NetDevice):在NS3中,要實現(xiàn)節(jié)點與信道交流,必須在節(jié)點上綁定網(wǎng)絡設備,由該設備連接節(jié)點和信道。網(wǎng)絡設備是仿真硬件和驅(qū)動軟件的抽象表示,其“安裝”在節(jié)點內(nèi),可插入節(jié)點的I/O接口網(wǎng)卡,以便節(jié)點能通過信道與其他仿真節(jié)點互相通信。節(jié)點可經(jīng)過多個設備連接至多個信道。網(wǎng)絡設備必須綁定類型匹配的信道,其抽象由C++中的NetDevice類[7]表示,以提供管理節(jié)點和信道對象的連接。
NS3代碼由不同部分組成,從拓撲建立開始,定義要使用的模型,而后通過賦予地址和設置其他參數(shù)來配置模型,最后執(zhí)行代碼。NS3生成Pcap包跟蹤文件,以trace格式輸出,使用Wireshark等跟蹤工具分析結果數(shù)據(jù),或使用Net Anim來實現(xiàn)可視化。
NS3中使用WAF作為編譯系統(tǒng),而不再使用“./configure;make”。waf是一個基于Python的框架,可完成配置、編譯并實現(xiàn)應用對象。它替代了其他工具,如Autotools、ScoNS、CMake及Ant等。例如要實現(xiàn)一個P2P仿真[8],具體步驟如下:(1)使用./waf -d[optimized|debug] configure檢查編譯環(huán)境;(2)使用./waf 來完成編譯任務;(3)通過./waf-run來運行仿真。
跟蹤是NS3的一大特色,NS3建立了獨立的跟蹤源(tracing sources)和跟蹤宿(tracing sinks)機制。它基于回調(diào)收集統(tǒng)計信息。當某跟蹤源產(chǎn)生了一新事件時,可通過回調(diào)函數(shù)來了解其正在發(fā)生的內(nèi)部模擬和設備運行情況。該設計將多個跟蹤源連接到跟蹤宿,源宿相分離,用戶可通過修改內(nèi)核來配置自己的源和宿,實現(xiàn)自定義跟蹤或統(tǒng)計輸出,而無需重建仿真核心??赏ㄟ^配置環(huán)境參數(shù)獲得“理想”網(wǎng)絡,并可實時跟蹤和記錄關鍵節(jié)點的信息,從而獲得對網(wǎng)絡性能的評估。
跟蹤源由其自身定義,與給它提供信息的對象類相關聯(lián),由名稱標識,用于運行時跟蹤所描述對象的屬性。它指示仿真中發(fā)生的事件并提供底層的數(shù)據(jù)訪問。消耗跟蹤信息的實體稱為跟蹤宿。跟蹤源是事件的發(fā)生器,跟蹤宿則是“消費者”。NS3提供了高、中、低三級跟蹤。高級:使用內(nèi)置跟蹤源和跟蹤宿,并掛接跟蹤文件;中級:使用命名空間自定義跟蹤源/宿的行為;低級:將跟蹤源添加到命名空間或顯示跟蹤源。
目前仍在大規(guī)模開發(fā)的NS3并不兼容NS2,它主要用于NS2的替換轉型,同時建設并整合新的機制。本文首先比較了網(wǎng)絡仿真器NS2和NS3之間的特點與差異,重點對NS3作了介紹和研究。該仿真器符合更多、更有彈性的網(wǎng)絡模擬需求設計,其編程用到了C++語言,并且兼容時下流行的Python。而NS2除了用到C++外,還需要Tcl/OTcl的輔助,這大大增加了編程難度。
NS3雖然不具有NS2的所有模型,相關研究目前也較少,在無線場景的網(wǎng)絡動畫、用戶友好性、易用性以及文檔教程等諸方面都非常需要社區(qū)的廣泛支持與良好測試,但同時,它擁有單一的語言、良好的架構、基于底層的開發(fā)等特點,使之具有更多NS2所不具備的“先天優(yōu)勢”,如節(jié)點多接口處理、IP尋址以及更多的因特網(wǎng)協(xié)議設計等功能。一些新的功能也正在積極地開發(fā)之中,如更詳細的802.11模型等,非常值得期待。正如NS的研發(fā)者在其著作《NS3 Tutorial》中所說的那樣,“NS3最終會逐漸取代NS2”。
[1] 梁軍學,林昭文,馬嚴. 來互聯(lián)網(wǎng)試驗平臺[J]. 計算機學報,2013,36(7):1364-1374.
[2] RILEY G F, HENDERSON T R. Modeling & tools for network simulation.[M]. Springer Berlin Heidelberg,2010.
[3] WEINGARTNER E, VOM LEHN H, WEHRLE K. A performance comparison of recent network simulators.[C]. IEEE International Conference on Communications 2009 ICC’09,2009:1-5.
[5] NS-3 Manual[EB/OL]. (2014-09-18)[2016-12-01].http://www.nsnam.org/.
[6] 閔圣天, 曾文序, 李滿榮,等. 基于NS3的網(wǎng)絡協(xié)議分析與模擬[J]. 福建電腦, 2014, 30(2): 99-100.
[7] 欒俊, 李太浩. 基于NS-3的WiFi場景仿真[J]. 農(nóng)業(yè)網(wǎng)絡信息, 2012, 1(1):18-20.
[8] Wu Mingju, TSAI C J. A storage device emulator for system performance evaluation[J]. ACM Transactions on Embedded Computing Systems (TECS), 2015, 14(82): 1-27.
A survey of new network simulator NS3
Ru Xinyu1, Liu Yuan2, Chen Wei2
(1. Wuxi Transportation College, Jiangsu Union Technical Institute, Wuxi 214151, China;2. School of Digital Media, Jiangnan University, Wuxi 214122, China)
Simulation can be used to explore and solve problems with a relatively small cost and time. This paper introduces the characteristics and differences between NS2 and NS3, and discusses the details of the NS3 architecture, the process of data packet transmission, the basic objects and classes and their tracking models from the basic concept, core concept and model. Finally, it gets the TCP implementation process of NS3 in the research field with the theoretical depth.
network simulator; class; model; application program interface; socket; inherit; bandwidth
TP393
A
10.19358/j.issn.1674- 7720.2017.20.004
茹新宇,劉淵,陳偉.新網(wǎng)絡仿真器NS3的研究綜述[J].微型機與應用,2017,36(20):14-16.
國家自然科學基金(61602213);江蘇省自然科學基金(BK20151131)
2017-03-20)
茹新宇(1977-),通信作者,男,碩士研究生,講師,主要研究方向:通信安全、擁塞控制及網(wǎng)絡安全。E-mail: ruxinyu21@163.com。
劉淵(1967-),男,碩士研究生,教授,博士生導師,主要研究方向:無線通信管理、網(wǎng)絡測量及信息安全。
陳偉(1981-),男,博士研究生,主要研究方向:人工智能、群體智能算法。