ns-3 network simulator maphunziro. Mutu 5

ns-3 network simulator maphunziro. Mutu 5
Chithunzi cha 1,2
Chithunzi cha 3
Chithunzi cha 4

5 Zokonda
5.1 Kugwiritsa ntchito moduli yodula mitengo
5.1.1 Kudula mitengo
5.1.2 Yambitsani kudula mitengo
5.1.3 Kuyika mitengo ku code yanu
5.2 Kugwiritsa ntchito mfundo za mzere wolamula
5.2.1 Kuchotsa mayendedwe okhazikika
5.2.2 Kujambula malamulo anu
5.3 Kugwiritsa ntchito njira yotsatsira
5.3.1 ASCII Kutsata
Kusanthula kwa ASCII
5.3.2 Kutsata kwa PCAP

Mutu 5

kusintha

5.1 Kugwiritsa ntchito moduli yodula mitengo

Tayang'ana kale mwachidule gawo la ns-3 logging poyang'ana script choyamba.cc. M'mutu uno, tiwona momwe tingagwiritsire ntchito makina odula mitengo.

5.1.1 Kudula mitengo

Machitidwe akuluakulu ambiri amathandizira mtundu wina wa malo odula mauthenga, ndipo ns-3 ndi chimodzimodzi. Nthawi zina, mauthenga olakwika okha amalembedwa ku "operator console" (yomwe nthawi zambiri imakhala stderr pa machitidwe a Unix). Pa machitidwe ena, mauthenga ochenjeza amatha kuwonetsedwa komanso zambiri zatsatanetsatane. Nthawi zina, zida zodula mitengo zimagwiritsidwa ntchito potulutsa mauthenga ochotsa zolakwika omwe amatha kusokoneza mwachangu zomwe zatuluka.

Ma subHRD omwe amagwiritsidwa ntchito mu ns-3 amalingalira kuti magawo onsewa azidziwitso ndi othandiza, ndipo timapereka njira yosankhira, yosanja pakudula mauthenga. Kudula mitengo kumatha kuzimitsidwa kwathunthu, kuthandizidwa pagawo lililonse, kapena padziko lonse lapansi. Pachifukwa ichi, milingo yosinthika yazidziwitso imagwiritsidwa ntchito. Gawo la ns-3 logging limakupatsirani njira yosavuta yopezera chidziwitso chothandiza kuchokera muzoyerekeza zanu.

Muyenera kumvetsetsa kuti timapereka njira yanthawi zonse - kutsatira - pochotsa deta kuchokera kumitundu yanu, yomwe ikuyenera kukhala njira yabwino yopangira zofananira (kuti mumve zambiri zamakina athu otsatirira, onani gawo la phunziro 5.3). Kudula mitengo kuyenera kukhala njira yabwino yopezera zidziwitso, machenjezo, mauthenga olakwika, kapena kutulutsa mwachangu mauthenga kuchokera muzolemba kapena mitundu yanu nthawi iliyonse.

Pakadali pano, dongosololi limatanthawuza magawo asanu ndi awiri (mitundu) ya mauthenga a chipika pakuchulukirachulukira kwa zomwe zili.

  • LOG_ERROR - mauthenga olakwika odula mitengo (macro ogwirizana: NS_LOG_ERROR);
  • LOG_WARN - Mauthenga a chenjezo pa chipika (zambiri zofananira: NS_LOG_WARN);
  • LOG_DEBUG - Lowetsani mauthenga osowa apadera (macro ogwirizana: NS_LOG_DEBUG);
  • LOG_INFO - kulembetsa mauthenga azidziwitso za momwe pulogalamuyo ikuyendera (zokhudzana ndi zazikulu: NS_LOG_INFO);
  • LOG_FUNCTION - Mauthenga a malowedwe ofotokoza ntchito iliyonse yomwe imatchedwa (ma macros awiri ogwirizana: NS_LOG_FUNCTION, amagwiritsidwa ntchito ngati membala, ndi NS_LOG_FUNCTION_NOARGS, yogwiritsidwa ntchito ngati static);
  • LOG_LOGIC - mauthenga olowetsa mitengo ofotokoza mayendedwe omveka mkati mwa ntchito (macro ogwirizana: NS_LOG_LOGIC);
  • LOG_ALL - Lembani zonse zomwe zatchulidwa pamwambapa (palibe macro ogwirizana).
    Pamtundu uliwonse (LOG_TYPE) palinso LOG_LEVEL_TYPE yomwe, ikagwiritsidwa ntchito, imalola kuti magawo onse pamwamba pake alowedwe kuwonjezera pamlingo wake. (Chotsatira, LOG_ERROR ndi LOG_LEVEL_ERROR, ndi LOG_ALL ndi LOG_LEVEL_ALL ndizofanana.) Mwachitsanzo, kutsegula LOG_INFO kudzalola mauthenga operekedwa ndi NS_LOG_INFO macro okha, pamene kuyatsa LOG_LEVEL_INFO kudzaphatikizanso mauthenga operekedwa ndi LOG_LOGERN_BURNS_BURNS_BUN .

Timaperekanso macro odula mitengo opanda malire omwe amawonetsedwa nthawi zonse, mosasamala kanthu za kuchuluka kwa mitengo kapena gawo losankhidwa.

  • NS_LOG_UNCOND - Kudula mopanda malire kwa uthenga wogwirizana nawo (palibe mulingo wodula mitengo wogwirizana nawo).

Mulingo uliwonse utha kufunsidwa payekhapayekha kapena mophatikiza. Kudula mitengo kumatha kukhazikitsidwa pogwiritsa ntchito sh chilengedwe variable NS_LOG kapena kulowetsa foni yogwira ntchito. Monga tawonetsera kale, makina odula mitengo ali ndi zolemba za Doxygen ndipo tsopano ndi nthawi yabwino kuti muwunikenso ngati simunatero.

Tsopano popeza mwawerenga zolembedwa mwatsatanetsatane, tiyeni tigwiritse ntchito chidziwitsocho kuti tipeze chidziwitso chosangalatsa kuchokera pachitsanzo script. scratch/myfirst.cczomwe mwapanga kale.

5.1.2 Yambitsani kudula mitengo

Tiyeni tigwiritse ntchito kusintha kwa chilengedwe cha NS_LOG kuti tigwiritse ntchito zipika zina, koma choyamba, kuti mutenge ma bere, yendetsani zolemba zomaliza monga momwe munachitira poyamba,

$ ./waf --run scratch/myfirst

Muyenera kuwona zotuluka zodziwika kuchokera ku pulogalamu yoyamba ya ns-3

$ 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.413s)
Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
Received 1024 bytes from 10.1.1.2

