ns-3 pūnaewele simulator kumu aʻo. Mokuna 4

ns-3 pūnaewele simulator kumu aʻo. Mokuna 4
mokuna 1,2
mokuna 3

4 Nānā manaʻo
4.1 Nā unuhi kī
4.1.1 Node
4.1.2 Noi
4.1.3 Kanal
4.1.4 Mea Hana Pūnaewele
4.1.5 Nā mea kōkua Topological
4.2 Palapala ns-3 mua
4.2.1 Code Boilerplate
4.2.2 Pākuʻi
4.2.3 ns3 wahi inoa
4.2.4 Hoʻopaʻa inoa
4.2.5 Hana nui
4.2.6 Hoʻohana i nā mea kōkua topology
4.2.7 Hoʻohana i ka noi
4.2.8 Simulator
4.2.9 Ke kūkulu ʻana i kāu palapala
4.3 ns-3 Kumu kumu

MOKUNA 4

Nānā manaʻo

ʻO ka mea mua e pono ai mākou e hana ma mua o ka hoʻomaka ʻana e aʻo a kākau paha i ka code ns-3 e wehewehe i kekahi mau manaʻo kumu a me nā abstractions i loko o ka ʻōnaehana. ʻIke ʻia paha ka hapa nui o kēia i kekahi, akā manaʻo mākou e lawe i ka manawa e heluhelu ai i kēia ʻāpana e hōʻoia e hoʻomaka ana ʻoe ma kahi kahua paʻa.

4.1 Nā unuhi kī

Ma kēia ʻāpana, e nānā mākou i kekahi mau huaʻōlelo i hoʻohana mau ʻia ma ka pūnaewele akā loaʻa kahi manaʻo kikoʻī ma ns-3.

4.1.1 Node

I loko o ka Internet jargon, ua kapa ʻia kahi mea lolouila e hoʻopili ai i kahi pūnaewele he host a i kekahi manawa he ʻōnaehana hoʻopau. No ka mea, ʻo ka ns-3 he simulator pūnaewele a ʻaʻole he simulator pūnaewele, ʻaʻole mākou e hoʻohana i ka huaʻōlelo host, no ka mea pili kēia i ka Pūnaewele a me kāna mau protocols. Akā, hoʻohana mākou i kahi huaʻōlelo maʻamau, hoʻohana pū ʻia e nā simulators ʻē aʻe, i hoʻokumu ʻia i ka manaʻo kalakala: node (wahi).

Ma ns-3, ua kapa ʻia ka abstraction i lalo o kahi mea hoʻopili helu he node. Hōʻike ʻia kēia abstraction ma C ++ e ka papa Node. Papa NodeNode (node) hāʻawi i nā ala no ka hoʻopunipuni ʻana i nā hiʻohiʻona o nā mea hoʻopili helu ma nā hoʻohālikelike.

Pono ʻoe e hoʻomaopopo wahi e like me kahi kamepiula āu e hoʻohui ai i nā hana. E hoʻohui ʻoe i nā mea e like me nā noi, nā ʻāpana protocol, a me nā kāleka peripheral me nā mea hoʻokele e hiki ai i ke kamepiula ke hana pono. Hoʻohana mākou i ke kumu hoʻohālike like ma ns-3.

4.1.2 Noi

ʻO ka maʻamau, ua māhele ʻia nā polokalamu kamepiula i ʻelua papa ākea. Hoʻonohonoho nā polokalamu ʻōnaehana i nā kumuwaiwai kamepiula like ʻole e like me ka hoʻomanaʻo, nā kaʻina hana, ka disk, ka pūnaewele, a pēlā aku e like me kekahi kumu hoʻohālike. ʻAʻole hoʻohana maʻamau ka polokalamu ʻōnaehana i kēia mau kumuwaiwai e hana i nā hana e pōmaikaʻi pono ai ka mea hoʻohana. Hoʻohana maʻamau ka mea hoʻohana i kahi noi e hoʻokō i kahi pahuhopu kikoʻī, e loaʻa a hoʻohana i nā kumuwaiwai i mālama ʻia e ka polokalamu ʻōnaehana.

Hoʻokaʻawale pinepine ʻia ka laina o ka hoʻokaʻawale ʻana ma waena o ka ʻōnaehana a me nā polokalamu noiʻi i nā hoʻololi kūlana kiʻekiʻe e kū nei i nā pahele ʻōnaehana hana. ʻAʻohe manaʻo maoli o ns-3 o kahi ʻōnaehana hana a no laila ʻaʻohe manaʻo o nā pae pono a i ʻole kelepona ʻōnaehana. Loaʻa iā mākou kahi manaʻo no kahi polokalamu. E like me ka holo ʻana o nā polokalamu polokalamu "honua maoli" ma nā kamepiula e hana i nā hana, holo nā noi ns-3 ma nā nodes ns-3 e hoʻokele i nā hoʻohālikelike i ka honua hoʻohālikelike.

Ma ns-3, ʻo ka abstraction kumu no ka polokalamu mea hoʻohana e hoʻopuka i kekahi hana no ka hoʻohālike ʻana he noi. Hōʻike ʻia kēia abstraction ma C ++ e ka papa Application. Hāʻawi ka papa Application i nā ala no ka hoʻopunipuni ʻana i nā manaʻo o kā mākou mana hoʻohana-level o nā noi i nā simulation. Manaʻo ʻia nā mea hoʻomohala e hoʻolalelale i ka papa Application ma kahi manaʻo hoʻonohonoho hoʻonohonoho hoʻolālā e hana i nā noi hou. Ma kēia kumu aʻo, e hoʻohana mākou i nā loea kūikawā o ka papa Application i kapa ʻia UdpEchoClientApplication и UdpEchoServerApplication. E like me kāu e manaʻo ai, ua hana kēia mau noi i kahi hoʻonohonoho o nā noi mea kūʻai aku / server i hoʻohana ʻia no ka hoʻopuka ʻana a me ka ʻōlelo ʻana i nā ʻeke pūnaewele.

4.1.3 Kanal

Ma ke ao maoli, hiki iā ʻoe ke hoʻohui i kahi kamepiula i kahi pūnaewele. ʻO ka manawa pinepine i kapa ʻia ka media e hoʻouna ʻia ai ka ʻikepili i kēia mau pūnaewele. Ke hoʻopili ʻoe i kahi uwea Ethernet i kahi puka pā, ke hoʻopili nei ʻoe i kāu kamepiula i kahi loulou Ethernet. Ma ka honua ns-3 i hoʻohālikelike ʻia, hoʻopili ʻia kahi node i kahi mea e hōʻike ana i kahi ala kamaʻilio. Maʻaneʻi, kapa ʻia ka abstraction kumu o ka subnetwork kamaʻilio he ala a hōʻike ʻia ma C++ e ka papa Channel.

Papa KanalKanal hāʻawi i nā ala no ka mālama ʻana i ka pilina o nā mea subnet a me ka hoʻopili ʻana i nā pūʻali iā lākou. Hiki ke hoʻolalelale ʻia nā kanal e nā mea hoʻomohala ma kahi manaʻo hoʻonohonoho hoʻonohonoho. Hiki ke hoʻohālike i ka hoʻoheheʻe ʻana i kahi mea maʻalahi e like me ka uea. Hiki ke hoʻohālike i nā mea paʻakikī e like me ka hoʻololi Ethernet nui a i ʻole kahi ākea ʻekolu-dimensional i piha i nā mea pale i ka hihia o nā ʻupena uila.

