亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        網(wǎng)絡(luò)仿真器NS3的剖析與探究

        2018-03-20 09:15:07茹新宇
        關(guān)鍵詞:模型

        茹新宇,劉 淵

        (1.江南大學(xué) 數(shù)字媒體學(xué)院,江蘇 無錫 214122;2.江蘇聯(lián)合職業(yè)技術(shù)學(xué)院 無錫交通分院,江蘇 無錫 214151)

        0 引 言

        仿真所固有的低成本、虛擬化優(yōu)勢,使其成為極具吸引力的重要科研手段[1]。網(wǎng)絡(luò)仿真目前已是互聯(lián)網(wǎng)算法性能、協(xié)議拓?fù)渥罱?jīng)濟(jì)快捷的評價方法之一。網(wǎng)絡(luò)仿真器主要通過部署虛擬環(huán)境,允許對特定節(jié)點(diǎn)或路徑模擬其網(wǎng)絡(luò)行為,并提供仿真結(jié)果,以便研究、參考或改進(jìn)。借助仿真的高靈活度和可擴(kuò)展性,不同網(wǎng)絡(luò)實(shí)體的協(xié)議算法、概念模型及其拓?fù)浼軜?gòu)可在虛擬環(huán)境中搭建、測試并實(shí)施?,F(xiàn)有工具,如QualNet、OPNET[2]和REAL等,由于使用條款、實(shí)施成本及代碼開源等因素而遠(yuǎn)未普及。鑒于現(xiàn)場布置及情景再現(xiàn)等客觀條件,新網(wǎng)絡(luò)仿真器NS3應(yīng)運(yùn)而生。作為NS2的繼任者,它運(yùn)用全新理念來解決和減輕NS2存在的問題,現(xiàn)已大量部署于實(shí)驗(yàn)場景。它支持當(dāng)前主流協(xié)議,為實(shí)驗(yàn)提供仿真結(jié)果。

        文中對NS3進(jìn)行了深入探究,重點(diǎn)闡述了其TCP實(shí)現(xiàn)過程,并提出了具有前瞻性的研究方向。

        1 NS3簡介

        1.1 NS3的概述

        NS系列仿真器是由UC Berkeley開發(fā)的優(yōu)秀網(wǎng)絡(luò)仿真軟件,使用經(jīng)典的Unix語言作為環(huán)境工具,在GNU/Linux平臺下開發(fā)[3]。為便于安裝、維護(hù)及更新,如今已被移植進(jìn)Windows/Cygwin,BSD及Mac OSX等系統(tǒng)。NS2作為一款開源軟件,支持多種協(xié)議且易于擴(kuò)展,但同時也存在較多問題。如它采用分裂對象模型,在OTcl中編寫腳本,仿真結(jié)果由NAM實(shí)現(xiàn)可視化,卻無法單純從C++運(yùn)行。另外,網(wǎng)絡(luò)層抽象仿真,結(jié)果跟蹤困難,需借助解析文件提取,模型之間互操作及耦合性不足,分析工具“各自為政”。

        目前仍在大規(guī)模開發(fā)的NS3項(xiàng)目始于2006年,它廣泛汲取主流仿真器NS2、YANS和GTNets的技術(shù)經(jīng)驗(yàn),用C++語言實(shí)現(xiàn),兼容時下流行的Python,目前已發(fā)展至3.26穩(wěn)定版本。NS2部分模型已移植進(jìn)NS3,使之在功能實(shí)現(xiàn)、版本更新、用戶體驗(yàn)等方面都具有良好表現(xiàn)[4]。其核心及各功能模塊由C++代碼完成[5],對外提供豐富的擴(kuò)展接口[6],可按需更改或增減模塊。NS3包含網(wǎng)絡(luò)組件模擬接口,擁有事件調(diào)度器,可通過執(zhí)行相關(guān)事件,模擬真實(shí)通信“行為”。同時它還具備完美的跟蹤機(jī)制,便于用戶解析數(shù)據(jù)、傳輸過程及分析結(jié)果,詳細(xì)介紹如表1所示。

        表1 NS3仿真器的優(yōu)點(diǎn)與特點(diǎn)

        1.2 NS3與NS2的區(qū)別

        NS2及其后繼者NS3具有相同背景、概念和類似目標(biāo),是一離散事件模擬器。雖然目前NS2仍有很大用戶群,但由于NS3的特征及設(shè)計優(yōu)勢,使之日趨成為NS2的可靠替代品。它可較好地規(guī)避前者存在的問題,其協(xié)議和場景均用C++編寫。第三方軟件依賴和源代碼構(gòu)建過程截然不同并優(yōu)于NS2,系統(tǒng)集成度較好。兩者的部分特征對比如表2所示。

        表3總結(jié)了現(xiàn)NS2已有模型與NS3計劃或已開發(fā)模型間的對比[7]。

        表2 NS2與NS3的部分特征對比

        表3 NS2與NS3的項(xiàng)目模型對比

        2 NS3的系統(tǒng)剖析

        2.1 NS3的模塊體系結(jié)構(gòu)

        NS3由一系列層次分明的功能模塊拼接而成,其組織結(jié)構(gòu)及模塊間的基本依賴關(guān)系如圖1所示。

        圖1 NS3的基本模塊體系結(jié)構(gòu)

        2.1.1常用模塊

        Core:內(nèi)核模塊,是NS3基本機(jī)制的實(shí)現(xiàn),如智能指針(Ptr)、屬性(attribute)、回調(diào)(callback)、隨機(jī)變量(random variable)、日志(logging)、追蹤(tracing)和事件調(diào)度(event scheduler)等內(nèi)容。

        Network:數(shù)據(jù)分組(packet)模塊。

        Internet:關(guān)于TCP/IPv4/6的相關(guān)協(xié)議族的實(shí)現(xiàn),包括TCP/IPv4/6、ARP、UDP及鄰居發(fā)現(xiàn)等相關(guān)協(xié)議。

        Topolopy-read:讀取指定軌跡文件數(shù)據(jù),按指定格式生成相應(yīng)網(wǎng)絡(luò)拓?fù)洹?/p>

        Protocol Status:協(xié)議框架模塊,收集、統(tǒng)計和分析數(shù)據(jù)。

        另有,Tools:統(tǒng)計工具(包括gnuplot作圖接口);ApplicatioNS:應(yīng)用模塊;Mobility:移動模塊;Visualizer:可視化工具;Netanim:動畫演示器;Propagation:傳播模型模塊;Flow-monitor:流量監(jiān)控模塊等。

        2.1.2典型模塊

        CSMA:基于IEEE802.3以太網(wǎng),包括MAC層、物理層和媒體信道。

        Point-to-point:實(shí)現(xiàn)網(wǎng)絡(luò)間的點(diǎn)對點(diǎn)通信。

        Wifi:基于IEEE802.11a/b/g無線網(wǎng),包括AdHoc。

        其他還有,Mesh:基于IEEE802.11s的無線網(wǎng)絡(luò);Wimax:基于IEEE802.16的無線城域網(wǎng);LTE:3GPP通用移動通信系統(tǒng)(UMTS)技術(shù)長期演進(jìn);UAN:水聲通信網(wǎng)絡(luò);MPI:并行分布式離散事件標(biāo)準(zhǔn)信息傳遞接口;Click:集成可編程模塊化路由;Openflow:仿真交換機(jī);Emu:集成實(shí)驗(yàn)床和虛擬機(jī)環(huán)境等。

        2.1.3最新技術(shù)

        Waf是基于Python框架開發(fā)的編譯工具,NS3自身及將要執(zhí)行的仿真代碼都由Waf編譯運(yùn)行。Scratch目錄存放用戶腳本,運(yùn)行案例可拷至該目錄。Example舉例如何使用NS3,內(nèi)含許多模塊的使用。Doc目錄是幫助文檔,可使用./waf--doxygen編譯本地Doxygen文檔。Build編譯目錄,內(nèi)含編譯文件時使用的共享庫和頭文件(build/NS3)。Src是NS3的源碼目錄。

        模塊中的wscript文件結(jié)構(gòu)固定,用來注冊模塊中的源碼和使用其他模塊情況。Model目錄包含模塊代碼的.cc和.h文件。Helper目錄存放模塊對應(yīng)的helper類代碼的源文件。Test目錄包含原模塊測試代碼,而examples目錄存放應(yīng)用該模塊的實(shí)例代碼。Doc是幫助文檔,bindings目錄則被模塊用來綁定Python語言。

        2.2 NS3的基本對象與類

        NS3以較低層次的抽象來構(gòu)造組件,模擬真實(shí)環(huán)境[8],其基本對象是節(jié)點(diǎn)、應(yīng)用、信道和網(wǎng)絡(luò)設(shè)備等,由類表示或?qū)崿F(xiàn)。

        (1)節(jié)點(diǎn)(Node):網(wǎng)絡(luò)上所連接的基本計算單元或終端都抽象為節(jié)點(diǎn),在C++中由Node類描述(如Nodeontainer類),用于追蹤一組節(jié)點(diǎn)指針。用戶可通過對節(jié)點(diǎn)添加應(yīng)用、協(xié)議和網(wǎng)卡等進(jìn)行二次開發(fā)[9]。

        (2)應(yīng)用(Application):被仿真的用戶程序抽象為應(yīng)用。NS3以“Time”為參數(shù),記錄接收和發(fā)送時間。在C++中抽象成Application類表示,實(shí)現(xiàn)時需繼承該類,將其部署在節(jié)點(diǎn),驅(qū)動仿真器運(yùn)行。由應(yīng)用程序生成和回顯仿真數(shù)據(jù)包的客戶/服務(wù)器端程序集,如Application類稱為“UdpEchoClient Application”和“UdpEchoServer Application”。

        (3)信道(Channel):基本的通信子網(wǎng)被抽象為信道。在C++中由Channel類描述,提供管理通信子網(wǎng)對象和節(jié)點(diǎn)連接至它們的各種方法。它可模擬簡單線纜、無線網(wǎng),甚至以太網(wǎng)交換機(jī)。NS3包括Csma Channel、Point To Point Channel以及Wifi Channel等信道。

        (4)網(wǎng)絡(luò)設(shè)備(NetDevice):硬件設(shè)備和軟件驅(qū)動的抽象表示,由C++的NetDevice類實(shí)現(xiàn)。通過綁定與類型匹配的信道,提供管理節(jié)點(diǎn)和信道對象連接。與信道對應(yīng),NetDevice也分為Csma NetDevice、Point To Point NetDevice和Wifi NetDevice等[10]。若需要一個所有被創(chuàng)建的NetDevice對象列表,則需用一個NetDeviceContainer對象來存放。

        (5)分組(Packet):每個分組包含字節(jié)緩沖器、標(biāo)簽和元數(shù)據(jù)。緩沖器是頭部和尾部的逐位串行表示,標(biāo)簽則是任意用戶提供的數(shù)據(jù)結(jié)構(gòu)的集合,而元數(shù)據(jù)可用以描述已序列化的頭和尾的類型。

        (6)套接字(Socket):作為應(yīng)用程序與網(wǎng)絡(luò)堆棧間的接口。NS3提供了兩種類型的套接字API,一是NS3API,二是使用本機(jī)API服務(wù)來提供類似POSIX的API,作為整個應(yīng)用程序進(jìn)程的一部分。

        (7)拓?fù)鋷椭?Topology Helper):NS3用Topology Helper類來整合大量分立步驟,使其成為一簡單易用的操作。由拓?fù)渖善髡{(diào)用底層核心完成節(jié)點(diǎn)、網(wǎng)絡(luò)設(shè)備、MAC地址、信道及協(xié)議棧等創(chuàng)建與配置。它可實(shí)現(xiàn)多節(jié)點(diǎn)連接及多子網(wǎng)聯(lián)網(wǎng)、分配IP地址等功能。如Topology Reader Helper類可簡化配置并使用通用Topology Reader。Internet Stack Helper是個安裝Point To Point Helper對象和點(diǎn)到點(diǎn)網(wǎng)絡(luò)設(shè)備的網(wǎng)絡(luò)協(xié)議棧的拓?fù)渖善黝悺?/p>

        (8)典型容器助手(typical containers and helpers)。NS3分容器類和助手類,NodeContainer、NetDevice Container和Ipv4AddressContainer是不同容器類,而InternetStackHelper、WifiHelper、MobilityHelper和OlsrHelper則屬不同助手類。

        3 NS3的初步探究

        3.1 NS3的數(shù)據(jù)傳輸

        NS3體系結(jié)構(gòu)類似OSI模型,便于對網(wǎng)絡(luò)層次及協(xié)議仿真研究。數(shù)據(jù)按TCP/IP形式發(fā)送,以類方式實(shí)現(xiàn)。事件由節(jié)點(diǎn)觸發(fā),當(dāng)數(shù)據(jù)包到達(dá)節(jié)點(diǎn),仿真器按事件預(yù)定的執(zhí)行時間排序隊列、按步處理。數(shù)據(jù)包傳遞時,通過指針交互完成轉(zhuǎn)發(fā),傳輸過程如圖2所示[11]。

        圖2 NS3數(shù)據(jù)包傳輸過程

        首先應(yīng)用層創(chuàng)建數(shù)據(jù)包并通過套接字傳送至傳輸層(用套接字指針取代應(yīng)用層指向該數(shù)據(jù)包)。在該層完成TCP或UDP頭的封裝后轉(zhuǎn)交至網(wǎng)絡(luò)層[12]。由該層判斷數(shù)據(jù)包的目的地址,若非當(dāng)前節(jié)點(diǎn)則查詢路由,將數(shù)據(jù)包交至網(wǎng)絡(luò)設(shè)備層。該層查詢ARP,將數(shù)據(jù)包轉(zhuǎn)至指定接口,由該口將包發(fā)送至信道。信道通過入隊、鏈路延遲處理、TTL檢驗(yàn)及出隊等完成數(shù)據(jù)包的發(fā)送。若出現(xiàn)隊列已滿或TTL生命期結(jié)束,則丟棄該包。當(dāng)數(shù)據(jù)包經(jīng)過信道傳輸?shù)竭_(dá)目的節(jié)點(diǎn)后,再由網(wǎng)絡(luò)設(shè)備層開始逐層上傳,最后通過端口找到API套接字,并通過該套接字將包交由應(yīng)用模塊處理。綜上所述,NS3的數(shù)據(jù)包傳輸過程與物理網(wǎng)絡(luò)類似,其仿真可信度較高。

        3.2 NS3的代碼體系結(jié)構(gòu)

        NS3從拓?fù)浣㈤_始,定義所選模型,而后通過設(shè)置參數(shù)、賦予地址來配置模型并執(zhí)行代碼。仿真生成的Pcap包文件可采用trace格式跟蹤輸出,最后用Wireshark等工具跟蹤結(jié)果并分析數(shù)據(jù),或由Net Anim來實(shí)現(xiàn)可視化輸出。其代碼創(chuàng)建過程如圖3所示。

        圖3 NS3代碼體系結(jié)構(gòu)

        3.3 NS3的仿真流程

        使用NS3進(jìn)行網(wǎng)絡(luò)仿真時,一般需要4步:

        (1)選擇或開發(fā)相應(yīng)模塊;

        (2)編寫仿真腳本(C++或Python)。包括:生成節(jié)點(diǎn)(如網(wǎng)卡、應(yīng)用程序和協(xié)議棧等);安裝網(wǎng)絡(luò)設(shè)備(如CSMA、WiFi);安裝協(xié)議(一般TCP/IP及應(yīng)用層協(xié)議);其他配置(如節(jié)點(diǎn)移動或能量管理等);

        (3)啟動仿真器;

        (4)仿真結(jié)果分析(包括輸出網(wǎng)絡(luò)場景和數(shù)據(jù)圖像等)。

        4 NS3的深入探究

        4.1 NS3的數(shù)據(jù)跟蹤

        NS3有兩類跟蹤:一是用Logging系統(tǒng)直接將執(zhí)行過程顯示在命令行,有助于調(diào)試仿真腳本;另外常用Tracing系統(tǒng)將采集的數(shù)據(jù)直接存于一文件中,以便后期分析處理。

        Logging系統(tǒng)從低到高可分7個等級,高的包含低的消息。通過.cc文件對程序添加記錄,通過環(huán)境變量修改系統(tǒng)等級,隨后終端運(yùn)行。而Tracing系統(tǒng)則存儲大量信息,它包含3個基本概念:跟蹤源(Tracing Sources)、跟蹤宿(Tracing Sink)以及兩者的連接機(jī)制。該系統(tǒng)基于回調(diào)函數(shù)收集統(tǒng)計信息,當(dāng)某跟蹤源產(chǎn)生一新事件,可通過回調(diào)了解其內(nèi)部正在發(fā)生的模擬情形及設(shè)備運(yùn)行狀況。

        4.2 NS3的TCP實(shí)現(xiàn)

        4.2.1TCP類及其相互作用

        TCP類在網(wǎng)絡(luò)模型中與IPv4/6協(xié)議一起駐留,實(shí)現(xiàn)彼此通信的多個類與網(wǎng)絡(luò)層交互,并向應(yīng)用層提供可靠的數(shù)據(jù)傳送。下面列出NS3中關(guān)于TCP實(shí)現(xiàn)的主要類別以及它們之間的相互作用,如圖4所示[13]。

        TcpSocket:這個抽象類包含TCP套接字的基本屬性。

        TcpSocketBase:此類為應(yīng)用程序?qū)犹峁┝岁P(guān)鍵的TCP特性和一個套接字接口。它從TcpSocket繼承,用作所有TCP變體的基類。

        Tcp Header:此類定義了TCP段的頭。

        TcpTxBuffer:此類提供一個緩沖區(qū),發(fā)送方在發(fā)送和確認(rèn)之前,緩沖從應(yīng)用程序接收的所有數(shù)據(jù)。

        TcpRxBuffer:該類實(shí)現(xiàn)一個緩沖區(qū),用于接收從網(wǎng)絡(luò)層收到的數(shù)據(jù),然后將其傳遞給應(yīng)用程序。

        TcpL4Protocol:是TCP套接字和網(wǎng)絡(luò)層接口類,負(fù)責(zé)向網(wǎng)絡(luò)層收發(fā)數(shù)據(jù)包,并且負(fù)責(zé)傳入數(shù)據(jù)校驗(yàn)和驗(yàn)證。

        除了上述主類外,NS3還包含了基于繼承TCP套接字的子類,可以實(shí)現(xiàn)多種變體。如Tcp Tahoe、Tcp Reno和Tcp NewReno及Tcp Westwood等。

        4.2.2全局變量

        現(xiàn)有的變體都是基于繼承TCP套接字的同一類實(shí)現(xiàn)的,它包括以下各全局變量,用以實(shí)現(xiàn)擁塞控制算法及其帶寬估計等。

        m_cWnd是一uint32_t型變量,用于表示擁塞窗口。發(fā)送方用來確定可進(jìn)入網(wǎng)絡(luò)而不致鏈路過載的字節(jié)數(shù)。當(dāng)發(fā)生丟包時,使用m_cWnd來估計帶寬。

        m_ssThresh也是uint32_t型變量,用于標(biāo)記慢啟動結(jié)束門限閾值,其值取決于丟包時的鏈路帶寬估計。

        m_initialcWnd是指定m_cWnd初值的uint32_t變量。

        m_inFastRec是指示快速恢復(fù)開始和結(jié)束的布爾型變量。

        m_prevAckNo類型為SequenceNumber32,用以保存最后接收到的ACK號。

        m_accountedFor為uint32_t型變量,其在丟包時可跟蹤DUP ACK段數(shù)量,并在估計帶寬時使用。

        m_lastAck是前一ACK到達(dá)時間的雙精度浮點(diǎn)型變量。

        m_currentBW表示當(dāng)前帶寬估計的雙精度浮點(diǎn)型變量。

        m_minRtt是指定的最小RTT的時間類型變量。

        m_lastBW是雙精度浮點(diǎn)型變量,其在通過Tustin濾波器之后,保存最后所估計的帶寬值。

        m_lastSampleBW是雙精度浮點(diǎn)型變量,其保存測量帶寬的最后一個樣本值。

        m_ackedSegments是整型變量,它保存當(dāng)前RTT期間已確認(rèn)的段的總數(shù)。

        m_IsCount是一個布爾型變量,用于指示m_acked段計數(shù)過程的開始。

        m_bwEstimateEvent是指定帶寬采樣事件類型EventId的變量。

        圖4 TCP類圖一覽

        4.2.3算法實(shí)現(xiàn)

        NS3支持多種類型的TCP算法的實(shí)現(xiàn),這些實(shí)現(xiàn)繼承自src/network目錄下的一些通用類,這樣用戶就能以最少的代價實(shí)現(xiàn)自己的算法。這里首先描述聚合的概念,在NS2中已廣泛使用的繼承和多態(tài)被用來擴(kuò)展協(xié)議模型,如RenoTcpAgent就是通過重寫方法繼承自TcpAgent的,這促成了NS3的對象聚合系統(tǒng)。然后再介紹兩個重要的抽象基類:class TcpSocket,這在src/internet/model/tcp-socket. {cc,h}中定義。這個類主要用來管理能被不同算法重用的一些屬性。例如,屬性InitialCwnd可用于從TcpSocket類派生的任何實(shí)現(xiàn)。而class TcpSocketFactory則由協(xié)議的第4層實(shí)例使用,以創(chuàng)建正確的TCP套接字類型。

        目前對于NS3,有四種方式實(shí)現(xiàn)TCP:NS3自帶的TCP實(shí)現(xiàn);支持直接代碼執(zhí)行(DCE);支持網(wǎng)絡(luò)模擬通訊座(NSC);虛擬機(jī)與NS3的組合。鑒于復(fù)雜程度,文中只介紹第一種實(shí)現(xiàn)方式。NS3自帶的TCP模型具有建立連接和關(guān)閉邏輯的雙向TCP功能。支持多種擁塞控制算法,如NewReno、Westwood、Hybla和HighSpeed等,暫不支持多路TCP和TCP SACK算法。

        以前的擁塞控制被認(rèn)為是通過繼承父類的獨(dú)立的TCP,每個擁塞控制(如NewReno)是TcpSocketBase的子類,需修改一些繼承的方法。但從NS3.25開始,TCP模塊經(jīng)過了重新設(shè)計,其中擁塞避免、快速重傳與恢復(fù)算法已修改,并完成了在TcpSocketBase內(nèi)的合并。架構(gòu)被重做,以避免之前的繼承,讓每個擁塞控制都具有一個單獨(dú)的類,并且建立一個接口,用以在TcpSocketBase和擁塞模塊之間交換數(shù)據(jù),可以為創(chuàng)建和執(zhí)行自動化測試創(chuàng)造更好的環(huán)境。一般在src/applications/helper和src/network/helper中定義幫助函數(shù),通過NS3使用套接字,在應(yīng)用層設(shè)置TCP的使用,具體步驟及方法如下:

        (1)創(chuàng)建TCP接收器。

        // Create a packet sink on the star "hub" to receive these packets

        uint16_t port=50000;

        AddresssinkLocalAddress(InetSocketAddress

        (Ipv4Address::GetAny (), port));

        PacketSinkHelper sinkHelper("ns3::TcpSocketFactory", sinkLocalAddress);

        ApplicationContainer sinkApp=sinkHelper.Install

        (serverNode);

        sinkApp.Start (Seconds (1.0));

        sinkApp.Stop (Seconds (10.0));

        類似的,以下代碼片段將OnOffApplication流量源配置為使用TCP:

        //Create the OnOff applications to send TCP to the server

        OnOffHelper clientHelper ("ns3::TcpSocketFactory", Address ());

        這里已指定了抽象基類TcpSocketFactory的TypeId。NS3如何判斷腳本需要的是它自帶的TCP模型還是其他來源,當(dāng)網(wǎng)絡(luò)堆棧添加到節(jié)點(diǎn)時,聚合到該節(jié)點(diǎn)的默認(rèn)TCP實(shí)現(xiàn)是NS3TCP。因此,默認(rèn)情況下,在使用NS3helper API時,聚合到具有Internet堆棧的節(jié)點(diǎn)的TCP是NS3TCP。

        (2)配置TCP行為。

        通過NS3屬性,系統(tǒng)導(dǎo)出參數(shù),記錄在TcpSocket類的Doxygen中,例如最大段大小是可設(shè)置的屬性。要在創(chuàng)建任何Internet堆棧相關(guān)對象之前設(shè)置默認(rèn)套接字的類型,可在仿真程序的頂部放置以下語句:

        Config::SetDefault ("ns3::TcpL4Protocol::SocketType",StringValue ("ns3::TcpNewReno"));

        (3)綁定Socket套接字。

        對于用戶,希望有一個指向?qū)嶋H套接字的指針,需要用函數(shù)Bind()來綁定套接字。設(shè)置選項(xiàng)等可在每個套接字的基礎(chǔ)上完成,TCP的套接字可通過使用Socket::CreateSocket()的方法進(jìn)行創(chuàng)建。傳遞給CreateSocket()的TypeId必須是類型ns3::SocketFactory。因此需要通過與底層TcpL4Protocol對象相關(guān)聯(lián)的屬性來完成底層套接字類型的配置,也可通過屬性配置系統(tǒng)完成。在下面的示例中,訪問節(jié)點(diǎn)容器“n0n1”以獲取第零個元素,并在此節(jié)點(diǎn)上創(chuàng)建綁定套接字。

        // Create and bind the socket...

        TypeId tid =TypeId::LookupByName("ns3::TcpNewReno");

        Config::Set ("/NodeList/*/$ns3::TcpL4Protocol/SocketType", TypeIdValue (tid));

        Ptr localSocket=Socket::CreateSocket

        (n0n1.Get(0), TcpSocketFactory::GetTypeId ( ));

        上面節(jié)點(diǎn)號的“*”通配符被傳遞給屬性配置系統(tǒng),以后所有節(jié)點(diǎn)上的套接字都被設(shè)置為NewReno,而不僅僅是節(jié)點(diǎn)'n0n1.Get(0)'了。如果想要將其限制為僅指定的節(jié)點(diǎn),則必須執(zhí)行以下操作:

        // Create and bind the socket...

        TypeId tid=TypeId::LookupByName

        ("ns3::TcpNewReno");

        std::stringstream nodeId;

        nodeId<GetId();

        std::string specificNode="/NodeList/"+nodeId.str()+"/$ns3::TcpL4Protocol/SocketType";

        Config::Set (specificNode, TypeIdValue (tid));

        Ptr localSocket=Socket::CreateSocket

        (n0n1.Get(0),TcpSocketFactory::GetTypeId ());

        一旦創(chuàng)建了TCP套接字,就需要遵循傳統(tǒng)的套接字邏輯以及connect()和send()(對于客戶端)或bind()、listen()和accept()(對于服務(wù)器端)。有關(guān)在NS3中使用套接字的信息,可以參閱Sockets API相關(guān)文獻(xiàn)[14]。

        若要對已存在算法進(jìn)行驗(yàn)證,通常TCP測試從一個名為TcpGeneralTest的類繼承,該類提供了涉及TCP對象測試場景的操作設(shè)置,其位于src/internet/test目錄下。有關(guān)編寫新測試的更多信息,請參閱有關(guān)TCP測試文獻(xiàn)。一些測試存于src/test/ns3tcp目錄,其具有Internet模塊之外的依賴關(guān)系。更多信息可在NS3官網(wǎng)的Wiki頁面上找到。

        5 結(jié)束語

        NS3具有更好的開發(fā)環(huán)境(包括COM類接口聚合與查詢、自動內(nèi)存管理及對象回調(diào)等核心功能),便于仿真全新的復(fù)雜模型。它克服了NS2的諸多缺陷和明顯弱點(diǎn),越來越多的網(wǎng)絡(luò)仿真功能現(xiàn)已逐漸推行并植入到NS3中,使之適用于更多場景。文中結(jié)合項(xiàng)目開發(fā)經(jīng)驗(yàn),從不同角度和深度對新一代網(wǎng)絡(luò)仿真器NS3作了較為全面的闡述與介紹,對其體系結(jié)構(gòu)和主要功能模塊進(jìn)行了深入剖析,尤其對NS3的TCP實(shí)現(xiàn)機(jī)制作了重點(diǎn)探究。為NS3的使用及研發(fā)者提供了較好的理論指導(dǎo)意義和應(yīng)用參考價值,為網(wǎng)絡(luò)相關(guān)課題的后續(xù)研究及深入學(xué)習(xí)提供了強(qiáng)有力的支持。目前,NS3的一些新功能正在積極開發(fā)之中,如節(jié)點(diǎn)多接口處理、IP尋址以及更多的因特網(wǎng)協(xié)議設(shè)計,包括更詳細(xì)的802.11模型等都非常值得期待,NS3最終必將會取代NS2。

        [1] 梁軍學(xué),林昭文,馬 嚴(yán).未來互聯(lián)網(wǎng)試驗(yàn)平臺[J].計算機(jī)學(xué)報,2013,36(7):1364-1374.

        [2] 袁 曉,蔡志平,劉書昊,等.大規(guī)模網(wǎng)絡(luò)仿真軟件及其仿真技術(shù)[J].計算機(jī)技術(shù)與發(fā)展,2014,24(7):9-12.

        [3] 馬浩然.基于NS3的分布式消息系統(tǒng)Kafka的仿真實(shí)現(xiàn)[J].軟件,2015,36(1):94-99.

        [4] FONT J L,IIGO P,DOMNGUEZ M,et al.Analysis of source code metrics from ns-2and ns-3network simulators[J].Simulation Modelling Practice & Theory,2011,19(5):1330-1346.

        [5] RILEY G F,HENDERSON T R.Modeling & tools for network simulation[M].Berlin:Springer,2010.

        [6] DAS B,SUBUDHI B,PATI B B. Cooperative formation control of autonomous underwater vehicles:an overview[J].International Journal of Automation and Computing,2016,13(3):199-225.

        [7] RACHNA C,SHWETA S,RITA K,et al.A study of comparison of network simulator-3and network simulator-2[J].International Journal of Computer Science and Information Technologies,2012,3(1):3085-3092.

        [8] 閔圣天,曾文序,李滿榮,等.基于NS3的網(wǎng)絡(luò)協(xié)議分析與模擬[J].福建電腦,2014,30(2):99-100.

        [9] 張登銀,張保峰.新型網(wǎng)絡(luò)模擬器NS-3研究[J].計算機(jī)技術(shù)與發(fā)展,2009,19(11):80-84.

        [10] 欒 俊,李太浩.基于NS-3的WiFi場景仿真[J].農(nóng)業(yè)網(wǎng)絡(luò)信息,2012(1):18-20.

        [11] 李廣榮.基于NS-3的虛實(shí)網(wǎng)絡(luò)結(jié)合系統(tǒng)的設(shè)計與實(shí)現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2015.

        [12] 楊鳴亮,張嘉毅,孫 振,等.關(guān)于NS3中GRE仿真的研究[J].電子測量技術(shù),2011,34(1):22-26.

        [13] GANGADHAR S,NGUYEN T A N,UMAPATHI G,et al.TCP Westwood(+) protocol implementation in ns-3[C]//Proceedings of the6th international ICST conference on simulation tools and techniques.Brussels, Belgium:ICST,2013:167-175.

        [14] 袁鵬飛,鄭 濤,楊李冬,等.一種基于CAPPROBE帶寬估計的TCP Westwood算法[J].廈門大學(xué)學(xué)報:自然科學(xué)版,2014,53(4):469-476.

        猜你喜歡
        模型
        一半模型
        一種去中心化的域名服務(wù)本地化模型
        適用于BDS-3 PPP的隨機(jī)模型
        提煉模型 突破難點(diǎn)
        函數(shù)模型及應(yīng)用
        p150Glued在帕金森病模型中的表達(dá)及分布
        函數(shù)模型及應(yīng)用
        重要模型『一線三等角』
        重尾非線性自回歸模型自加權(quán)M-估計的漸近分布
        3D打印中的模型分割與打包
        国产午夜精品久久久久免费视| 一区二区三区国产精品麻豆| 日韩精品一区二区在线天天狠天| 久久久久亚洲精品无码网址蜜桃| 中国亚洲女人69内射少妇| 亚洲va欧美va人人爽夜夜嗨| 日本高清在线一区二区三区| 我和隔壁的少妇人妻hd| 国产精品久久久久久亚洲av| 成人免费va视频| 狠狠亚洲超碰狼人久久老人| 日本黄色一区二区三区| 国产精品天干天干| 国产精品免费看久久久8| 亚州AV无码乱码精品国产 | 亚洲中文字幕一二区精品自拍| 日韩欧美中文字幕公布| 无码国产69精品久久久孕妇| 成在线人视频免费视频| 人妻少妇偷人精品视频| 含紧一点h边做边走动免费视频| 国产在线无码一区二区三区| 九月色婷婷免费| 亚洲精品98中文字幕| 天堂中文最新版在线中文| 欧美色综合高清视频在线| 国产丝袜美腿诱惑在线观看| 久久精品人搡人妻人少妇 | 丁香六月久久| 亚洲国产av一区二区不卡| 女人被狂躁c到高潮视频| 另类免费视频在线视频二区| 日本久久精品国产精品| 99久久国产精品网站| 无码精品人妻一区二区三区人妻斩| av少妇偷窃癖在线观看| 中文字日产幕码三区做法| 色狠狠色噜噜av天堂一区| 精品欧美乱子伦一区二区三区 | 久久精品一区二区三区夜夜| 国产美女高潮流白浆免费视频|