Zikuoneka kuti mauthenga "otumizidwa" ndi "kulandira" omwe mukuwona pamwambawo ndi mauthenga olowetsedwa kuchokera. UdpEchoClientApplication ΠΈ UdpEchoServerApplication. Mwachitsanzo, titha kufunsa pulogalamu yamakasitomala kuti isindikize zambiri pokhazikitsa mulingo wake wodula mitengo kudzera mukusintha kwachilengedwe kwa NS_LOG.

Kuyambira pano, ndikuganiza kuti mukugwiritsa ntchito chipolopolo cha sh chomwe chimagwiritsa ntchito mawu akuti "VARIABLE=value". Ngati mukugwiritsa ntchito chipolopolo ngati csh, ndiye kuti muyenera kusintha zitsanzo zanga kukhala "setenv variable value" yofunikira ndi zipolopolozo.

Pakadali pano, pulogalamu ya UDP echo kasitomala imayankha pamzere wotsatirawu scratch/myfirst.cc,

LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);

Imayatsa mulingo wodula mitengo LOG_LEVEL_INFO. Tikadutsa mbendera yodula mitengo, timalola kuti mulingowo ndi magawo onse otsika. Pamenepa, tayatsa NS_LOG_INFO, NS_LOG_DEBUG, NS_LOG_WARN ndi NS_LOG_ERROR. Titha kukulitsa mulingo wodula mitengo ndikupeza zambiri, popanda kusintha kwa zolemba ndi kubwezeretsanso, pokhazikitsa kusintha kwa chilengedwe cha NS_LOG motere:

$ export NS_LOG=UdpEchoClientApplication=level_all

Chifukwa chake timayika sh chipolopolo chosinthika NS_LOG pamtengo wotsatira,

UdpEchoClientApplication=level_all

Mbali yakumanzere ya gawolo ndi dzina la gawo lomwe tikufuna kukonza, ndipo kumanja ndi mbendera yomwe tikufuna kuigwiritsa ntchito. Munkhaniyi, tithandizira magawo onse a debugging mu pulogalamuyi. Ngati muyendetsa script ndi NS_LOG motere, ns-3 yodula mitengo ivomereza zosinthazo ndipo muyenera kuwona zotsatirazi:

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.404s)
UdpEchoClientApplication:UdpEchoClient()
UdpEchoClientApplication:SetDataSize(1024)
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientApplication:Send()
Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
UdpEchoClientApplication:HandleRead(0x6241e0, 0x624a20)
Received 1024 bytes from 10.1.1.2
UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()

Zambiri zochotsa zolakwika zomwe zaperekedwa ndi pulogalamuyi zili pamlingo wa NS_LOG_FUNCTION. Imawonetsa zochitika zonse za kuyimba kwa ntchito panthawi ya script. Monga lamulo, pamagwiritsidwe ntchito ndibwino kugwiritsa ntchito (osachepera)NS_LOG_FUNCTION (this)... Gwiritsani ntchito NS_LOG_FUNCTION_NOARGS ()
mu static function. Komabe, dziwani kuti dongosolo la ns-3 silifunikira kuti lithandizire ntchito iliyonse yodula mitengo. Chigamulo chokhudza kuchuluka kwa zomwe zalembedwa chimasiyidwa kwa wopanga machitsanzo payekha. Pankhani ya echo applications, kuchuluka kwa mitengo yodula kumapezeka.

Tsopano mutha kuwona chipika cha mafoni omwe adapangidwa ndi pulogalamuyi. Mukayang'anitsitsa, mudzawona coloni pakati pa mzerewu UdpEchoClientApplication ndi dzina la njira, komwe mungayembekezere kuwona C ++ scope operator (: :). Izi ndi dala.

Ili kwenikweni si dzina la kalasi, koma dzina la gawo lodula mitengo. Pakakhala machesi pakati pa fayilo yoyambira ndi kalasi, nthawi zambiri ndi dzina la kalasi, koma muyenera kuzindikira kuti si dzina la kalasi, ndipo pali colon imodzi m'malo mwa koloni iwiri. Iyi ndi njira yokuthandizani kuti mulekanitse dzina la nyemba zodula mitengo kuchokera ku dzina la kalasi mwanjira yobisika.

Komabe, nthawi zina zimakhala zovuta kudziwa kuti ndi njira iti yomwe ikupanga uthenga wa chipika. Mukayang'ana zomwe zili pamwambapa, mungakhale mukuganiza kuti mzerewu "Received 1024 bytes from 10.1.1.2" Mukhoza kuthetsa vutoli mwa kukhazikitsa mlingo prefix_func ku NS_LOG kusintha kwa chilengedwe. Yesani izi:

$ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func'

Zindikirani kuti zolembera ndizofunika chifukwa cholumikizira choyimirira chomwe timagwiritsa ntchito kuyimira OR ntchito ndi cholumikizira chitoliro cha Unix. Tsopano ngati mutayendetsa script, mudzawona kuti ndondomeko yodula mitengo imatsimikizira kuti uthenga uliwonse mu chipika choperekedwa umayikidwa ndi dzina lachigawo.

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.417s)
UdpEchoClientApplication:UdpEchoClient()
UdpEchoClientApplication:SetDataSize(1024)
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientApplication:Send()
UdpEchoClientApplication:Send(): Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
UdpEchoClientApplication:HandleRead(0x6241e0, 0x624a20)
UdpEchoClientApplication:HandleRead(): Received 1024 bytes from 10.1.1.2
UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()

Tsopano mutha kuwona kuti mauthenga onse akuchokera ku UDP echo kasitomala application amadziwika kuti ndi otero. Uthenga "Received 1024 bytes from 10.1.1.2" tsopano ikudziwika bwino kuti ikuchokera ku echo kasitomala application. Uthenga wotsalawo uyenera kubwera kuchokera ku UDP echo server application. Titha kuloleza gawoli polemba mndandanda wazinthu zosiyanitsidwa ndi colon mu NS_LOG zosinthika zachilengedwe.

$ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func:
               UdpEchoServerApplication=level_all|prefix_func'

Chenjezo: Pachitsanzo chomwe chili pamwambapa, muyenera kuchotsa zilembo zatsopano pambuyo pa colon (:), zomwe zimagwiritsidwa ntchito popanga chikalatacho. Tsopano ngati mutayendetsa script, muwona mauthenga onse a chipika kuchokera kwa kasitomala ndi seva echo ntchito. Mutha kuwona kuti izi zitha kukhala zothandiza kwambiri pakukonza zolakwika.

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.406s)
UdpEchoServerApplication:UdpEchoServer()
UdpEchoClientApplication:UdpEchoClient()
UdpEchoClientApplication:SetDataSize(1024)
UdpEchoServerApplication:StartApplication()
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientApplication:Send()
UdpEchoClientApplication:Send(): Sent 1024 bytes to 10.1.1.2
UdpEchoServerApplication:HandleRead(): Received 1024 bytes from 10.1.1.1
UdpEchoServerApplication:HandleRead(): Echoing packet
UdpEchoClientApplication:HandleRead(0x624920, 0x625160)
UdpEchoClientApplication:HandleRead(): Received 1024 bytes from 10.1.1.2
UdpEchoServerApplication:StopApplication()
UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoServerApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()
UdpEchoServerApplication:~UdpEchoServer()