E hoʻohana mākou i nā mana kūikawā o ke kahawai ma kēia kumu aʻo i kapa ʻia CsmaChannelCsmaChannel, PointToPointChannelPointToPointChannel и WifiChannelWifiChannel. CsmaChannel, no ka laʻana, hoʻohālike i kahi mana o kahi subnet kamaʻilio e hoʻokō ana i kahi kaiapuni kamaʻilio lawe-sense. Hāʻawi kēia iā mākou i ka hana Ethernet-like.

4.1.4 Mea Hana Pūnaewele

Ma mua, inā makemake ʻoe e hoʻopili i kahi kamepiula i kahi pūnaewele, pono ʻoe e kūʻai i kahi kelepona pūnaewele kikoʻī a me kahi hāmeʻa i kapa ʻia (ma ka PC terminology) kahi kāleka peripheral e pono e hoʻokomo ʻia i loko o ke kamepiula. Inā hoʻokō ke kāleka peripheral i kekahi mau hana pūnaewele, ua kapa ʻia lākou i nā kāleka kikowaena pūnaewele a i ʻole kāleka pūnaewele. I kēia mau lā, hele mai ka hapa nui o nā kamepiula me ka ʻenehana kikowaena pūnaewele i hoʻohui ʻia a ʻaʻole ʻike ʻia e nā mea hoʻohana ma ke ʻano he ʻokoʻa.

ʻAʻole e holo ka kāleka pūnaewele me ka ʻole o ka mea hoʻokele polokalamu e hoʻomalu i kāna lako. Ma Unix (a i ʻole Linux), hoʻokaʻawale ʻia kahi ʻāpana o nā mea hana peripheral ma ke ʻano he mea hana. Hoʻokele ʻia nā mea hoʻohana me nā mea hoʻokele hāmeʻa, a mālama ʻia nā mea hoʻohana pūnaewele (NIC) me ka hoʻohana ʻana i nā mea hoʻokele pūnaewele (mea hoʻokele pūnaewele) a hui pū ʻia nā ʻenehana pūnaewele (nā mea ʻupena). Ma Unix a me Linux, ʻike ʻoe i nā polokalamu pūnaewele ma nā inoa e like me eth0.

Ma ns-3, uhi ka unuhi ʻana o ka ʻenehana pūnaewele i ka mea hoʻokele polokalamu a me ka lako hana i hoʻohālike ʻia. Ma ka simulation, ua "hoʻokomo" kahi mea pūnaewele i loko o kahi node e hiki ai ke kamaʻilio me nā nodes ʻē aʻe ma o nā kahawai. E like me ka lolouila maoli, hiki ke hoʻopili ʻia kahi node i nā ala he nui ma o nā polokalamu he nui Nā Pūnaewele Pūnaewele.

Hōʻike ʻia ka abstraction pūnaewele o kahi mea ma C ++ e ka papa Pūnaewele Pūnaewele. Papa Pūnaewele Pūnaewele hāʻawi i nā ala no ka mālama ʻana i nā pilina i nā mea Node a me Channel; a hiki ke hoʻonaʻauao ʻia e nā mea hoʻomohala ma ke ʻano o ka hoʻolālā ʻana i nā mea. Ma kēia kumu aʻo e hoʻohana mākou i kekahi mau mana kūikawā o NetDevice i kapa ʻia CsmaNetDevice, PointToPointNetDevice и WifiNetDevice. E like me ka Ethernet network adapter i hoʻolālā ʻia e hana me kahi pūnaewele Ethernet, CsmaNetDevice i hoʻolālā ʻia e hana pū me CsmaChannel, PointToPointNetDevice i hoʻolālā ʻia e hana pū me PointToPointChannela me ka WifiNetDevice - i hoʻolālā ʻia e hana pū me ʻO Wifi Channel.

4.1.5 Nā mea kōkua Topological

Ma kahi pūnaewele maoli, e ʻike ʻoe i nā kamepiula hoʻokipa me nā kāleka pūnaewele i hoʻohui ʻia (a i kūkulu ʻia paha). Ma ns-3 e ʻōlelo mākou e ʻike ʻoe i nā nodes me nā NetDevices i hoʻopili ʻia. Ma kahi pūnaewele hoʻohālikelike nui, pono ʻoe e hoʻonohonoho i nā pilina ma waena o nā mea he nui wahi, Pūnaewele Pūnaewele и Kanal.

Mai ka hoʻohui ʻana i nā NetDevices i nā nodes, NetDevices i nā loulou, ka hāʻawi ʻana i nā helu IP, etc. i ka ns-3 he hana maʻamau, i mea e maʻalahi ai kēia e hāʻawi mākou i nā mea kōkua topology. No ka laʻana, no ka hana ʻana i kahi NetDevice, pono ʻoe e hana i nā hana kernel ns-3 he nui, hoʻohui i kahi leka uila MAC, hoʻokomo i ka ʻenehana pūnaewele ma Node, hoʻonohonoho i ka hoʻopaʻa protocol o ka node, a laila hoʻohui i ka NetDevice i ke Kanal. Pono ʻia nā hana hou aku e hoʻohui i nā polokalamu he nui i nā loulou multipoint a laila hoʻohui i kēlā me kēia pūnaewele i kahi pūnaewele Internetworks. Hāʻawi mākou i nā mea kōkua topology e hoʻohui i kēia mau hana he nui i kahi kumu hoʻohana maʻalahi no kou ʻoluʻolu.

4.2 Palapala ns-3 mua

Inā hoʻokomo ʻoe i ka ʻōnaehana e like me ka manaʻo ma luna, e loaʻa iā ʻoe ka hoʻokuʻu ns-3 i kahi papa kuhikuhi i kapa ʻia he repos i kāu papa kuhikuhi home. E hele i ka papa kuhikuhi hookuu

Inā ʻaʻohe āu papa kuhikuhi, ʻo ia hoʻi, ʻaʻole ʻoe i kuhikuhi i ka papa kuhikuhi puka i ka wā e kūkulu ai i ka mana hoʻokuʻu o ns-3, kūkulu e like me kēia:
$ ./waf hoʻonohonoho —build-profile=release —out=build/release,
$ ./waf kūkulu

ma laila ʻoe e ʻike ai i kahi papa kuhikuhi e like me kēia:

AUTHORS       examples      scratch       utils       waf.bat*
bindings      LICENSE       src           utils.py    waf-tools
build         ns3           test.py*      utils.pyc   wscript
CHANGES.html  README        testpy-output VERSION     wutils.py
doc           RELEASE_NOTES testpy.supp   waf*        wutils.pyc

E hele i ka papa kuhikuhi laʻana/aʻo. Pono ʻoe e ʻike i kahi faila ma laila i kapa ʻia mua.cc. He palapala kēia e hana ai i kahi pilina maʻalahi ma waena o nā node ʻelua a hoʻouna i hoʻokahi ʻeke ma waena o nā nodes. E nānā kāua i kēia ʻatikala ma kēlā me kēia laina; no ka hana ʻana i kēia, wehe iā first.cc i kāu mea hoʻoponopono punahele.

4.2.1 Code Boilerplate
ʻO ka laina mua i loko o ka faila ka laina mode hoʻoponopono emacs. Hōʻike ʻo ia i nā emacs e pili ana i nā ʻano hoʻohālikelike (kaila coding) a mākou e hoʻohana ai i kā mākou kumu kumu.

/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */

He hihia hoʻopaʻapaʻa mau kēia, no laila pono mākou e hoʻonohonoho pololei i ka moʻolelo e hoʻopau koke i ke ala. ʻO ka papahana ns-3, e like me ka hapa nui o nā papahana nui, ua hoʻohana i ke ʻano coding e pono e hoʻokō nā code āpau i hāʻawi ʻia. Inā makemake ʻoe e hāʻawi i kāu code i ka papahana, pono ʻoe e hoʻokō me ka ns-3 coding standard, e like me ka wehewehe ʻana ma ka faila. doc/codingstd.txt a i ʻole hōʻike ʻia ma ka ʻaoʻao pūnaewele papahana: https://www.nsnam.org/develop/contributing-code/coding-style/.

