節(jié)點(diǎn)-NODE
在因特網(wǎng)術(shù)語(yǔ)中,連接到網(wǎng)絡(luò)的計(jì)算設(shè)備稱(chēng)為主機(jī)或有時(shí)稱(chēng)為終端系統(tǒng)。 由于ns-3是網(wǎng)絡(luò)模擬器,而不是特定的Internet模擬器,因此我們故意不使用術(shù)語(yǔ)host,因?yàn)樗cInternet及其協(xié)議密切相關(guān)。 相反,我們使用一個(gè)更通用的術(shù)語(yǔ),也用于源于圖論的其他模擬器 - 節(jié)點(diǎn)。
在ns-3中,基本計(jì)算設(shè)備抽象稱(chēng)為節(jié)點(diǎn)。 這個(gè)抽象由類(lèi)Node在C ++中表示。 Node類(lèi)提供了用于在模擬中管理計(jì)算設(shè)備的表示的方法。
您應(yīng)該將Node視為要添加功能的計(jì)算機(jī)。 One添加了應(yīng)用程序,協(xié)議棧和外圍卡及其相關(guān)驅(qū)動(dòng)程序,以使計(jì)算機(jī)能夠執(zhí)行有用的工作。 我們?cè)趎s-3中使用相同的基本模型。
應(yīng)用--application
通常,計(jì)算機(jī)軟件分為兩大類(lèi)。系統(tǒng)軟件根據(jù)某種計(jì)算模型組織各種計(jì)算機(jī)資源,如內(nèi)存,處理器周期,磁盤(pán),網(wǎng)絡(luò)等。系統(tǒng)軟件通常不使用這些資源來(lái)完成直接使用戶(hù)受益的任務(wù)。用戶(hù)通常運(yùn)行獲取并使用由系統(tǒng)軟件控制的資源的應(yīng)用程序來(lái)實(shí)現(xiàn)某個(gè)目標(biāo)。
通常,系統(tǒng)和應(yīng)用程序軟件之間的分離線(xiàn)是在操作系統(tǒng)陷阱中發(fā)生的權(quán)限級(jí)別更改時(shí)進(jìn)行的。在ns-3中,沒(méi)有真正的操作系統(tǒng)概念,特別是沒(méi)有特權(quán)級(jí)別或系統(tǒng)調(diào)用的概念。但是,我們確實(shí)有一個(gè)應(yīng)用程序的想法。正如軟件應(yīng)用程序在計(jì)算機(jī)上運(yùn)行以在“真實(shí)世界”中執(zhí)行任務(wù)一樣,ns-3應(yīng)用程序在ns-3節(jié)點(diǎn)上運(yùn)行,以在模擬世界中驅(qū)動(dòng)模擬。
在ns-3中,生成一些要模擬的活動(dòng)的用戶(hù)程序的基本抽象是應(yīng)用程序。這個(gè)抽象由類(lèi)Application在C ++中表示。 Application類(lèi)提供了在模擬中管理我們的用戶(hù)級(jí)應(yīng)用程序版本的表示的方法。期望開(kāi)發(fā)人員在面向?qū)ο蟮木幊桃饬x上專(zhuān)門(mén)化Application類(lèi)來(lái)創(chuàng)建新的應(yīng)用程序。在本教程中,我們將使用名為UdpEchoClientApplication和UdpEchoServerApplication的類(lèi)Application的特化。正如您所料,這些應(yīng)用程序組成了一個(gè)客戶(hù)端/服務(wù)器應(yīng)用程序集,用于生成和回顯模擬的網(wǎng)絡(luò)數(shù)據(jù)包
信道--channel
在現(xiàn)實(shí)世界中,人們可以將計(jì)算機(jī)連接到網(wǎng)絡(luò)。數(shù)據(jù)在這些網(wǎng)絡(luò)中流動(dòng)的媒體通常稱(chēng)為頻道。將以太網(wǎng)電纜連接到墻上的插頭時(shí),將計(jì)算機(jī)連接到以太網(wǎng)通信通道。在ns-3的模擬世界中,將節(jié)點(diǎn)連接到表示通信信道的對(duì)象。這里基本的通信子網(wǎng)抽象稱(chēng)為通道,并由類(lèi)Channel以C ++表示。
Channel類(lèi)提供了管理通信子網(wǎng)對(duì)象和將節(jié)點(diǎn)連接到它們的方法。在面向?qū)ο蟮木幊桃饬x上,開(kāi)發(fā)人員也可以使用通道。通道專(zhuān)業(yè)化可以模擬像電線(xiàn)一樣簡(jiǎn)單的東西。專(zhuān)用頻道還可以模擬像大型以太網(wǎng)交換機(jī)那樣復(fù)雜的東西,或者在無(wú)線(xiàn)網(wǎng)絡(luò)的情況下充滿(mǎn)障礙物的三維空間。
在本教程中,我們將使用名為CsmaChannel,PointToPointChannel和WifiChannel的Channel的專(zhuān)用版本。例如,CsmaChannel模擬實(shí)現(xiàn)載波偵聽(tīng)多址通信介質(zhì)的通信子網(wǎng)的版本。這為我們提供了類(lèi)似以太網(wǎng)的功能。
網(wǎng)絡(luò)設(shè)備--net device
過(guò)去,如果您想將計(jì)算機(jī)連接到網(wǎng)絡(luò),則必須購(gòu)買(mǎi)特定類(lèi)型的網(wǎng)絡(luò)電纜和稱(chēng)為(在PC術(shù)語(yǔ)中)需要在計(jì)算機(jī)中安裝的外圍設(shè)備卡的硬件設(shè)備。如果外圍設(shè)備卡實(shí)現(xiàn)了某些網(wǎng)絡(luò)功能,則稱(chēng)為網(wǎng)絡(luò)接口卡或網(wǎng)卡。今天,大多數(shù)計(jì)算機(jī)都內(nèi)置了網(wǎng)絡(luò)接口硬件,用戶(hù)看不到這些構(gòu)建塊。
如果沒(méi)有軟件驅(qū)動(dòng)程序來(lái)控制硬件,NIC將無(wú)法運(yùn)行。在Unix(或Linux)中,一塊外圍硬件被歸類(lèi)為設(shè)備。使用設(shè)備驅(qū)動(dòng)程序控制設(shè)備,并使用統(tǒng)稱(chēng)為網(wǎng)絡(luò)設(shè)備的網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序控制網(wǎng)絡(luò)設(shè)備(NIC)。在Unix和Linux中,您可以通過(guò)名稱(chēng)(例如eth0)來(lái)引用這些網(wǎng)絡(luò)設(shè)備。
在ns-3中,網(wǎng)絡(luò)設(shè)備抽象涵蓋軟件驅(qū)動(dòng)程序和模擬硬件。網(wǎng)絡(luò)設(shè)備被“安裝”在節(jié)點(diǎn)中,以使節(jié)點(diǎn)能夠通過(guò)信道與模擬中的其他節(jié)點(diǎn)通信。就像在真實(shí)計(jì)算機(jī)中一樣,節(jié)點(diǎn)可以通過(guò)多個(gè)NetDevices連接到多個(gè)通道。
網(wǎng)絡(luò)設(shè)備抽象由NetDevice類(lèi)在C ++中表示。 NetDevice類(lèi)提供了管理Node和Channel對(duì)象連接的方法;并且可能由面向?qū)ο缶幊桃饬x上的開(kāi)發(fā)人員專(zhuān)門(mén)化。在本教程中,我們將使用NetDevice的幾個(gè)專(zhuān)用版本,稱(chēng)為CsmaNetDevice,PointToPointNetDevice和WifiNetDevice。正如以太網(wǎng)NIC設(shè)計(jì)用于以太網(wǎng)網(wǎng)絡(luò)一樣,CsmaNetDevice設(shè)計(jì)用于CsmaChannel; PointToPointNetDevice旨在與PointToPointChannel協(xié)同工作,WifiNetNevice旨在與WifiChannel協(xié)同工作。
拓?fù)鋷椭?topology helper
在實(shí)際網(wǎng)絡(luò)中,您將找到具有添加(或內(nèi)置)NIC的主機(jī)。 在ns-3中,我們會(huì)說(shuō)你會(huì)找到帶有NetDevices的節(jié)點(diǎn)。 在大型模擬網(wǎng)絡(luò)中,您需要在節(jié)點(diǎn),NetDevices和Channels之間安排許多連接。
由于將NetDevices連接到節(jié)點(diǎn),NetDevices到通道,分配IP地址等是ns-3中的常見(jiàn)任務(wù),因此我們提供了所謂的拓?fù)漭o助工具,以使其盡可能簡(jiǎn)單。 例如,可能需要許多不同的ns-3核心操作來(lái)創(chuàng)建NetDevice,添加MAC地址,在節(jié)點(diǎn)上安裝該網(wǎng)絡(luò)設(shè)備,配置節(jié)點(diǎn)的協(xié)議棧,然后將NetDevice連接到Channel。 將多個(gè)設(shè)備連接到多點(diǎn)通道然后將各個(gè)網(wǎng)絡(luò)連接到互聯(lián)網(wǎng)絡(luò)中將需要更多操作。 我們提供拓?fù)漭o助對(duì)象,將這些許多不同的操作組合成一個(gè)易于使用的模型,以方便您使用。
節(jié)點(diǎn)容器--NodeContainer
在繼續(xù)之前,讓我們找到NodeContainer類(lèi)的文檔。進(jìn)入給定類(lèi)的文檔的另一種方法是通過(guò)Doxygen頁(yè)面中的Classes選項(xiàng)卡。如果您仍然使用Doxygen,只需向上滾動(dòng)到頁(yè)面頂部并選擇Classes選項(xiàng)卡。您應(yīng)該會(huì)看到一組新選項(xiàng)卡,其中一個(gè)是Class List。在該選項(xiàng)卡下,您將看到所有ns-3類(lèi)的列表。向下滾動(dòng),尋找ns3 :: NodeContainer。當(dāng)您找到課程時(shí),請(qǐng)繼續(xù)并選擇它以轉(zhuǎn)到課程的文檔。
您可能還記得我們的一個(gè)關(guān)鍵抽象是節(jié)點(diǎn)。這代表了一臺(tái)計(jì)算機(jī),我們將添加協(xié)議棧,應(yīng)用程序和外圍卡等內(nèi)容。 NodeContainer拓?fù)渲痔峁┝艘环N方便的方法來(lái)創(chuàng)建,管理和訪問(wèn)我們創(chuàng)建的任何Node對(duì)象,以便運(yùn)行模擬。上面的第一行只是聲明了一個(gè)我們稱(chēng)之為節(jié)點(diǎn)的NodeContainer。第二行調(diào)用節(jié)點(diǎn)對(duì)象上的Create方法,并要求容器創(chuàng)建兩個(gè)節(jié)點(diǎn)。如Doxygen中所述,容器調(diào)用ns-3系統(tǒng),以創(chuàng)建兩個(gè)Node對(duì)象并在內(nèi)部存儲(chǔ)指向這些對(duì)象的指針。
它們?cè)谀_本中的節(jié)點(diǎn)什么都不做。構(gòu)建拓?fù)涞南乱徊绞菍⑽覀兊墓?jié)點(diǎn)連接到一個(gè)網(wǎng)絡(luò)中。我們支持的最簡(jiǎn)單的網(wǎng)絡(luò)形式是兩個(gè)節(jié)點(diǎn)之間的單點(diǎn)對(duì)點(diǎn)鏈接。我們將在這里構(gòu)建其中一個(gè)鏈接。
設(shè)備容器--NetDeviceContainer
在腳本的這一點(diǎn)上,我們有一個(gè)包含兩個(gè)節(jié)點(diǎn)的NodeContainer。 我們有一個(gè)PointToPointHelper,它已經(jīng)準(zhǔn)備就緒,可以在它們之間創(chuàng)建PointToPointNetDevices并連接PointToPointChannel對(duì)象。 正如我們使用NodeContainer拓?fù)漭o助對(duì)象為我們的模擬創(chuàng)建節(jié)點(diǎn)一樣,我們將要求PointToPointHelper完成為我們創(chuàng)建,配置和安裝設(shè)備所涉及的工作。 我們需要有一個(gè)創(chuàng)建的所有NetDevice對(duì)象的列表,所以我們使用NetDeviceContainer來(lái)保存它們就像我們使用NodeContainer來(lái)保存我們創(chuàng)建的節(jié)點(diǎn)一樣。 以下兩行代碼,將完成設(shè)備和通道的配置。第一行聲明上面提到的設(shè)備容器,第二行聲明重載。 PointToPointHelper的Install方法將NodeContainer作為參數(shù)。在內(nèi)部,創(chuàng)建了NetDeviceContainer。對(duì)于NodeContainer中的每個(gè)節(jié)點(diǎn)(對(duì)于點(diǎn)對(duì)點(diǎn)鏈接必須有兩個(gè)節(jié)點(diǎn)),創(chuàng)建PointToPointNetDevice并將其保存在設(shè)備容器中。創(chuàng)建PointToPointChannel并附加兩個(gè)PointToPointNetDevices。當(dāng)PointToPointHelper創(chuàng)建對(duì)象時(shí),先前在幫助程序中設(shè)置的屬性用于初始化創(chuàng)建的對(duì)象中的相應(yīng)屬性。
在執(zhí)行pointToPoint.Install(nodes)調(diào)用之后,我們將有兩個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都有一個(gè)安裝的點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)設(shè)備和它們之間的單個(gè)點(diǎn)對(duì)點(diǎn)通道。兩個(gè)設(shè)備都將配置為通過(guò)具有2毫秒傳輸延遲的信道以每秒5兆比特的速率傳輸數(shù)據(jù)。