Zimakhalanso zothandiza nthawi zina kuti muwone nthawi yoyerekeza yomwe uthenga wa chipika unapangidwira. Mutha kuchita izi powonjezera OR pang'ono prefix_time:

$ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func|prefix_time: UdpEchoServerApplication=level_all|prefix_func|prefix_time'

Apanso, muyenera kuchotsa zilembo zatsopano zomwe zili pamwambapa. Ngati mukuyendetsa script tsopano muyenera kuwona zotsatirazi:

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)
0s UdpEchoServerApplication:UdpEchoServer()
0s UdpEchoClientApplication:UdpEchoClient()
0s UdpEchoClientApplication:SetDataSize(1024)
1s UdpEchoServerApplication:StartApplication()
2s UdpEchoClientApplication:StartApplication()
2s UdpEchoClientApplication:ScheduleTransmit()
2s UdpEchoClientApplication:Send()
2s UdpEchoClientApplication:Send(): Sent 1024 bytes to 10.1.1.2
2.00369s UdpEchoServerApplication:HandleRead(): Received 1024 bytes from 10.1.1.1
2.00369s UdpEchoServerApplication:HandleRead(): Echoing packet
2.00737s UdpEchoClientApplication:HandleRead(0x624290, 0x624ad0)
2.00737s UdpEchoClientApplication:HandleRead(): Received 1024 bytes from 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
10s UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoServerApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()
UdpEchoServerApplication:~UdpEchoServer()

Chonde dziwani kuti wopanga wa UdpEchoServer idatchedwa panthawi yoyerekeza 0 masekondi. Izi zimachitikadi kuyerekezera kusanayambe, koma nthawi ikuwonetsedwa ngati masekondi a zero. N'chimodzimodzinso ndi uthenga womanga UdpEchoClient.

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)
0s UdpEchoServerApplication:UdpEchoServer()
0s UdpEchoClientApplication:UdpEchoClient()
0s UdpEchoClientApplication:SetDataSize(1024)
1s UdpEchoServerApplication:StartApplication()
2s UdpEchoClientApplication:StartApplication()
2s UdpEchoClientApplication:ScheduleTransmit()
2s UdpEchoClientApplication:Send()
2s UdpEchoClientApplication:Send(): Sent 1024 bytes to 10.1.1.2
2.00369s UdpEchoServerApplication:HandleRead(): Received 1024 bytes from 10.1.1.1
2.00369s UdpEchoServerApplication:HandleRead(): Echoing packet
2.00737s UdpEchoClientApplication:HandleRead(0x624290, 0x624ad0)
2.00737s UdpEchoClientApplication:HandleRead(): Received 1024 bytes from 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
10s UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoServerApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()
UdpEchoServerApplication:~UdpEchoServer()

Kumbukirani kuti script scratch/first.cc adayambitsa ntchito ya seva ya echo sekondi imodzi isanayambe kuyerekezera. Tsopano inu mukhoza kuwona kuti njira StartApplication seva kwenikweni imatchedwa mu sekondi yoyamba. Mutha kuzindikiranso kuti kasitomala wa echo akuyamba mu sekondi yachiwiri ya kuyerekezera, monga tidafunsa mu script.

Tsopano mutha kutsata zomwe zikuchitika pakuyimba foni ScheduleTransmit mu kasitomala yemwe amayimba foni ya HandleRead Tumizani pulogalamu ya seva ya echo. Dziwani kuti nthawi inadutsa yotumiza paketi pa ulalo wa nsonga ndi nsonga ndi 3,69 milliseconds. Mutha kuwona kuti seva ya echo imalemba uthenga womwe wayankha paketi, ndiyeno, mutachedwetsa njira, mukuwona kuti kasitomala wa echo alandila paketi ya echo munjira yake ya HandleRead.

Pakuyerekeza uku, zambiri zimachitika osazindikira. Koma mutha kutsata njira yonseyo mosavuta pothandizira magawo onse odula mitengo mudongosolo. Yesani kuyika kusintha kwa NS_LOG pamtengo wotsatirawu,

$ export 'NS_LOG=*=level_all|prefix_func|prefix_time'

Nyenyezi yomwe ili pamwambayi ndi mawonekedwe a wildcard pagawo lodula mitengo. Izi zikuphatikizapo zolemba zonse mu zigawo zonse zomwe zimagwiritsidwa ntchito poyerekezera. Sindidzatulutsanso zotuluka pano (panthawi yolemba zimatulutsa mizere 1265 pa paketi imodzi ya echo), koma mutha kulozeranso chidziwitsochi ku fayilo ndikuchiwona mkonzi womwe mumakonda.

$ ./waf --run scratch/myfirst > log.out 2>&1

Ineyo pandekha ndimagwiritsa ntchito mtundu uwu wodula mitengo mwachimvekere ndikakhala ndi vuto ndipo sindikudziwa komwe zinthu zidalakwika. Nditha kutsata ma codec mosavuta popanda kukhazikitsa ma breakpoints ndikudutsa pa code mu debugger. Nditha kungosintha zomwe ndimakonda ndikuyang'ana zomwe ndikuyembekezera ndikuwona zomwe sindimayembekezera. Ndikangodziwa zomwe zikuchitika, ndimalumphira mu debugger kuti ndilowetse vutolo. Zotulutsa zamtundu uwu zitha kukhala zothandiza makamaka ngati script yanu ikuchita zosayembekezereka. Mukangogwiritsa ntchito debugger, mutha kuphonya kupotoza kwathunthu. Kulembetsa kumapangitsa kutembenuka kotere kuonekera.

5.1.3 Kuyika mitengo ku code yanu

Mutha kuwonjezera zolemba zatsopano pazoyeserera zanu poyimba mafoni kugawo la chipika kuchokera ku ma macro angapo. Tiyeni tichite izo mu script myfirst.cc, zomwe tili nazo m'ndandanda "zoyera". Kumbukirani kuti tidatanthauzira gawo lodula mitengo muzochitika izi:

NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

Mukudziwa kuti mutha kuloleza kulowa kwa mauthenga onse kuchokera pagawoli pokhazikitsa kusintha kwa NS_LOG kwamitundu yosiyanasiyana. Tiyeni tipite patsogolo ndikuwonjezera zolemba zina. Macro omwe amagwiritsidwa ntchito powonjezera mauthenga pa chipikacho ndi NS_LOG_INFO. Tiyeni tiwonjezere uthenga (tisanayambe kupanga ma node) omwe amakuuzani kuti script ili mu gawo la "Kupanga Topology". Izi zimachitika mu code snippet iyi,
Tsegulani scratch/myfirst.cc mu mkonzi wanu womwe mumakonda ndikuwonjezera mzere,
NS_LOG_INFO ("Creating Topology");
patsogolo pa mizere,