Manaʻo mākou e hoʻomaʻamaʻa ʻoe i ka nānā a me ka manaʻo o ka code ns-3 a hoʻohana i kēia maʻamau i kēlā me kēia manawa āu e hana ai me kā mākou code. Ua ʻae ka hui hoʻomohala holoʻokoʻa a me nā mea kōkua i kēia ma hope o ka ʻōhumu ʻana. ʻO ka laina emacs mode ma luna nei e maʻalahi ke hoʻohālikelike pololei inā ʻoe e hoʻohana ana i ka mea hoʻoponopono emacs.

Ua laikini ʻia ka simulator ns-3 me ka hoʻohana ʻana ʻO ka GNU Keʻena Lahui Launa. E ʻike ʻoe i ke poʻomanaʻo kānāwai GNU kūpono i kēlā me kēia faila hoʻoili ns-3. E ʻike pinepine ʻoe i kahi leka kope kope no kekahi o nā hui i komo i ka papahana ns-3 ma luna o ka GPL kikokikona a me ka mea kākau, i hōʻike ʻia ma lalo nei.

/* 
* This program is free software; you can redistribute it and/or modify 
* it under the terms of the GNU General Public License version 2 as 
* published by the Free Software Foundation; 
*
* This program is distributed in the hope that it will be useful, 
* but WITHOUT ANY WARRANTY; without even the implied warranty of 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
* GNU General Public License for more details. 
* 
* You should have received a copy of the GNU General Public License 
* along with this program; if not, write to the Free Software 
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
*/

4.2.2 Pākuʻi

Hoʻomaka ka code ponoʻī me kahi ʻano o nā ʻōlelo hoʻohui (komo pū).

#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/applications-module.h"

No ke kōkua ʻana i kā mākou mea hoʻohana palapala kiʻekiʻe e hoʻokō i ka helu nui o nā faila poʻomanaʻo i loko o ka ʻōnaehana, hui mākou iā lākou e like me kā lākou hoʻohana ʻana i nā modula nui. Hāʻawi mākou i kahi faila poʻomanaʻo e hoʻouka hou i nā faila poʻomanaʻo a pau i hoʻohana ʻia i loko o kahi module i hāʻawi ʻia. Ma kahi o ka ʻimi pono ʻana i ke poʻomanaʻo āu e pono ai a loaʻa paha ka papa inoa kūpono o nā hilinaʻi, hāʻawi mākou iā ʻoe i ka hiki ke hoʻoiho i kahi pūʻulu o nā faila i ka granularity nui. ʻAʻole ʻo ia ke ala kūpono loa, akā ʻoiaʻiʻo e maʻalahi ke kākau ʻana i nā palapala.

Hoʻokomo ʻia kēlā me kēia o nā faila ns-3 i kahi papa kuhikuhi i kapa ʻia ns3 (kūkulu subdirectory) e pale aku i nā paio inoa faila i ka wā o ke kaʻina hana. waihona ns3/core-module.h e pili ana i ka module ns-3, āu e ʻike ai ma ka papa kuhikuhi src/core i ka hoʻokuʻu ʻana āu i kau ai. Ma ka papa inoa o kēia papa kuhikuhi e ʻike ʻoe i ka nui o nā faila poʻomanaʻo. Ke hana ʻoe i ka hui, Waf hoʻonoho i nā faila poʻomanaʻo lehulehu ma ka papa kuhikuhi ns3 ma kahi papa kuhikuhi kūkulu/debug

Inā ʻaʻohe āu papa kuhikuhi, ʻo ia hoʻi, ʻaʻole ʻoe i kuhikuhi i ka papa kuhikuhi puka i ka wā e kūkulu ai i ka mana hoʻokuʻu o ns-3, kūkulu e like me kēia:
$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf kūkulu
ai ole ia,
$ ./waf configure --build-profile=optimized --out=build/optimized
$ ./waf kūkulu

ai ole ia, kūkulu / hoʻopaʻa ʻia, ma muli o kāu hoʻonohonoho. Waf e hoʻopuka ʻakomi pū i kahi module me ka faila e hoʻouka i nā faila poʻomanaʻo lehulehu. No ka mea e hahai pono ana ʻoe i kēia alakaʻi ma ka hoʻomana, ua hana ʻoe

$ ./waf -d debug --enable-examples --enable-tests configure

e hoʻonohonoho i ka papahana e holo i nā hale debug e loaʻa ana nā hiʻohiʻona a me nā hoʻāʻo. Ua hana ʻoe

$ ./waf

e hui i ka papahana. No laila ke nānā ʻoe i ka papa kuhikuhi ../../build/debug/ns3, a laila e ʻike ʻoe, ma waena o nā mea ʻē aʻe, nā faila poʻomanaʻo o nā modula ʻehā i hōʻike ʻia ma luna. Hiki iā ʻoe ke nānā i nā mea i loko o kēia mau faila a ʻike aia lākou i nā faila lehulehu āpau i hoʻohana ʻia e nā modules pili.

4.2.3 ns3 wahi inoa

Laina aʻe ma ka palapala mua.cc he ʻōlelo hoʻolaha inoa.

using namespace ns3;

Hoʻokomo ʻia ka papahana ns-3 i kahi inoa inoa C++ i kapa ʻia ʻo ns3. Hoʻopili kēia i nā ʻōlelo a pau e pili ana i ka ns-3 i kahi ākea ma waho o ka inoa inoa honua, e manaʻolana e kōkua i ka hoʻohui ʻana me nā code ʻē aʻe. Ke hoʻohana nei i ka mea hoʻohana C++ e hoʻolauna i ka inoa inoa ns-3 i loko o ka ʻāina hoʻolaha o kēia manawa (global). He ala maikaʻi kēia o ka ʻōlelo ʻana ma hope o kēia hoʻolaha, ʻaʻole pono ʻoe e paʻi i ka ns3::scope ʻae ʻae ma mua o kāu code ns-3 āpau e hoʻohana ai. Inā ʻaʻole ʻoe i kamaʻāina i nā namespaces, e nānā i kahi kokoke i nā puke C++ a hoʻohālikelike i ka namespace ns3 me ka hoʻohana ʻana i ka std namespace a me ka haʻi. using namespace std; i nā laʻana o ka hana ʻana me ka mea hana hoʻopuka kāki a me nā kahawai.

4.2.4 Hoʻopaʻa inoa

ʻO ka laina aʻe o ka palapala,

NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

E hoʻohana mākou i kēia ʻōlelo i wahi kūpono e kūkākūkā ai i kā mākou ʻōnaehana palapala ʻO oxygen. Inā ʻoe e nānā i ka pūnaewele papahana ns-3, e ʻike ʻoe i kahi loulou Palapala ma ka pae hoʻokele. Inā ʻoe e kaomi i kēia loulou e lawe ʻia ʻoe i kā mākou palapala palapala. Aia kahi loulou "Latest Release" e lawe iā ʻoe i ka palapala no ka mana paʻa hou loa o ns-3. Inā koho ʻoe i ka loulou "API Documentation", e lawe ʻia ʻoe i ka ʻaoʻao palapala ns-3 API.