NodeContainer nodes;
nodes.Create (2);

Tsopano phatikizani script pogwiritsa ntchito waf, ndi kuchotsa NS_LOG kusinthika kuti mulepheretse mtsinje wodula mitengo womwe tidayatsa kale:

$ ./waf
$ export NS_LOG=
Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли Π²Ρ‹ запуститС скрипт,
$ ./waf --run scratch/myfirst

Simudzawona uthenga watsopano chifukwa cholowera (FirstScriptExample) sichinayatsidwe. Kuti muwone uthenga wanu muyenera kuyatsa gawo lodula mitengo FirstScriptExample ndi mulingo wosatsika kuposa NS_LOG_INFO. Ngati mukungofuna kuwona mulingo wodula mitengoyi, mutha kuyiyambitsa motere,

$ export NS_LOG=FirstScriptExample=info

Ngati mutayendetsa script tsopano, muwona uthenga watsopano "Kupanga Topology",

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.404s)
Creating Topology
Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
Received 1024 bytes from 10.1.1.2

5.2 Kugwiritsa ntchito mfundo za mzere wolamula

5.2.1 Kuchotsa mayendedwe okhazikika

Njira ina yosinthira machitidwe a zolemba za ns-3 popanda kusintha kapena kumanga ndikugwiritsa ntchito mfundo za mzere wamalamulo. Timapereka njira yowunikira mikangano yamalamulo ndikukhazikitsa zosintha zapadziko lonse lapansi malinga ndi zotsatira.

Njira yoyamba yogwiritsira ntchito ndondomeko yotsutsana ndi mzere wa lamulo ndikulengeza mzere wotsatira. Izi ndizosavuta kuchita (mu pulogalamu yanu yayikulu), monga momwe zilili m'munsimu,

int
main (int argc, char *argv[])
{
...
CommandLine cmd;
cmd.Parse (argc, argv);
...
}

Chidutswa chosavuta chamizere iwirichi ndichothandiza kwambiri pachokha. Imatsegula chitseko cha ns-3 global variable and character system. Tiyeni tiwonjezere mizere iwiri ya code kumayambiriro kwa ntchito yaikulu ya script scratch/myfirst.cc. Kupitilira, timapanga zolemba ndikuziyendetsa, tikamathamanga timapempha thandizo motere,

$ ./waf --run "scratch/myfirst --PrintHelp"

Lamulo ili lidzafunsa Waf yambitsani script kukanda/kwanga koyamba ndipo perekani mkangano wa mzere wolamula β€”PrintHelp. Zolembazo zimafunikira kuti ziwonetse pulogalamu yomwe mkanganowo wapangidwira. Wosankha mzere wolamula awona mkangano β€”PrintHelp ndipo akuwonetsa yankho,

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.413s)
TcpL4Protocol:TcpStateMachine()
CommandLine:HandleArgument(): Handle arg name=PrintHelp value=
--PrintHelp: Print this help message.
--PrintGroups: Print the list of groups.
--PrintTypeIds: Print all TypeIds.
--PrintGroup=[group]: Print all TypeIds of group.
--PrintAttributes=[typeid]: Print all attributes of typeid.
--PrintGlobals: Print the list of globals.

Tsopano tiyeni tione njira β€”PrintAttributes. Tanena kale za ns-3 mawonekedwe powerenga script ya first.cc. Tawona mizere yotsatira ya ma code,

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

ndipo iwo ananena izo DataRate kwenikweni ndi chikhumbo PointToPointNetDevice. Tiyeni tigwiritse ntchito mzere wotsutsa parser kuti tiwone zomwe zili PointToPointNetDevice. Mndandanda wothandizira umanena zomwe tiyenera kupereka TypeId. Ili ndi dzina la kalasi yomwe ili ndi zikhumbo za chidwi. Kwa ife zidzakhala ns3::PointToPointNetDevice. Tiyeni tipite patsogolo, lowani,

$ ./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointNetDevice"

Dongosololi lisindikiza mawonekedwe onse amtundu wa chipangizo cha netiweki ichi. Mudzaona kuti zina mwa zomwe zili mumndandandawu ndi,

--ns3::PointToPointNetDevice::DataRate=[32768bps]:
The default data rate for point to point links

Uwu ndiye mtengo wokhazikika womwe udzagwiritsidwe ntchito ndi dongosolo popanga chinthucho PointToPointNetDevice. Tidzachotsa mtengo wokhazikikawu pogwiritsa ntchito parameter Umunthu Π² PointToPointHelper apamwamba. Tiyeni tigwiritse ntchito zokhazikika pazida za point-to-point ndi matchanelo. Kuti tichite izi, tidzachotsa mafoni SetDeviceAttribute ΠΈ SetChannelAttribute kuchokera myfirst.cc, zomwe tili nazo mu bukhu loyera.

Script yanu iyenera tsopano kulengeza PointToPointHelper ndipo osachita zoikamo zilizonse monga momwe tawonetsera pachitsanzo chomwe chili pansipa,

...
NodeContainer nodes;
nodes.Create (2);
PointToPointHelper pointToPoint;
NetDeviceContainer devices;
devices = pointToPoint.Install (nodes);
...

Pitani patsogolo ndikupanga script yatsopano ndi Waf (./waf) ndipo tiyeni tibwerere ndikuphatikiza zolowa kuchokera pa seva ya UDP echo ndikuphatikiza chilembo cha nthawi.

$ export 'NS_LOG=UdpEchoServerApplication=level_all|prefix_time'

Ngati mutayendetsa script muyenera kuwona zotsatirazi:

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.405s)
0s UdpEchoServerApplication:UdpEchoServer()
1s UdpEchoServerApplication:StartApplication()
Sent 1024 bytes to 10.1.1.2
2.25732s Received 1024 bytes from 10.1.1.1
2.25732s Echoing packet
Received 1024 bytes from 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
UdpEchoServerApplication:DoDispose()
UdpEchoServerApplication:~UdpEchoServer()

Kumbukirani kuti nthawi yomaliza yomwe tidayang'ana nthawi yofananira, pomwe paketi idalandiridwa ndi seva ya echo, inali masekondi a 2,00369.

2.00369s UdpEchoServerApplication:HandleRead(): Received 1024 bytes from 10.1.1.1

Tsopano amalandira paketi mu masekondi 2.25732. Izi ndichifukwa choti timangosinthanso kuchuluka kwa data ya PointToPointNetDevice kuchokera ku ma megabits asanu pa sekondi imodzi kupita pamtengo wokhazikika, womwe ndi 32768 bits pamphindikati. Ngati tikanati tilowe m'malo mwa DataRate yatsopano pogwiritsa ntchito mzere wolamula, tikhoza kufulumizitsa kuyerekezera kwathu kachiwiri. Tidzachita izi motere, molingana ndi chilinganizo chomwe chimatanthauzidwa ndi chinthu chothandizira:

$ ./waf --run "scratch/myfirst --ns3::PointToPointNetDevice::DataRate=5Mbps"

Izi zidzabwezeretsanso chidziwitso cha DataRate ku mtengo wake wosasinthika wa ma megabits asanu pamphindikati. Kodi mukudabwa ndi zotsatira zake? Zikuoneka kuti kuti tibwezeretse khalidwe loyambirira la script, tifunikanso kukhazikitsa kuchedwa kwa njira kuti tigwirizane ndi liwiro la kuwala. Titha kufunsa dongosolo la mzere wolamula kuti lisindikize mawonekedwe a tchanelo, monga momwe tidachitira pa chipangizo cha netiweki:

$ ./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointChannel"

Tiwona kuti kuchedwa kwa tchanelo kumayikidwa motere:

--ns3::PointToPointChannel::Delay=[0ns]:
Transmission delay through the channel

Titha, kudzera mu dongosolo la mzere wolamula, kuyika zonse ziwiri zokhazikika.

$ ./waf --run "scratch/myfirst
--ns3::PointToPointNetDevice::DataRate=5Mbps
--ns3::PointToPointChannel::Delay=2ms"

Pankhaniyi timabwezeretsa nthawi yomwe tinali nayo pamene tidayika momveka bwino DataRate ndi Kuchedwa mu script:

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.417s)
0s UdpEchoServerApplication:UdpEchoServer()
1s UdpEchoServerApplication:StartApplication()
Sent 1024 bytes to 10.1.1.2
2.00369s Received 1024 bytes from 10.1.1.1
2.00369s Echoing packet
Received 1024 bytes from 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
UdpEchoServerApplication:DoDispose()
UdpEchoServerApplication:~UdpEchoServer()

Dziwani kuti paketiyo imalandiridwanso ndi seva pambuyo pa masekondi a 2,00369. Titha kuyika chilichonse mwamakhalidwe omwe amagwiritsidwa ntchito palemba motere. Makamaka, titha kuyika mawonekedwe a MaxPackets kuzinthu zomwe sizili m'modzi UdpEchoClient.

Kodi mungaigwiritse ntchito bwanji? Yesani. Kumbukirani kuti muyenera kuyika ndemanga pamalo omwe timaposa mtengo wokhazikika ndikuwuyika momveka bwino MaxPackets mu script. Ndiye muyenera kumanganso script. Mutha kugwiritsanso ntchito mzere wolamula kuti mupeze thandizo la syntax pakukhazikitsa mtengo watsopano wokhazikika. Mukamvetsetsa izi, mutha kuwongolera kuchuluka kwa phukusi lomwe likuwonetsedwa pamzere wolamula. Popeza ndife anthu okonda kuphunzira, mzere wathu wolamula uyenera kuwoneka motere:

$ ./waf --run "scratch/myfirst
--ns3::PointToPointNetDevice::DataRate=5Mbps
--ns3::PointToPointChannel::Delay=2ms
--ns3::UdpEchoClient::MaxPackets=2"

Funso lachilengedwe lomwe likubwera panthawiyi ndi momwe mungadziwire za kukhalapo kwa makhalidwe onsewa. Apanso, dongosolo la mzere wolamula lili ndi ntchito yothandizira pankhaniyi. Ngati tipempha thandizo la mzere wolamula, tiyenera kuwona:

$ ./waf --run "scratch/myfirst --PrintHelp"
myfirst [Program Arguments] [General Arguments]
General Arguments:
--PrintGlobals: Print the list of globals.
--PrintGroups: Print the list of groups.
--PrintGroup=[group]: Print all TypeIds of group.
--PrintTypeIds: Print all TypeIds.
--PrintAttributes=[typeid]: Print all attributes of typeid.
--PrintHelp: Print this help message.

Mukasankha mkangano wa "PrintGroups" muyenera kuwona mndandanda wamagulu onse olembetsedwa TypeId. Mayina amagulu amagwirizana ndi mayina a ma module omwe ali mu gwero lachikwatu (ngakhale ali ndi zilembo zazikulu). Kusindikiza zidziwitso zonse nthawi imodzi kungakhale kochulukira kwambiri, motero fyuluta yowonjezera ilipo kuti isindikize zambiri ndi gulu. Chifukwa chake, kuyang'ananso pa module-to-point:

./waf --run "scratch/myfirst --PrintGroup=PointToPoint"
TypeIds in group PointToPoint:
ns3::PointToPointChannel
ns3::PointToPointNetDevice
ns3::PointToPointRemoteChannel
ns3::PppHeader

Apa mutha kupeza mayina a TypeId omwe akupezeka pamawonekedwe, mwachitsanzo mu
--PrintAttributes = ns3 :: PointToPointChannelmonga momwe tawonetsera pamwambapa.

Njira ina yophunzirira za mawonekedwe ndi kudzera pa Do oxygen ns-3. Pali tsamba lomwe limatchula zonse zomwe zalembetsedwa mu simulator.

5.2.2 Kujambula malamulo anu

Mukhozanso kuwonjezera mbedza zanu kudzera mu dongosolo la mzere wa malamulo. Izi zimachitika mophweka pogwiritsa ntchito njira yopangira mzere wolamula AddValue.
Tiyeni tigwiritse ntchito gawoli kuti titchule kuchuluka kwa mapaketi omwe akuyenera kuwonetsedwa mosiyana kwambiri. Tiyeni tiwonjezeko kusintha komweko komwe kumatchedwa nPackets mu ntchito waukulu. Tiyiyika ku imodzi kuti igwirizane ndi zomwe tinali kuchita m'mbuyomu. Kuti tilole mzere wolamula kuti usinthe mtengowu, tifunika kujambula mtengowu pazambiri. Timachita izi powonjezera foni AddValue. Pitani ndikusintha script scratch/myfirst.cc kuti tiyambe ndi code iyi,