Ma ka ʻaoʻao hema o ka ʻaoʻao e ʻike ʻoe i kahi kiʻi kiʻi o ke ʻano palapala. ʻO kahi maikaʻi e hoʻomaka ai ʻo ka Modules ns-3 "puke" i ka lāʻau hoʻokele ns-3. Inā hōʻike ʻoe modules, e ʻike ʻoe i kahi papa inoa o nā palapala ns-3 modules. E like me ka mea i kūkākūkā ʻia ma luna nei, pili pono ka manaʻo o kahi module i nā faila i hoʻokomo ʻia ma ka module ma luna. Kūkākūkā ʻia ka subsystem logging ns-3 ma ka ʻāpana Ke hoʻohana nei i ka Module Logging, no laila e hoʻi hou mākou ma hope o kēia kumu aʻo, akā hiki iā ʻoe ke aʻo e pili ana i ka ʻōlelo ma luna ma ka nānā ʻana i ka module Koraa laila wehe i ka puke ʻO nā lako hana hōʻaiʻēa laila koho i ka ʻaoʻao kālai lāʻauʻana. Kaomi ma kālai lāʻauʻana.

Pono ʻoe e nānā i ka palapala ʻO oxygen no ka module kālai lāʻauʻana. Ma ka papa inoa o nā macros ma luna o ka ʻaoʻao, e ʻike ʻoe i kahi komo no NS_LOG_COMPONENT_DEFINE. Ma mua o ke kaomi ʻana i ka loulou, e nānā pono i ka "Detailed Description" o ka module hoʻopaʻa inoa e hoʻomaopopo i ke ʻano o ka hana ma ka laulā. No ka hana ʻana i kēia, hiki iā ʻoe ke kaomi i lalo a i ʻole koho "More ..." ma lalo o ka pakuhi.

Ke loaʻa iā ʻoe kahi manaʻo nui o ka mea e hana nei, e hele i mua a nānā i ka palapala no ka NS_LOG_COMPONENT_DEFINE kikoʻī. ʻAʻole au e kope kope i ka palapala ma aneʻi, akā no ka hōʻuluʻulu ʻana, haʻi kēia laina i kahi mea hoʻopaʻa inoa i kapa ʻia FirstScriptExample, hiki iā ʻoe ke hoʻohana a hoʻopau paha i ka hoʻopaʻa inoa ʻana i nā memo ma ke kuhikuhi ʻana i kahi inoa.

4.2.5 Hana nui

Ma nā laina o ka palapala e ʻike ai ʻoe,

int 
main (int argc, char *argv[])
{ 

He hoʻolaha wale kēia o ka hana nui o kāu polokalamu (script). E like me kekahi papahana C ++, pono ʻoe e wehewehe i kahi hana nui, e hana mua ʻia kēia. ʻAʻohe mea kūikawā ma ʻaneʻi. ʻO kāu palapala ns-3 he polokalamu C++ wale nō. Hoʻonohonoho ka laina aʻe i ka hoʻonā manawa i 1 nanokekona, ʻo ia ka paʻamau:

Time::SetResolution (Time::NS);

ʻO ka hoʻonā manawa, a i ʻole ka hoʻonā wale ʻana, ʻo ia ka liʻiliʻi liʻiliʻi o ka manawa i hiki ke hoʻohana ʻia (ʻo ka ʻokoʻa liʻiliʻi liʻiliʻi ma waena o ʻelua mau manawa). Hiki iā ʻoe ke hoʻololi pololei i ka hoʻonā. ʻO ka mīkini e hāʻawi ana i kēia maʻalahi e hoʻopau i ka hoʻomanaʻo, no laila ke hoʻonohonoho pono ʻia ka hoʻonā, hoʻokuʻu mākou i ka hoʻomanaʻo, pale i nā mea hou. (Inā ʻaʻole ʻoe e hoʻonohonoho pono i ka hoʻonā, e paʻa ia i hoʻokahi nanosecond a e hoʻokuʻu ʻia ka hoʻomanaʻo i ka wā e hoʻomaka ai ka simulation.)

Hoʻohana ʻia nā laina ʻelua o ka palapala e hiki ai i ʻelua ʻāpana logging i kūkulu ʻia i loko o nā noi EchoClient и EchoServer:

LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO); LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);

Inā heluhelu ʻoe i ka palapala no ka ʻāpana Logging, e ʻike ʻoe he nui nā pae o ka logging/granularity hiki iā ʻoe ke hoʻohana i kēlā me kēia ʻāpana. Hiki i kēia mau laina code ʻelua ke hoʻopaʻa inoa debug i ka pae INFO no nā mea kūʻai aku a me nā kikowaena. Ma kēia pae, e paʻi ka palapala noi i nā memo i kona hoʻouna ʻana a loaʻa i nā ʻeke i ka wā simulation.

I kēia manawa e iho mākou i ka ʻoihana o ka hana ʻana i ka topology a me ka holo ʻana i ka simulation. Hoʻohana mākou i nā mea kōkua topology e maʻalahi i kēia hana.

4.2.6 Hoʻohana i nā mea kōkua topology

ʻO nā laina ʻelua o ke code ma kā mākou palapala e hana maoli i nā mea Node ns-3 e hōʻike ana i nā kamepiula i ka simulation.

NodeContainer nodes;
nodes.Create (2);

Ma mua o ka hoʻomau ʻana, e ʻimi kākou i ka palapala no ka papa NodeContainer. ʻO kahi ala ʻē aʻe e hele ai i ka palapala no ka papa i hāʻawi ʻia ma o ka pā papa ma nā ʻaoʻao ʻO oxygen. Inā ua wehe ʻia ʻo Doxygen, e kaomi wale i luna o ka ʻaoʻao a koho i ka papa papa. Pono ʻoe e ʻike i kahi pūʻulu hou o nā ʻaoʻao, ʻo kekahi o ia ka papa inoa o nā papa. Ma lalo o kēia pā e ʻike ʻoe i kahi papa inoa o nā papa ns-3 āpau. Holo i lalo i ns3:: NodeContainer. Ke ʻike ʻoe i kahi papa, koho iā ia e hele i ka palapala no ka papa.

E like me kā mākou e hoʻomanaʻo nei, ʻo kekahi o kā mākou abstractions koʻikoʻi ka node. Hōʻike ia i ke kamepiula kahi a mākou e hoʻohui ai i nā mea e like me nā protocol stacks, nā noi, a me nā kāleka peripheral. Kokua topology NodeContainer hāʻawi i kahi ala kūpono e hana, hoʻokele a komo i kekahi mea wahi, a mākou e hana ai e holo i ka simulation. Hōʻike wale ka laina mua ma luna NodeContainer, ka mea a mākou i kapa ai nodes. Kāhea ka laina ʻelua i ke ʻano hana ma nā mea nodes a noi i ka pahu e hana i ʻelua nodes. E like me ka mea i wehewehe ʻia ma ʻO oxygen, noi ka ipu i ka ʻōnaehana ns-3 e hana i ʻelua mea wahi a mālama i nā kuhikuhi i kēia mau mea i loko.

ʻAʻohe hana o nā nodes i hana ʻia ma ka palapala. ʻO ka hana hou aʻe i ke kūkulu ʻana i ka topology ka hoʻopili ʻana i kā mākou mau nodes i ka pūnaewele. ʻO ke ʻano maʻalahi o ka ʻupena a mākou e kākoʻo nei, ʻo ia ka pilina ma waena o nā node ʻelua. E hana mākou i kēia pilina.

PointToPointHelper