int
main (int argc, char *argv[])
{
uint32_t nPackets = 1;
CommandLine cmd;
cmd.AddValue("nPackets", "Number of packets to echo", nPackets);
cmd.Parse (argc, argv);
...

Pendekera pansi mpaka pomwe timayika mawonekedwe a MaxPackets ndikusintha kuti akhazikitsidwe ku nPackets variable m'malo mwa 1 yokhazikika, monga momwe tawonetsera pansipa.

echoClient.SetAttribute ("MaxPackets", UintegerValue (nPackets));

Tsopano ngati mutayendetsa script ndikupereka -PrintHelp mkangano, muyenera kuwona mtsutso watsopano wa ogwiritsa ntchito. zolembedwa pachiwonetsero chothandizira. Lowani,

$ ./waf --run "scratch/myfirst --PrintHelp"
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.403s)
--PrintHelp: Print this help message.
--PrintGroups: Print the list of groups.
--PrintTypeIds: Print all TypeIds.
--PrintGroup=[group]: Print all TypeIds of group.
--PrintAttributes=[typeid]: Print all attributes of typeid.
--PrintGlobals: Print the list of globals.
User Arguments:
--nPackets: Number of packets to echo

Ngati mukufuna kusintha kuchuluka kwa mapaketi omwe atumizidwa, mutha kutero pokhazikitsa mkangano wa mzere wa lamulo - -nPackets.

$ ./waf --run "scratch/myfirst --nPackets=2"

Tsopano muyenera kuwona

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.404s)
0s UdpEchoServerApplication:UdpEchoServer()
1s UdpEchoServerApplication:StartApplication()
Sent 1024 bytes to 10.1.1.2
2.25732s Received 1024 bytes from 10.1.1.1
2.25732s Echoing packet
Received 1024 bytes from 10.1.1.2
Sent 1024 bytes to 10.1.1.2
3.25732s Received 1024 bytes from 10.1.1.1
3.25732s Echoing packet
Received 1024 bytes from 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
UdpEchoServerApplication:DoDispose()
UdpEchoServerApplication:~UdpEchoServer()

Tsopano mwatumiza mapaketi awiri. Zosavuta, sichoncho?
Mutha kuwona kuti ngati wogwiritsa ntchito ns-3, mutha kugwiritsa ntchito njira yotsutsana ya mzere wolamula kuti muwononge zikhalidwe zapadziko lonse lapansi. Ngati ndinu wolemba wachitsanzo, mutha kuwonjezera mawonekedwe atsopano kuzinthu zanu ndipo zitha kupezeka kuti zisinthidwe ndi ogwiritsa ntchito anu kudzera pamzere wamalamulo. Ngati ndinu wolemba script, mutha kuwonjezera zosintha zatsopano pazolemba zanu ndikuzilumikiza mosasunthika munjira yanu yamalamulo.

5.3 Kugwiritsa ntchito njira yotsatsira

Mfundo yonse yachitsanzo ndikupanga zotuluka kuti mupitirize kuphunzira, ndipo ns-3 trace system ndiye njira yayikulu yochitira izi. Popeza ns-3 ndi pulogalamu ya C ++, njira zopangira zotulutsa kuchokera ku pulogalamu ya C++ zitha kugwiritsidwa ntchito:

#include <iostream>
...
int main ()
{
...
std::cout << "The value of x is " << x << std::endl;
...
}

Mutha kugwiritsanso ntchito gawo lodula mitengo kuti muwonjezere kamangidwe kakang'ono ku yankho lanu. Pali zovuta zambiri zomwe zimadziwika chifukwa cha njirayi, chifukwa chake tapereka njira yotsatirira zochitika zonse kuti athetse mavutowa.

Zolinga zazikulu za ns-3 tracing system ndi:

  • Pazochita zoyambira, dongosolo lolondolera liyenera kulola wogwiritsa ntchito kuti azitha kutsata zomwe zili zodziwika bwino ndikusankha zinthu zomwe zimapanga traceyo;

  • Ogwiritsa ntchito apakatikati akuyenera kukulitsa njira yolondolera kuti asinthe mawonekedwe omwe atulutsidwa kapena kuyika magwero atsopano, osasintha pachimake choyeserera;

  • Ogwiritsa ntchito apamwamba amatha kusintha core simulator kuti awonjezere mayendedwe atsopano ndi masinki. Dongosolo lotsatirira la ns-3 limamangidwa pamikhalidwe yodziyimira pawokha komanso olandila, komanso njira yolumikizana yolumikizira magwero kwa ogula.

Dongosolo lotsatirira la ns-3 limamangidwa pamikhalidwe yodziyimira pawokha potsata magwero ndi olandila, komanso njira yolumikizana yolumikizira magwero kwa olandila. Ma trace sources ndi zinthu zomwe zimatha kuwonetsa zochitika zomwe zikuchitika poyerekezera ndikupereka mwayi wopeza zomwe zimakonda. Mwachitsanzo, gwero la trace litha kuwonetsa pomwe chipangizo cha netiweki chidalandira paketi ndikupangitsa zomwe zili mu paketi kuti zipezeke kwa omwe ali ndi chidwi cholandira.