Hoʻokumu mākou i kahi pilina kikoʻī me ka hoʻohana ʻana i kahi kumu maʻamau, me ka hoʻohana ʻana i kahi mea kōkua topology e hana i ka hana haʻahaʻa e pono ai no ka pilina. E hoʻomanaʻo i kā mākou mau kīʻaha kumu ʻelua Pūnaewele Pūnaewele и Kanal. I ka honua maoli, pili like kēia mau huaʻōlelo i nā kāleka peripheral a me nā kelepona pūnaewele. ʻO ka mea maʻamau, pili pili kēia mau mea ʻelua i kekahi i kekahi, ʻaʻole hiki i kekahi ke hilinaʻi i ke kaʻana like, no ka laʻana, nā mea hana Ethernet ma luna o ke ala uwea. ʻO kā mākou mau mea kōkua topology e hahai i kēia pilina pili a no laila e hoʻohana ʻoe i hoʻokahi mea i kēia hiʻohiʻona PointToPointHelper no ka hoʻonohonoho a hoʻohui ʻana i nā mea ns-3 PointToPointNetDevice и PointToPointChannel. ʻO nā laina ʻekolu aʻe ma ka palapala:

PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps")); 
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

Laina mua,

PointToPointHelper pointToPoint;

hana i kahi laʻana o kahi mea ma ka waihona PointToPointHelper. Mai kahi kūlana kiʻekiʻe o ka nānā ʻana i ka laina aʻe,

pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));

haʻi i ka mea PointToPointHelper E hoʻohana i ka waiwai "5 Mbit/s" (ʻelima megabits i kekona) e like me "Ka helu ʻikepili".

Mai kahi kikoʻī kikoʻī o ka ʻike, pili ke kaula "DataRate" i ka mea a mākou i kapa ai he ʻano PointToPointNetDevice. Inā ʻoe e nānā ʻO oxygen no ka papa ns3::PointToPointNetDevice a ma ka palapala no ke ano GetTypeId e ʻike ʻoe i kahi papa inoa o nā ʻano i wehewehe ʻia no ka hāmeʻa. Aia ma waena o lākou ka ʻano "Ka helu ʻikepili" ʻO ka hapa nui o nā mea ns-3 i ʻike ʻia e ka mea hoʻohana he papa inoa like o nā ʻano. Hoʻohana mākou i kēia mīkini e hoʻonohonoho maʻalahi i ka simulation me ka ʻole o ka hoʻopili hou ʻana, e like me kāu e ʻike ai ma ka ʻāpana aʻe.

Like me "Ka helu ʻikepili" ma PointToPointNetDevice, e ʻike ʻoe i ke ʻano "Delay" pili me ka PointToPointChannel. Ka laina hope

pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

e'ōlelo ana PointToPointHelper E hoʻohana i ka waiwai "2 ms" (ʻelua milliseconds) ma ke ʻano he waiwai hoʻopaneʻe hoʻolaha no ka loulou point-to-point a laila e hana ai.

NetDeviceContainer

I kēia manawa aia mākou i ka palapala NodeContainer, i loaʻa ʻelua node. Aia iā mākou PointToPointHelper, i hoomakaukauia no ka hana ana i na mea PointToPointNetDevices a hoʻohui iā lākou me ka hoʻohana ʻana i kahi mea PointToPointChannel. E like me kā mākou hoʻohana ʻana i ka mea kōkua topology NodeContainer e hana i nā nodes, e nīnau mākou PointToPointHelper e hana i nā hana no mākou e pili ana i ka hana ʻana, ka hoʻonohonoho ʻana a me ka hoʻokomo ʻana i kā mākou mau polokalamu. Pono mākou i kahi papa inoa o nā mea i hana ʻia Pūnaewele Pūnaewele, no laila mākou e hoʻohana ai NetDeviceContainer e mālama iā lākou e like me kā mākou i hoʻohana ai NodeContainer e mālama i nā nodes a mākou i hana ai. ʻO nā laina code ʻelua e hiki mai ana,

NetDeviceContainer devices;
devices = pointToPoint.Install (nodes);

paʻa pono a me ka hoʻonohonoho ʻana i ke kahawai. Hōʻike ka laina mua i ka pahu mea i ʻōlelo ʻia ma luna, a ʻo ka lua ka hana nui. ʻano hana hoʻouka mea PointToPointHelper taliaina NodeContainer ma ke ʻano he ʻāpana. Iloko NetDeviceContainer no kēlā me kēia node i loko NodeContainer hana ʻia (no ke kamaʻilio kiko-i-kahi pono e loaʻa ʻelua o lākou) PointToPointNetDevice hana ʻia a mālama ʻia i loko o ka pahu hāmeʻa. PointToPointChannel hana ʻia a hoʻopili ʻia ʻelua PointToPointNetDevices. Ma hope o ka hana ʻana i nā mea, mālama ʻia nā ʻano PointToPointHelper, hoʻohana ʻia e hoʻomaka i nā ʻano pili i nā mea i hana ʻia.

Ma hope o ke kelepona ʻana pointToPoint.Install (nodes) e loaʻa iā mākou ʻelua nodes, kēlā me kēia me kahi mea hoʻohana pūnaewele i hoʻonohonoho ʻia a hoʻokahi loulou ma waena o lākou. E hoʻonohonoho ʻia nā mea ʻelua e hoʻouna i ka ʻikepili ma ka wikiwiki o ʻelima megabits i kekona me ka lohi o ka hoʻouna ʻana o ʻelua milliseconds ma luna o ke kahawai.

InternetStackHelper

Loaʻa iā mākou nā nodes a me nā mea hana i hoʻonohonoho ʻia, akā ʻaʻole i hoʻokomo ʻia kā mākou mau nodes i nā pūʻulu protocol. Na nā laina code ʻelua e hiki mai ana e mālama i kēia.

InternetStackHelper stack;
stack.Install (nodes);

InternetStackHelper - he mea kōkua topology no nā waihona pūnaewele, e like me PointToPointHelper no nā hāmeʻa pūnaewele point-to-point. ʻano hana hoʻouka lawe iā NodeContainer ma ke ʻano he ʻāpana. Ke hoʻokō ʻia, e hoʻokomo i ka waihona pūnaewele (TCP, UDP, IP, etc.) ma kēlā me kēia pahu pahu.

IPv4AddressHelper

A laila pono mākou e hoʻopili i kā mākou mau polokalamu me nā helu IP. Hāʻawi mākou i kahi kōkua topology e mālama i ka hoʻokaʻawale ʻana i ka leka uila IP. ʻO ka API wale nō i ʻike ʻia e ka mea hoʻohana ke hoʻonohonoho nei i ka helu IP kumu a me ka netmask e hoʻohana ai i ka wā e hana ai i ka hāʻawi ʻana i ka helu helu maoli (hana ʻia kēia ma kahi pae haʻahaʻa i loko o ke kōkua). ʻO nā laina ʻelua o ke code ma kā mākou hōʻailona hōʻailona mua.cc,

Ipv4AddressHelper address;
address.SetBase ("10.1.1.0", "255.255.255.0");

e haʻi aku i ka mea kōkua address a haʻi iā ia e hoʻomaka ia e hoʻokaʻawale i nā helu IP mai ka pūnaewele 10.1.1.0, me ka hoʻohana ʻana i ka bitmask 255.255.255.0 e hoʻoholo ai. ʻO ka mea paʻamau, e hoʻomaka ana nā ʻōlelo i hoʻokaʻawale ʻia i hoʻokahi a hoʻonui monotonically, no laila ʻo ka helu mua i hoʻokaʻawale ʻia mai kēia waihona ʻo 10.1.1.1, a laila 10.1.1.2, etc. I ka ʻoiaʻiʻo, ma kahi haʻahaʻa haʻahaʻa, hoʻomanaʻo ka ʻōnaehana ns-3 i nā helu IP āpau i hoʻokaʻawale ʻia a hoʻopuka i kahi hewa make inā hana ʻole ʻoe i kahi kūlana kahi i hana ʻia ai ka helu like ʻelua (ma ke ala, paʻakikī kēia hewa i ka debug).