Kufufuza paokha kumakhala kopanda ntchito pokhapokha ngati "atalumikizidwa" ndi mbali zina za code zomwe zimachitadi chinthu chothandiza ndi chidziwitso choperekedwa ndi sinki. Tracers ndi ogula zochitika ndi deta yoperekedwa ndi trace sources. Mwachitsanzo, mutha kupanga zozama zomwe (zolumikizana ndi gwero lachitsanzo cham'mbuyomo) zitha kusindikiza magawo omwe ali ndi chidwi mu paketi yomwe mwalandira.

Cholinga cha kulekanitsa koonekeratu kumeneku ndikulola ogwiritsa ntchito kulumikiza masinki atsopano kuzinthu zomwe zilipo kale popanda kusintha ndikuphatikizanso pachimake cha simulator. Chifukwa chake muchitsanzo pamwambapa, wogwiritsa ntchito amatha kufotokozera tracker yatsopano muzolemba zawo ndikuyilumikiza ku gwero lomwe lilipo lomwe limatanthauzidwa pachimake choyerekeza pokhapokha posintha zolemba za ogwiritsa ntchito.

Mu phunziro ili, tidutsamo zina mwazomwe zafotokozedwa kale ndi zozama ndikuwonetsa momwe angakhazikitsire ndi kuyesayesa kochepa pa gawo la wogwiritsa ntchito. Onani magawo a ns-3 Manual kapena momwe mungachitire kuti mudziwe zambiri za kasinthidwe ka trace wapamwamba, kuphatikiza kukulitsa malo amtundu wa trace ndikupanga magwero atsopano.

5.3.1 ASCII Kutsata

ns-3 imapereka magwiridwe antchito omwe amapereka njira yotsatirira yotsika kuti ikuthandizireni mwatsatanetsatane mukakhazikitsa mapaketi osavuta. Ngati mutsegula izi, mudzawona zotuluka m'mafayilo a ASCII. Kwa iwo omwe amadziwa zotuluka za ns-2, mtundu wamtunduwu ndi wofanana ndi kunja.tr, yomwe imapangidwa ndi zolemba zambiri.

Tiyeni titsike kubizinesi ndikuwonjezera zotsatira za ASCII ku scratch/myfirst.cc script. Asanayambe kuyitana Simulator :: Run (), onjezani mizere yotsatirayi yamakhodi:
AsciiTraceHelper ascii;

pointToPoint.EnableAsciiAll (ascii.CreateFileStream ("myfirst.tr"));

Monga ziganizo zina zambiri za ns-3, code iyi imagwiritsa ntchito chinthu chothandizira kupanga zizindikiro za ASCII. Mzere wachiwiri uli ndi njira ziwiri zoyimbira zisa. "M'kati" njira CreateFileStream () amagwiritsa ntchito mawu ophiphiritsa osadziwika kuti apange chinthu choyendera mafayilo pamtengo (popanda dzina lachinthu) ndikuchipereka ku njira yomwe imatchedwa. Tilowa mozama mu izi mtsogolomu, koma zomwe muyenera kudziwa pakadali pano ndikuti mukupanga chinthu chomwe chikuyimira fayilo yotchedwa. myfirst.tr ndi kusamutsa ku ns-3. Timapereka ns-3 kuti zisamalire zomwe zidapangidwa kwa moyo wake wonse, pomwe zimathetsa mavuto omwe amabwera chifukwa chocheperako (mwadala) chodziwika bwino chokhudzana ndi C ++ stream object copy constructors.

Kuitana kwakunja EnableAsciiAll () amauza wothandizirayo kuti mukufuna kuphatikiza kutsatira kwa ASCII mu kayeseleledwe kanu pazolumikizidwe zonse za chipangizocho komanso kuti mukufuna (odziwika) olandila kuti alembe zambiri zamapaketi mumtundu wa ASCII.

Kwa iwo omwe amadziwa ns-2, zochitika zotsatiridwa ndi zofanana ndi zodziwika zomwe zimalemba zochitika "+", "-", "d" ndi "r".
Tsopano mutha kupanga script ndikuyendetsa kuchokera pamzere wolamula:

$ ./waf --run scratch/myfirst

Monga nthawi zambiri m'mbuyomo, mudzawona mauthenga angapo kuchokera ku Waf, ndiyeno "'kumanga' kutsirizidwa bwino" ndi mauthenga ena a pulogalamu yothamanga.

Mukathamanga, pulogalamuyo ipanga fayilo yotchedwa myfirst.tr. Chifukwa cha chikhalidwe cha ntchito Waf, mwachisawawa fayiloyo imapangidwa osati m'ndandanda wamba, koma m'ndandanda wapamwamba wa malo osungira. Ngati mukufuna kusintha njira yomwe ma trace amasungidwa, ndiye kuti mutha kugwiritsa ntchito gawo la Waf kuti mufotokozere --cwd. Sitinachite izi, kotero kuti tiyang'ane pa fayilo ya ASCII myfirst.tr mu mkonzi wanu womwe mumakonda, tifunika kupita ku chikwatu chapamwamba kwambiri chankhokwe yathu.

Kusanthula kwa ASCII

Pali zambiri zambiri kumeneko mu mawonekedwe wandiweyani, koma chinthu choyamba muyenera kuzindikira ndi chakuti fayilo imakhala ndi mizere payekha. Izi zidzawoneka bwino ngati mukulitsa zenera lowonera.

Mzere uliwonse mufayilo umafanana ndi chochitika chotsatira. Pankhaniyi, timatsata zochitika pamzere wotumizira womwe ulipo pa chipangizo chilichonse chapaintaneti poyerekezera. Mzere wopatsirana ndi mzere womwe paketi iliyonse iyenera kudutsa kuti igwirizane ndi mfundo. Dziwani kuti mzere uliwonse mu fayilo ya trace umayamba ndi munthu m'modzi (ndipo uli ndi danga pambuyo pake). Chizindikirochi chidzakhala ndi tanthauzo ili:

+: ntchito ya pamzere idachitika pamzere wa chipangizocho;
-: ntchito yochotsa zinthu idachitika pamzere wa chipangizocho;
d: paketi idagwetsedwa, nthawi zambiri chifukwa mzerewo unali wodzaza;
r: Paketi idalandiridwa ndi chipangizo cha netiweki.

Tiyeni tione bwinobwino mzere woyamba mu trace file. Ndichigawa m'magawo (ndi ma indentations kuti amveke bwino) ndi nambala ya mzere kumanzere:

0 +
1 2
2 /NodeList/0/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Enqueue
3 ns3::PppHeader (
4   Point-to-Point Protocol: IP (0x0021))
6   ns3::Ipv4Header (
7     tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags [none]
8     length: 1052 10.1.1.1 > 10.1.1.2)
9     ns3::UdpHeader (
10      length: 1032 49153 > 9)
11      Payload (size=1024)

Gawo loyamba la chotsatira chotalikirachi (mzere 0) ndi ntchito. Tili ndi chizindikiro + apa, chomwe chikugwirizana ndi ntchito ya pamzere wotumizira. Gawo lachiwiri (mzere 1) ndi nthawi yofananira, yowonetsedwa mumasekondi. Mungakumbukire zimene tinafunsa UdpEchoClientApplication yambani kutumiza mapaketi mumasekondi awiri. Apa tikuwona kutsimikizira kuti izi zikuchitikadi.

Gawo lotsatira lachitsanzo chotsatira (kuchokera pamzere 2) likuwonetsa komwe kunapanga chochitikachi (chosonyeza malo a mayina). Mutha kuganiza za malo ochezera monga momwe mungapangire malo amtundu wamafayilo. Muzu wa malowa ndi NodeList. Izi zikugwirizana ndi chidebe chomwe chimayendetsedwa mu code ns-3. Lili ndi mfundo zonse zomwe zimapangidwa mu script. Monga momwe mafayilo amafayilo amatha kukhala ndi zolemba pamizu yake, NodeList tikhoza kukhala ndi mfundo zambiri. Chifukwa chake mzere /NodeList/0 umatanthawuza null node mu NodeList, yomwe nthawi zambiri timaganiza ngati "node 0". Node iliyonse ili ndi mndandanda wa zida zomwe zayikidwa. Mndandandawu uli pafupi ndi malo a mayina. Mutha kuwona kuti chochitika ichi chikuchokera DeviceList/0, chomwe ndi chida chachabechabe chomwe chimayikidwa mu node.

Chingwe chotsatira chotsatira, $ ns3 :: PointToPointNetDevice, imawuza chipangizo chomwe chili paziro: mndandanda wa zida za nodi ziro. Kumbukirani kuti ntchito + yopezeka pamzere 0 imatanthawuza kuti chinthu chinawonjezedwa pamzere wotumizira chipangizocho. Izi zikuwonetsedwa m'magawo omaliza a "njira yolondola": TxQueue/Enqueue.

Magawo otsalawo akuyenera kukhala omveka bwino. Mizere 3-4 ikuwonetsa kuti paketiyo imayikidwa mu protocol ya point-to-point. Mizere 5-7 ikuwonetsa kuti paketiyo ili ndi mutu wamtundu wa IP4 ndipo idachokera ku adilesi ya IP 10.1.1.1 ndipo amapangidwira 10.1.1.2. Mizere 8-9 ikuwonetsa kuti paketi ili ndi mutu wa UDP ndipo pamapeto pake mzere wa 10 ukuwonetsa kuti malipirowo amayembekezeredwa 1024 byte.

Mzere wotsatira mu fayilo yolondolera ukuwonetsa kuti paketi yomweyo idakokedwa pamzere wopatsira pamfundo yomweyo.

Mzere wachitatu mu fayilo yolondolera ukuwonetsa kuti paketiyo idalandiridwa ndi chida cha netiweki pa seva yolandila echo. Ndapanganso chochitikachi pansipa.

0 r
1 2.25732
2 /NodeList/1/DeviceList/0/$ns3::PointToPointNetDevice/MacRx
3   ns3::Ipv4Header (
4     tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags [none]
5     length: 1052 10.1.1.1 > 10.1.1.2)
6     ns3::UdpHeader (
7       length: 1032 49153 > 9)
8       Payload (size=1024)

Dziwani kuti kufufuza ntchito tsopano ndi r ndipo nthawi yofananira yawonjezeka kufika masekondi 2,25732. Ngati mumatsatira phunziroli mosamala, izi zikutanthauza kuti mwasiya DataRate ndi Link Delay pazida zawo zokhazikika. Nthawi imeneyi iyenera kukhala yodziwika bwino, monga momwe mwawonera m'gawo lapitalo.

Lowero la malo amtundu wa trace source (mzere 2) lasinthidwa kuti liwonetsere kuti chochitikachi chikuchokera ku node 1 (/NodeList/1) ndipo paketiyo imalandiridwa ndi gwero (/MacRx). Ziyenera kukhala zosavuta kuti mutsatire kayendedwe ka paketi kudzera mu topology poyang'ana zotsalira zomwe zatsala mufayiloyo.

5.3.2 Kutsata kwa PCAP

The ns-3 Device Helpers angagwiritsidwenso ntchito kupanga trace owona mu .pcap format. Mwachidule pcap (nthawi zambiri zolembedwa zilembo zing'onozing'ono) zimayimira kugwidwa kwa paketi ndipo kwenikweni ndi API yomwe imaphatikizapo kufotokozera mtundu wa fayilo ya .pcap. Pulogalamu yotchuka kwambiri yomwe imatha kuwerenga ndikuwonetsa mawonekedwe awa ndi Wireshark (yotchedwa kale Ethereal). Komabe, pali owunikira ambiri omwe amagwiritsa ntchito paketi iyi. Timalimbikitsa ogwiritsa ntchito kugwiritsa ntchito zida zambiri zomwe zilipo kuti azisanthula ma trace a pcap. Mu phunziro ili tidzayang'ana kwambiri pakuwona ma trace a pcap pogwiritsa ntchito wcputu.

Kuthandizira kufufuza kwa pcap kumachitika ndi mzere umodzi wa code.

pointToPoint.EnablePcapAll ("myfirst");

Matani mzere wa code iyi pambuyo pa nambala ya ASCII yomwe tangowonjezerapo scratch/myfirst.cc. Dziwani kuti tinangodutsa chingwe "myfirst", osati "myfirst.pcap" kapena china chilichonse chofanana. Izi ndichifukwa choti parameter ndi choyambirira, osati dzina lathunthu. Panthawi yofananira, wothandizirayo apangadi fayilo yotsatsira pa chipangizo chilichonse cha mfundo. Mayina afayilo adzapangidwa pogwiritsa ntchito mawu oyamba, nambala ya node, nambala ya chipangizocho, ndi mawu okwana ".pcap".

Kwa script yathu yachitsanzo, tiwona mafayilo otchedwa "myfirst-0-0.pcap"Ndipo"myfirst-1-0.pcap", zomwe ndizotsatira za pcap za node 0-chipangizo 0 ndi node 1-chipangizo 0 motsatira. Mukawonjezera mzere wa code kuti mutsegule pcap, mutha kuyendetsa script mwanjira yanthawi zonse:

$ ./waf --run scratch/myfirst

Ngati muyang'ana m'ndandanda wapamwamba kwambiri wa kugawa kwanu, muyenera kuwona mafayilo atatu: fayilo ya ASCII myfirst.tr, zomwe tidaphunzira kale, mafayilo myfirst-0-0.pcap ΠΈ myfirst-1-0.pcap - mafayilo atsopano a pcap omwe tangopanga kumene.

Kuwerenga zotuluka ndi tcpdump

Pakadali pano, njira yosavuta yowonera mafayilo a pcap ndikugwiritsa ntchito tcpdump.

$ tcpdump -nn -tt -r myfirst-0-0.pcap
reading from file myfirst-0-0.pcap, link-type PPP (PPP)
2.000000 IP 10.1.1.1.49153 > 10.1.1.2.9: UDP, length 1024
2.514648 IP 10.1.1.2.9 > 10.1.1.1.49153: UDP, length 1024
tcpdump -nn -tt -r myfirst-1-0.pcap
reading from file myfirst-1-0.pcap, link-type PPP (PPP)
2.257324 IP 10.1.1.1.49153 > 10.1.1.2.9: UDP, length 1024
2.257324 IP 10.1.1.2.9 > 10.1.1.1.49153: UDP, length 1024

M'dambo myfirst-0-0.pcap (chipangizo chamakasitomala) mutha kuwona paketi ya echo imatumizidwa pambuyo pa masekondi a 2 akuyerekeza. Ngati muyang'ana pa dambo lachiwiri (myfirst-1-0.pcap), mudzawona kuti paketi imalandiridwa pa masekondi 2,257324. Mudzawona mu dambo lachiwiri kuti paketi yabwezeredwa pa masekondi 2.257324, ndipo potsiriza paketiyo inalandiridwanso ndi kasitomala potaya koyamba pa masekondi a 2.514648.

Kuwerenga Kutulutsa ndi Wireshark

Ngati simukuzidziwa Wireshark, pali tsamba lomwe mutha kukopera mapulogalamu ndi zolemba: http://www.wireshark.org/. Wireshark ndi GUI yomwe ingagwiritsidwe ntchito kuwonetsa mafayilo awa. Ngati muli ndi Wireshark, mutha kutsegula mafayilo aliwonse ndikuwonetsa zomwe zilimo ngati kuti mwalanda mapaketiwo pogwiritsa ntchito paketi sniffer.

Source: www.habr.com

Kuwonjezera ndemanga