ʻO ka laina code ma lalo nei,

Ipv4InterfaceContainer interfaces = address.Assign (devices);

hana i ka haʻawina helu wahi maoli. Ma ns-3 mākou e hoʻokumu i kahi pilina ma waena o kahi IP address a me kahi mea hoʻohana i ka mea IPv4Interface. E like me kā mākou makemake i kekahi manawa i kahi papa inoa o nā polokalamu pūnaewele i hana ʻia e ke kōkua no ka hoʻohana hope ʻana, pono mākou i kekahi manawa i kahi papa inoa o nā mea IPv4Interface. IPv4InterfaceContainer hāʻawi i kēia hana.

Ua kūkulu mākou i kahi pūnaewele point-to-point, me nā pahu i hoʻokomo ʻia a hāʻawi ʻia nā helu IP. I kēia manawa pono mākou i nā noi i kēlā me kēia node e hoʻohua i nā kaʻa.

4.2.7 Hoʻohana i ka noi

ʻO kekahi o nā abstractions nui o ka ʻōnaehana ns-3 noi (palapala). Ma kēia hiʻohiʻona ke hoʻohana nei mākou i ʻelua papa hana kūikawā noi ns-3 i kapaia UdpEchoServerApplication и UdpEchoClientApplication. E like me nā hihia ma mua, hoʻohana mākou i nā mea kōkua e hoʻonohonoho a mālama i nā mea kumu. Maanei mākou e hoʻohana ai UdpEchoServerHelper и UdpEchoClientHelper mau mea e maʻalahi ai ko mākou ola.

UdpEchoServerHelper

Hoʻohana ʻia nā laina code ma kā mākou first.cc example script no ka hoʻonohonoho ʻana i kahi noi kikowaena UDP echo server ma kekahi o nā nodes a mākou i hana mua ai.

UdpEchoServerHelper echoServer (9);

ApplicationContainer serverApps = echoServer.Install (nodes.Get (1));
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));

Hoʻokumu ka laina mua o ke code ma ka snippet ma luna UdpEchoServerHelper. E like me ka mea maʻamau, ʻaʻole kēia he noi ponoʻī, he mea ia e kōkua iā mākou e hana i nā noi maoli. ʻO kekahi o kā mākou hui e hāʻawi i nā ʻano pono i ka mea nāna i kūkulu i ka mea kōkua. I kēia hihia, ʻaʻole hiki i ka mea kōkua ke hana i kekahi mea pono ke hāʻawi ʻia i ka helu awa kahi e hoʻolohe ai ke kikowaena no nā ʻeke, pono e ʻike ʻia kēia helu i ka mea kūʻai aku. I kēia hihia, hāʻawi mākou i ka helu awa i ka mea hana kōkua. ʻO ka mea hana, hana wale SetAttribute me ka waiwai i hala. Ma hope aku, inā makemake ʻia, hiki iā ʻoe ke hoʻohana iā SetAttribute e hoʻonohonoho i kahi waiwai ʻē aʻe no ka ʻano Port.

E like me nā mea kōkua ʻē aʻe, ka mea UdpEchoServerHelper he ʻano hana hoʻouka. Ma ka hoʻokō pono ʻana i kēia ʻano hana i kahi noi kikowaena echo maʻamau a hoʻopaʻa iā ia i ka host. ʻO ka mea hoihoi, ke ʻano hoʻouka taliaina NodeContainer ma ke ʻano he ʻāpana e like me nā mea ʻē aʻe hoʻouka nā ala a mākou i ʻike ai.

ʻO ka C++ implicit hoʻololi e hana nei i ka hopena o ke ʻano node.Get(1) (ʻo ia ka mea e hoʻihoʻi i kahi kuhikuhi akamai i ka mea node - Ptr ) a hoʻohana iā ia i ka mea hana no ka mea inoa ʻole NodeContainera laila hāʻawi ʻia i ke ʻano hoʻouka. Inā ʻaʻole hiki iā ʻoe ke hoʻoholo i ka code C ++ i ka hōʻuluʻulu ʻana a hoʻokō ʻia, a laila e nānā i waena o nā hoʻololi implicit.

I kēia manawa, ʻike mākou i kēlā echoServer.Install e pili ana e hoʻokomo i ka polokalamu UdpEchoServerApplication i loaa ma NodeContainerkahi a mākou e hoʻohana ai no ka mālama ʻana i kā mākou mau node, node me ka index 1. Method hoʻouka e hoʻihoʻi i kahi pahu i loaʻa nā kuhikuhi i nā noi āpau (ma kēia hihia hoʻokahi, ʻoiai ua hala mākou i kahi inoa ʻole NodeContainer, loaʻa hoʻokahi node) i hana ʻia e ke kōkua.

Pono nā palapala noi e hoʻomaopopo i ka wā e hoʻomaka ai e hana i nā kaʻa "hoʻomaka" a pono paha e kuhikuhi i ka manawa e hooki ai "kū". Hāʻawi mākou i nā koho ʻelua. Hoʻonohonoho ʻia kēia mau manawa me ka hoʻohana ʻana i nā ala ApplicationContainer Ka hoʻomaka ' и hooki. ʻAe kēia mau ʻano i nā ʻāpana o ke ʻano manawa. I kēia hihia, hoʻohana mākou i kahi kaʻina kikoʻī o nā hoʻololi C++ e lawe iā C++ palua 1.0 a hoʻololi iā ia i kahi mea tns-3 Time e hoʻohana ana i ka mea Seconds e hoʻololi i kekona. E hoʻomanaʻo e hiki ke hoʻomalu ʻia nā lula hoʻololi e ka mea kākau kumu hoʻohālike, a aia iā C ++ kona mau lula ponoʻī, no laila ʻaʻole hiki iā ʻoe ke helu mau i nā ʻāpana i hoʻololi ʻia e like me kāu i manaʻo ai. ʻElua laina

serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));

e hoʻomaka ka noi kikowaena echo e hoʻomaka (e hoʻohuli aunoa) i hoʻokahi kekona ma hope o ka hoʻomaka ʻana o ka simulation a hoʻōki (hoʻopau) ma hope o ʻumi kekona o ka hoʻohālikelike. Ma muli o ka hōʻike ʻana i kahi hanana simulation (kahi hanana hoʻopau noi), e hoʻokō ʻia i loko o ʻumi kekona, e hoʻohālikelike ʻia ma kahi o ʻumi kekona o ka hana pūnaewele.

UdpEchoClientHelper

Palapala Hoʻohana hoʻopiʻi hoʻonohonoho ʻia ma kahi ʻano like me ke kikowaena. Aia kahi mea kumu UdpEchoClientApplication, i hoomaluia
UdpEchoClientHelper.

UdpEchoClientHelper echoClient (interfaces.GetAddress (1), 9);
echoClient.SetAttribute ("MaxPackets", UintegerValue (1));
echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
echoClient.SetAttribute ("PacketSize", UintegerValue (1024));

ApplicationContainer clientApps = echoClient.Install (nodes.Get (0));
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));;

Eia naʻe, no ka mea kūʻai echo pono mākou e hoʻonohonoho i ʻelima mau ʻano ʻokoʻa. Hoʻonohonoho ʻia nā ʻano ʻelua mua i ka manawa hana UdpEchoClientHelper. Hāʻawi mākou i nā ʻāpana i hoʻohana ʻia (i loko o ke kōkua) e hoʻonohonoho i nā ʻano "RemoteAddress" и "Wahi mamao" e like me kā mākou ʻaelike e hāʻawi i nā palena kūpono i ka mea hana kōkua.

E hoʻomanaʻo mākou ua hoʻohana mākou IPv4InterfaceContainer e hahai i nā helu IP a mākou i hāʻawi ai i kā mākou mau polokalamu. E pili ana ka null interface i loko o ka pahu interfaces me ka IP address o ka null node i loko o ka ipu nodes. ʻO ka pilina mua i loko o ka pahu interfaces e pili ana i ka IP address o ka node mua i loko o ka pahu nodes. No laila, ma ka laina mua o ke code (ma luna), hana mākou i mea kōkua a haʻi iā ia ʻo ka helu mamao o ka mea kūʻai aku ʻo ia ka IP address i hāʻawi ʻia i ka mea hoʻokipa kahi i loaʻa ai ke kikowaena. 'Ōlelo pū mākou, pono mākou e hoʻonohonoho i nā ʻeke e hoʻouna ʻia i ke awa ʻeiwa.

Hōʻike ka ʻano "MaxPackets" i ka mea kūʻai aku i ka nui o nā ʻeke hiki iā mākou ke hoʻouna i ka wā o ka simulation. Hōʻike ka ʻano "Interval" i ka mea kūʻai aku i ka lōʻihi o ka kali ʻana ma waena o nā ʻeke, a ʻo ke ʻano "PacketSize" e hōʻike i ka mea kūʻai aku i ka nui o ka uku o ka ʻeke. Me kēia hui pū ʻana, ʻōlelo mākou i ka mea kūʻai aku e hoʻouna i hoʻokahi ʻeke 1024-byte hoʻokahi.

E like me ke kikowaena echo, hoʻonoho mākou i nā ʻano o ka mea kūʻai echo Ka hoʻomaka ' и hooki, akā eia mākou e hoʻomaka i ka mea kūʻai aku i kekona ma hope o ka hoʻohuli ʻana o ke kikowaena (ʻelua kekona ma hope o ka hoʻomaka ʻana o ka simulation).

4.2.8 Simulator

I kēia manawa pono mākou e holo i ka simulation. Hana ʻia kēia me ka hoʻohana ʻana i ka hana honua Simulator::Holo.

Simulator::Run ();

I ka wā a mākou i kapa mua ai i nā ala,

serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));
... 
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));

ua hoʻonohonoho maoli mākou i nā hanana i ka simulator ma 1,0 kekona, 2,0 kekona, a me ʻelua mau hanana ma 10,0 kekona. Ma hope o ke kelepona Simulator::Holo, e hoʻomaka ka ʻōnaehana e nānā i ka papa inoa o nā hanana i hoʻonohonoho ʻia a hoʻokō iā lākou. E puhi mua ia i kahi hanana ma hope o 1,0 kekona, kahi e hoʻomaka ai ka noi kikowaena echo (hiki i kēia hanana ke hoʻonohonoho i nā hanana he nui). A laila e puhi ia i kahi hanana i hoʻonohonoho ʻia ma t=2,0 kekona e hoʻomaka i ka noi mea kūʻai echo. Eia hou, hiki i kēia hanana he nui nā hanana i hoʻolālā ʻia. ʻO ka hoʻokō hanana hoʻomaka i ka mea kūʻai echo e hoʻomaka i ka pae hoʻoili ʻikepili o ka simulation ma ka hoʻouna ʻana i kahi ʻeke i ke kikowaena.

ʻO ka hana o ka hoʻouna ʻana i kahi ʻeke i ke kikowaena e hoʻomaka i kahi kaulahao o nā hanana e hoʻonohonoho ʻia ma hope o nā hiʻohiʻona a e hoʻokō i nā mīkini o ka hoʻouna ʻana i kahi ʻeke echo e like me nā palena manawa a mākou i hoʻonohonoho ai i ka palapala.

ʻO ka hopena, ʻoiai ke hoʻouna aku nei mākou i hoʻokahi ʻeke (hoʻomanaʻo, the attribute MaxPackets ua hoʻonohonoho ʻia i hoʻokahi), e pau ke kaulahao o nā hanana i hoʻomaka ʻia e kēia ping mea kūʻai hoʻokahi a hele ka simulation i ke ʻano standby. Ke hana ʻia kēia, ʻo nā hanana i hoʻonohonoho ʻia i koe nā hanana hooki no ke kikowaena a me ka mea kūʻai aku. Ke hoʻokō ʻia kēia mau hanana, ʻaʻohe hanana i koe no ka hana hou ʻana a Simulator::Holo e hoʻihoʻi i ka mana. Ua pau ka simulation.

ʻO ka hoʻomaʻemaʻe ma hope o ʻoe iho. Hana ʻia kēia ma ke kāhea ʻana i ka hana honua Simulator::E luku. No ka mea, ua kapa ʻia nā hana kōkua (a i ʻole ka haʻahaʻa haʻahaʻa ns-3 code), i hoʻonohonoho ʻia i hoʻokomo ʻia nā makau i loko o ka simulator e luku i nā mea āpau i hana ʻia. ʻAʻole pono ʻoe e hahai i kekahi o kēia mau mea iā ʻoe iho - ʻo ke kelepona wale nō kāu e hana ai Simulator::E luku a hele i waho. Na ka ʻōnaehana ns-3 e hana i kēia hana paʻakikī iā ʻoe. ʻO nā laina i koe o kā mākou palapala ns-3 mua, first.cc, e hana pēlā:

Simulator::Destroy ();
return 0;
}

I ka manawa hea e pau ai ka simulator?

ʻO ns-3 kahi mea hoʻoheheʻe ʻokoʻa (DE). I loko o ia simulator, pili kēlā me kēia hanana me kona manawa hoʻokō, a ke hoʻomau nei ka simulation ma ka hana ʻana i nā hanana i ke ʻano o ka hana ʻana i ka holomua ʻana o ka simulation. Hiki i nā hanana ke hoʻonohonoho i nā hanana e hiki mai ana (no ka laʻana, hiki i kahi manawa ke hoʻonohonoho hou iā ia iho e hoʻopau i ka helu ʻana i ka wā e hiki mai ana).

Hoʻomaka pinepine ʻia nā hanana mua e ka hui, no ka laʻana, e hoʻonohonoho ʻo IPv6 i ka loaʻa ʻana o nā lawelawe ma ka pūnaewele, nā noi hoalauna, etc. Hoʻonohonoho ka palapala noi i ka hanana hoʻouna packet mua, a pēlā aku. Ke hana ʻia kahi hanana, hiki iā ia ke hoʻohua i nā hanana ʻole, hoʻokahi, a ʻoi aku paha. Ke holomua nei ka simulation, hiki mai nā hanana, i ka pau ʻana a i ʻole ka hana ʻana i nā mea hou. E ho'ōki 'akomi ka simulation inā nele ka pila hanana a 'ike 'ia kekahi hanana kūikawā hooki. Hanana hooki hana ʻia e ka hana Simulator::Kuhi (hoʻomaha manawa).

Aia kekahi hihia maʻamau kahi Simulator ::Stop pono loa e hooki i ka simulation: i ka wā e loaʻa ai nā hanana mālama ponoʻī. ʻO nā hanana mālama ponoʻī (a i ʻole ka hana hou ʻana) he mau hanana i hoʻonohonoho hou ʻia. ʻO ka hopena, mālama lākou i ka pila hanana ʻaʻole nele. Nui nā protocols a me nā modules i loaʻa nā hanana hou, no ka laʻana:

• FlowMonitor - nānā manawa no nā ʻeke nalowale;

• RIPng – hoʻolaha manawaleʻa o nā hōʻano hou o ka papa kuhikuhi;

• etc.

Ma ia mau hihia Simulator::Kuhi pono e hooki pono i ka simulation. Eia hou, i ka ns-3 i loko o ke ʻano emulation, hoʻohana ʻia ka RealtimeSimulator e hoʻonohonoho i ka uaki simulation me ka uaki mīkini, a Simulator::Kuhi pono e hooki i ka hana.

ʻAʻole kāhea ka nui o nā papahana simulation i ka puke haʻawina Simulator::Kuhi me ka maopopo loa, no ka mea, hoʻopau koke lākou i ka pau ʻana o nā hanana queued. Eia naʻe, e ʻae pū kēia mau polokalamu i ka Simulator:: Stop call. No ka laʻana, ʻo ka ʻōlelo hou aʻe ma ka papahana laʻana mua e hoʻonohonoho i kahi hoʻomaha ma 11 kekona:

+ Simulator::Stop (Seconds (11.0));
  Simulator::Run ();
  Simulator::Destroy ();
  return 0;
}

ʻAʻole e hoʻololi maoli ka mea i luna i ke ʻano o kēia papahana, no ka mea e pau maoli kēia simulation ma hope o 10 kekona. Akā inā ʻoe e hoʻololi i ka manawa hoʻomaha ma ka ʻōlelo i luna mai 11 kekona a i ka 1 kekona, e ʻike ʻoe ua kū ka simulation ma mua o ka paʻi ʻana o kekahi puka i ka pale (no ka mea e puka ana ka hopena ma hope o 2 kekona o ka manawa simulation).

He mea nui e kāhea iā Simulator :: E hooki ma mua o ke kāhea ʻana iā Simulator :: Holo; inā ʻaʻole ʻo Simulator:: ʻAʻole paha e hoʻihoʻi ʻo Run i ka mana i ka papahana nui e hoʻokō i ka pau ʻana!

4.2.9 Ke kūkulu ʻana i kāu palapala

Ua hana mākou i kāu mau palapala maʻalahi. ʻO nā mea a pau āu e hana ai, ʻo ia ke kau ʻana i kāu palapala i loko o ka papa kuhikuhi scratch a e kūkulu ʻia ia inā holo ʻoe Waf. E hoao kakou. E hoʻi i ka papa kuhikuhi papa kiʻekiʻe a kope examples/tutorial/first.cc i ka papa helu scratch

$ cd ../.. 
$ cp examples/tutorial/first.cc scratch/myfirst.cc

I kēia manawa kūkulu i kāu palapala hōʻailona mua me ka hoʻohana ʻana aloha:

$ ./waf

Pono ʻoe e ʻike i nā memo e hōʻike ana ua hana maikaʻi ʻia kāu kumu hoʻohālike mua.

Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
[614/708] cxx: scratch/myfirst.cc -> build/debug/scratch/myfirst_3.o
[706/708] cxx_link: build/debug/scratch/myfirst_3.o -> build/debug/scratch/myfirst
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (2.357s)

I kēia manawa hiki iā ʻoe ke holo i ka laʻana (e hoʻomaopopo ʻoe inā kūkulu ʻoe i kāu polokalamu i ka papa kuhikuhi scratch, a laila pono ʻoe e holo mai ia scratch):

$ ./waf --run scratch/myfirst

Pono ʻoe e ʻike i ka hopena like:

Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.418s) Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
Received 1024 bytes from 10.1.1.2

Maanei hiki iā ʻoe ke ʻike i ka ʻōnaehana kūkulu e hōʻoia i ka kūkulu ʻia ʻana o ka faila a laila holo ia. ʻIke ʻoe i ke komo ʻana i ka mea hoʻohana echo e hōʻike ana ua hoʻouna ʻo ia i hoʻokahi ʻeke 1024-byte i ka server echo 10.1.1.2. ʻIke pū ʻoe i ka ʻāpana logging ma ka kikowaena echo e ʻōlelo ai ua loaʻa iā ia he 1024 bytes mai 10.1.1.1. Hoʻopuka hou ka server echo i ka ʻeke a hiki iā ʻoe ke ʻike ma ka log o ka mea kūʻai echo ua loaʻa iā ia kāna ʻeke mai ke kikowaena.

4.3 ns-3 Kumu kumu

I kēia manawa ua hoʻohana ʻoe i kekahi o nā mea kōkua ns-3, hiki iā ʻoe ke nānā i kekahi o nā code kumu e hoʻokō nei i kēia hana. Hiki ke ʻike ʻia ka code hou loa ma kā mākou kikowaena pūnaewele ma ka loulou aʻe: https://gitlab.com/nsnam/ns-3-dev.git. Ma laila ʻoe e ʻike ai i ka ʻaoʻao hōʻuluʻulu Mercurial no kā mākou kumu lāʻau hoʻomohala ns-3. Ma luna o ka ʻaoʻao e ʻike ʻoe i kekahi mau loulou,

summary | shortlog | changelog | graph | tags | files

E hele a koho i ka loulou faila. ʻO kēia ke ʻano o ka pae kiʻekiʻe o ka hapa nui o kā mākou waihona:

drwxr-xr-x                               [up]
drwxr-xr-x                               bindings python  files
drwxr-xr-x                               doc              files
drwxr-xr-x                               examples         files
drwxr-xr-x                               ns3              files
drwxr-xr-x                               scratch          files
drwxr-xr-x                               src              files
drwxr-xr-x                               utils            files
-rw-r--r-- 2009-07-01 12:47 +0200 560    .hgignore        file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 1886   .hgtags          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 1276   AUTHORS          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 30961  CHANGES.html     file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 17987  LICENSE          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 3742   README           file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 16171  RELEASE_NOTES    file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 6      VERSION          file | revisions | annotate
-rwxr-xr-x 2009-07-01 12:47 +0200 88110  waf              file | revisions | annotate
-rwxr-xr-x 2009-07-01 12:47 +0200 28     waf.bat          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 35395  wscript          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 7673   wutils.py        file | revisions | annotate

Aia kā mākou mau palapala hōʻailona ma ka papa kuhikuhi nā hiʻohiʻona. Inā ʻoe e kaomi i nā laʻana e ʻike ʻoe i kahi papa inoa o nā subdirectories. ʻO kekahi o nā faila i ka subdirectory kumu aʻo - mua.cc. Inā ʻoe e kaomi ma luna mua.cc e ʻike ʻoe i ke code āu i aʻo ai.

Aia ke kumu kumu ma ka papa kuhikuhi src. Hiki iā ʻoe ke ʻike i ke kumu kumu ma ke kaomi ʻana i ka inoa papa kuhikuhi a i ʻole ke kaomi ʻana i nā loulou faila ma ka ʻākau o ka inoa papa kuhikuhi. Inā ʻoe e kaomi i ka papa kuhikuhi src, e loaʻa iā ʻoe kahi papa inoa o nā subdirectories src. Inā ʻoe e kaomi i ka subdirectory kumu, e ʻike ʻoe i kahi papa inoa o nā faila. ʻO ka faila mua āu e ʻike ai (i ka manawa e kākau ai i kēia alakaʻi). hoʻohāʻule.h. Inā ʻoe e kaomi i ka loulou hoʻohāʻule.h, e hoʻouna ʻia ʻoe i ka waihona kumu no hoʻohāʻule.h, loaʻa nā macros pono no ka haʻalele ʻana i nā palapala inā ʻike ʻia nā kūlana ʻino. Hiki ke loaʻa ke kumu kumu no nā mea kōkua a mākou i hoʻohana ai ma kēia mokuna ma ka papa kuhikuhi src/Nā noi/kōkua. E ʻoluʻolu e ʻimi a puni ka lāʻau kuhikuhi no ka ʻike ʻana i hea a hoʻomaopopo i ke ʻano o nā polokalamu ns-3.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka