ns-3 tambajotra simulator fampianarana. Toko 5

ns-3 tambajotra simulator fampianarana. Toko 5
toko 1,2
toko 3
toko 4

5 Fametrahana
5.1 Mampiasa ny maody fanoratana
5.1.1 Fijerena logging
5.1.2 Alefaso ny logging
5.1.3 Fanampiana ny logging amin'ny code-nao
5.2 Mampiasa tohan-kevitra andalana baiko
5.2.1 Mamerina ny soatoavin'ny toetra mahazatra
5.2.2 Misambotra ny didinao manokana
5.3 Mampiasa ny rafitra fanaraha-maso
5.3.1 ASCII Tracing
Famaritana ny dian'ny ASCII
5.3.2 Trace PCAP

Toko 5

fanitsiana

5.1 Mampiasa ny maody fanoratana

Efa nijery fohifohy ny module logging ns-3 izahay tamin'ny fijerena ny script voalohany.cc. Ato amin'ity toko ity dia hojerentsika akaiky kokoa ny fampiasana azo atao amin'ny subsistema logging.

5.1.1 Fijerena logging

Rafitra lehibe maro no manohana karazana trano fitehirizana hafatra, ary tsy maningana ny ns-3. Amin'ny tranga sasany, hafatra diso ihany no voasoratra ao amin'ny "Console operator" (izay matetika stderr amin'ny rafitra mifototra amin'ny Unix). Amin'ny rafitra hafa, misy hafatra fampitandremana azo aseho ary koa fampahalalana amin'ny antsipiriany kokoa. Amin'ny toe-javatra sasany, ny fitaovana fanoratana dia ampiasaina hamoahana hafatra debug izay afaka manjavozavo haingana ny vokatra.

Ny subHRD ampiasaina ao amin'ny ns-3 dia mihevitra fa mahasoa avokoa ireo ambaratongan'ny votoaty fampahalalana rehetra ireo, ary manome fomba fiasa mifantina sy mifantina amin'ny fanoratana hafatra izahay. Ny fanoratana dia azo vonoina tanteraka, azo atao isaky ny singa, na maneran-tany. Ho an'ity tanjona ity dia ampiasaina ny haavon'ny votoatin'ny fampahalalana azo ovana. Ny maody logging ns-3 dia manome fomba tsotra hahazoana fampahalalana mahasoa avy amin'ny simulation-nao.

Tokony ho takatrao fa manome mekanika tanjona ankapobeny izahay - tracing - mba hanesorana ny angona avy amin'ny modelyo, izay tokony ho vokatra tiana ho an'ny simulation (raha mila fanazavana fanampiny momba ny rafitra fanaraha-maso, jereo ny fizarana 5.3). Ny fanoratana dia tokony ho fomba tsara indrindra hahazoana fampahalalana momba ny debugging, fampitandremana, hafatra diso, na famoahana hafatra haingana avy amin'ny scripto na modely amin'ny fotoana rehetra.

Amin'izao fotoana izao, ny rafitra dia mamaritra ambaratonga fito (karazana) hafatra amin'ny log amin'ny filaharan'ny votoatin'ny fampahalalana.

  • LOG_ERROR - hafatra diso amin'ny fanoratana (macro mifandraika: NS_LOG_ERROR);
  • LOG_WARN - Hafatra fampitandremana log (macro mifandraika: NS_LOG_WARN);
  • LOG_DEBUG - Ampidiro ny hafatra debug manokana tsy fahita firy (macro mifandraika: NS_LOG_DEBUG);
  • LOG_INFO - fisoratana anarana hafatra fampahalalana momba ny fandrosoan'ny programa (macro mifandraika: NS_LOG_INFO);
  • LOG_FUNCTION - Manoratra hafatra mamaritra ny fiasa tsirairay antsoina (macro roa mifandraika: NS_LOG_FUNCTION, ampiasaina amin'ny asan'ny mpikambana, ary NS_LOG_FUNCTION_NOARGS, ampiasaina amin'ny fiasa static);
  • LOG_LOGIC - hafatra firaketana milaza ny fikorianan'ny lojika ao anatin'ny fiasa iray (macro mifandraika: NS_LOG_LOGIC);
  • LOG_ALL - Manoratra ny zava-drehetra voalaza etsy ambony (tsy misy macro mifandray).
    Ho an'ny karazana tsirairay (LOG_TYPE) dia misy LOG_LEVEL_TYPE ihany koa izay, raha ampiasaina, dia mamela ny ambaratonga rehetra eo amboniny ho voarakitra ankoatry ny haavony manokana. (Noho izany, ny LOG_ERROR sy ny LOG_LEVEL_ERROR, ary ny LOG_ALL ary ny LOG_LEVEL_ALL dia mitovy amin'ny fomba fiasa.) Ohatra, ny fampandehanana ny LOG_INFO dia hamela hafatra omen'ny macro NS_LOG_INFO ihany, fa ny fampandehanana ny LOG_LEVEL_INFO dia hampiditra hafatra nomen'ny macros , WARNS_LOGER_DEBUNS , ary ny LOG_LEVEL_INFO .

Manome macro logging tsy misy fepetra ihany koa izahay izay aseho foana, na inona na inona haavon'ny logging na singa mifantina.

  • NS_LOG_UNCOND - Fisoratana anarana tsy misy fepetra amin'ny hafatra mifandraika (tsy misy haavon'ny logging).

Ny ambaratonga tsirairay dia azo anontaniana manokana na mitambatra. Ny logging dia azo amboarina amin'ny alàlan'ny sh environment variable NS_LOG na amin'ny alàlan'ny fanoratana antso an-tariby. Araka ny naseho teo aloha, manana antontan-taratasy Doxygen ny rafitra logging ary izao no fotoana tsara handinihana izany raha mbola tsy nanao izany ianao.

Ankehitriny rehefa namaky ny antontan-taratasy amin'ny antsipiriany ianao dia andao hampiasa izany fahalalana izany mba hahazoana fampahalalana mahaliana avy amin'ny script ohatra scratch/myfirst.ccizay efa natambatrao.

5.1.2 Alefaso ny logging

Andao hampiasa ny fari-piainan'ny tontolo iainana NS_LOG mba hampandehanana logs bebe kokoa, fa aloha, raha te hahazo ny andraikinao, dia ataovy ny script farany toy ny nataonao teo aloha,

$ ./waf --run scratch/myfirst

Tokony ho hitanao ny vokatra mahazatra avy amin'ny programa ohatra ns-3 voalohany

$ 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

Hita fa hafatra avy amin'ny logiciel avy amin'ny hafatra voaray ny hafatra "nalefa" sy "voaray". UdpEchoClientApplication и UdpEchoServerApplication. Ohatra, azontsika atao ny mangataka amin'ny fampiharana mpanjifa mba hanonta fampahalalana fanampiny amin'ny alàlan'ny fametrahana ny haavon'ny logging azy amin'ny alàlan'ny fari-piainana NS_LOG.

Manomboka izao dia ataoko fa mampiasa akorandriaka sh ianao izay mampiasa ny syntax "VARIABLE=value". Raha mampiasa akorandriaka mitovy amin'ny csh ianao, dia tsy maintsy mamadika ny ohatra omeko amin'ny syntax "setenv variable value" takian'ireo akorandriaka ireo.

Amin'izao fotoana izao, ny fampiharana mpanjifa UDP echo dia mamaly ity andalana manaraka ity amin'ny code in scratch/myfirst.cc,

LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);

Izany dia mamela ny LOG_LEVEL_INFO ambaratonga. Rehefa mandalo ny sainam-pandrefesana amin'ny alàlan'ny firaketana an-tsoratra isika dia avelantsika io ambaratonga io sy ny ambaratonga ambany rehetra. Amin'ity tranga ity dia navelanay ny NS_LOG_INFO, NS_LOG_DEBUG, NS_LOG_WARN ary NS_LOG_ERROR. Afaka mampitombo ny haavon'ny logging isika ary mahazo fampahalalana bebe kokoa, tsy misy fanovana script sy recompilation, amin'ny fametrahana ny fari-piainana NS_LOG toy izao manaraka izao:

$ export NS_LOG=UdpEchoClientApplication=level_all

Noho izany dia nametraka ny sh shell variable NS_LOG amin'ity sanda manaraka ity izahay,

UdpEchoClientApplication=level_all

Ny ilany havia amin'ny fanendrena dia ny anaran'ny singa voarakitra tiantsika hamboarina, ary ny ilany havanana dia ny saina tiantsika hampiharana azy. Amin'ity tranga ity, dia ho afaka ny ambaratonga rehetra ny debugging ao amin'ny fampiharana. Raha toa ianao ka mihazakazaka ny script miaraka amin'ny NS_LOG napetraka amin'ny fomba toy izao, ny ns-3 log system dia hanaiky ny fanovana ary tokony ho hitanao izao vokatra manaraka izao:

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()

Ny fampahalalana debug fanampiny nomen'ny fampiharana dia eo amin'ny ambaratonga NS_LOG_FUNCTION izao. Izy io dia mampiseho ny tranga rehetra amin'ny antso an-tariby mandritra ny famonoana script. Amin'ny ankapobeny, amin'ny fomba fiasa dia tsara kokoa ny mampiasa (farafaharatsiny)NS_LOG_FUNCTION (this)... Ampiasao NS_LOG_FUNCTION_NOARGS ()
amin'ny asa static ihany. Na izany aza, mariho fa ny rafitra ns-3 dia tsy voatery hanohana ny fampiasa amin'ny log. Ny fanapahan-kevitra momba ny habetsaky ny fampahalalana voarakitra dia navela ho an'ny mpamorona modely tsirairay. Amin'ny trangan'ny fampiharana echo, betsaka ny vokatra logging azo alaina.

Azonao atao izao ny mijery ny diarin'ny antso an-tariby nataon'ny fampiharana. Raha mijery akaiky ianao dia ho hitanao fa misy colon eo anelanelan'ny tsipika UdpEchoClientApplication ary ny anaran'ny fomba, izay azonao antenaina hahita ny C++ scope operator (: :). Izany dia fanahy iniana.

Tsy io no anaran'ny kilasy, fa ny anaran'ny singa logging. Rehefa misy fifanandrinana eo amin'ny rakitra loharano sy ny kilasy, dia matetika no anaran'ny kilasy izany, saingy tokony ho fantatrao fa tsy tena anaran'ny kilasy izany, ary misy tsilo tokana fa tsy colon roa. Ity dia fomba iray hanampiana anao hanasaraka ny anaran'ny tsaramaso logging amin'ny anaran'ny kilasy amin'ny fomba saro-takarina.

Na izany aza, amin'ny toe-javatra sasany dia mety ho sarotra ny mamaritra hoe iza no fomba tena miteraka ny hafatra log. Raha mijery ny lahatsoratra etsy ambony ianao dia mety hanontany tena hoe aiza ny tsipika "Received 1024 bytes from 10.1.1.2" Afaka mamaha ity olana ity ianao amin'ny fametrahana ny haavony prefix_func mankany amin'ny fari-piainana NS_LOG. Andramo ireto:

$ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func'

Mariho fa ilaina ny marika teny nalaina satria ny bara mitsangana ampiasaintsika hanehoana ny fiasan'ny OR dia mpampitohy sodina Unix ihany koa. Amin'izao fotoana izao raha mihazakazaka ny script ianao dia ho hitanao fa ny rafitra logging dia miantoka fa ny hafatra rehetra ao amin'ny log iray nomena dia apetraka amin'ny anaran'ny singa.

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()

Hitanao izao fa ny hafatra rehetra avy amin'ny fampiharana UDP echo client dia fantatra ho toy izany. Hafatra "Received 1024 bytes from 10.1.1.2" dia fantatra mazava fa avy amin'ny fampiharana mpanjifa echo. Ny hafatra sisa dia tsy maintsy avy amin'ny fampiharana UDP echo server. Azontsika atao ny mamela ity singa ity amin'ny alàlan'ny fampidirana lisitr'ireo singa misaraka amin'ny tsangambato ao amin'ny fari-piainana NS_LOG.

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

Fampitandremana: Ao amin'ny lahatsoratra ohatra etsy ambony dia mila esorinao ny toetran'ny andalana vaovao aorian'ny zana-tsipìka (:), ampiasaina hanamboarana ny antontan-taratasy. Ankehitriny raha mihazakazaka ny script ianao dia ho hitanao ny hafatra log rehetra avy amin'ny fampiharana echo client sy server. Hitanao fa mety tena ilaina izany rehefa debugging.

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()

Tena ilaina ihany koa indraindray ny mahita ny fotoana simulation izay namoronana ny hafatra log. Azonao atao izany amin'ny fampidirana ny bit OR prefix_time:

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

Tsy maintsy esorinao indray ilay toetra vaovao andalana etsy ambony. Raha mihazakazaka ny script ianao izao dia tokony hahita ity vokatra manaraka ity ianao:

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()

Mariho fa ny constructor for UdpEchoServer dia nantsoina nandritra ny simulation 0 segondra. Mitranga izany raha ny marina alohan'ny hanombohan'ny simulation, fa ny fotoana dia aseho ho zero segondra. Toy izany koa ny hafatra constructor 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()

Tsarovy fa ny script scratch/voalohany.cc nanomboka ny fampiharana server echo iray segondra alohan'ny hanombohan'ny simulation. Ankehitriny dia ho hitanao fa ny fomba StartApplication ny mpizara dia tena antsoina amin'ny segondra voalohany. Mety ho hitanao koa fa manomboka amin'ny segondra faharoa amin'ny simulation ny mpanjifa echo, araka ny nangatahanay tao amin'ny script.

Azonao atao izao ny manaraka ny fivoaran'ny simulation amin'ny antso ScheduleTransmit ao amin'ny mpanjifa miantso ny HandleRead callback Alefaso amin'ny fampiharana server echo. Marihina fa 3,69 milliseconds ny fotoana lany handefasana fonosana amin'ny rohy point-to-point. Azonao atao ny mahita fa ny mpizara echo dia mandefa hafatra izay namaly ny fonosana, ary avy eo, aorian'ny fanemorana ny fantsona, dia hitanao fa ny mpanjifa echo dia mandray ny fonosana echo amin'ny fomba HandleRead.

Amin'ity simulation ity dia betsaka no mitranga nefa tsy voamarikao. Saingy azonao atao ny manara-maso ny dingana manontolo amin'ny alàlan'ny fampandehanana ny singa rehetra ao amin'ny rafitra. Andramo mametraka ny fari-piadidiana NS_LOG amin'ity sanda manaraka ity,

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

Ny asterisk etsy ambony dia endri-tsoratra ho an'ny singa fanoratana. Anisan'izany ny fidirana rehetra amin'ny singa rehetra ampiasaina amin'ny simulation. Tsy hamerina ny vokatra eto aho (amin'ny fotoana anoratana dia mamokatra tsipika 1265 ho an'ny fonosana akora tokana), fa azonao atao ny mamindra izany fampahalalana izany amin'ny rakitra iray ary mijery azy amin'ny tonian-dahatsoratra tianao indrindra.

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

Izaho manokana dia mampiasa an'io dikan-teny tsy misy dikany amin'ny logging io rehefa manana olana aho ary tsy mahafantatra izay tsy nety. Afaka manaraka mora foana ny famonoana kaody aho nefa tsy mametraka teboka fiatoana ary mamakivaky ny code ao amin'ny debugger. Afaka manitsy fotsiny ny vokatra ao amin'ny tonian-dahatsoratra tiako indrindra aho ary mitady izay andrasako ary mahita zavatra mitranga tsy nampoiziko. Raha vao manana hevitra ankapobeny momba ny tsy mety aho, dia mitsambikina ao amin'ny debugger aho mba handinihana ny olana. Ity karazana famoahana ity dia mety ilaina indrindra rehefa manao zavatra tsy ampoizina tanteraka ny scripto. Raha mampiasa ny debugger fotsiny ianao, dia mety ho diso tanteraka ny fanodinkodinana. Ny fisoratana anarana dia mahatsikaritra ny fihodinana toy izany.

5.1.3 Fanampiana ny logging amin'ny code-nao

Azonao atao ny manampy fidirana vaovao amin'ny simulations anao amin'ny alàlan'ny fiantsoana ny singa log avy amin'ny macro maro. Andao hatao amin'ny script myfirst.cc, izay ananantsika ao amin'ny lahatahiry "madio". Tsarovy fa namaritra singa iray amin'ny logging isika amin'ity toe-javatra ity:

NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

Fantatrao fa azonao atao ny mampiditra ny hafatra rehetra avy amin'ity singa ity amin'ny alàlan'ny fametrahana ny fari-piainana NS_LOG amin'ny ambaratonga samihafa. Andeha isika ary ampidiro ao amin'ny script. NS_LOG_INFO ny macro ampiasaina hampidirana hafatra amin'ny ambaratongam-baovao. Andeha isika hanampy hafatra (alohan'ny hanombohantsika mamorona nodes) izay milaza aminao fa ny script dia ao amin'ny dingana "Mamorona Topology". Izany dia atao ao amin'ny snippet code manaraka,
Sokafy scratch/myfirst.cc ao amin'ny tonian-dahatsoratra tianao indrindra ary ampio ny tsipika,
NS_LOG_INFO ("Creating Topology");
alohan'ny andalana,

NodeContainer nodes;
nodes.Create (2);

Manangona ny script mampiasa waf, ary esory ny fari-piadidiana NS_LOG mba hanesorana ny rindran-damba navelanay teo aloha:

$ ./waf
$ export NS_LOG=
Теперь, если вы запустите скрипт,
$ ./waf --run scratch/myfirst

Tsy ho hitanao ilay hafatra vaovao satria tsy navela ny singa fanoratana (FirstScriptExample). Raha te hahita ny hafatrao ianao dia mila mamela ny singa logging FirstScriptExample miaraka amin'ny ambaratonga tsy ambany noho ny NS_LOG_INFO. Raha te-hahita an'io haavon'ny firaketana manokana io fotsiny ianao dia azonao atao ny mamela azy toy izao,

$ export NS_LOG=FirstScriptExample=info

Raha mihazakazaka ny script ianao izao, dia hahita hafatra vaovao "Creating 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 Mampiasa tohan-kevitra andalana baiko

5.2.1 Mamerina ny soatoavin'ny toetra mahazatra

Fomba iray hafa hanovana ny fitondran-tenan'ny script ns-3 tsy misy fanitsiana na fananganana dia ny fampiasana ny tohan-kevitry ny baiko. Manome mekanika izahay handinihana ireo tohan-kevitry ny andalana baiko ary mametraka ho azy ireo fari-pitsipika eo an-toerana sy manerantany mifototra amin'ny valiny.

Ny dingana voalohany amin'ny fampiasana ny rafitra argument andalana baiko dia ny manambara parser andalana baiko. Mora ny manao izany (ao amin'ny programa fototra), toy ny ao amin'ny code manaraka,

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

Ity sombin-tsipika roa tsotra ity dia tena ilaina amin'ny zony manokana. Izy io dia manokatra ny varavarana mankany amin'ny ns-3 global variable and attribute system. Andeha isika hanampy andalana roa amin'ny kaody eo amin'ny fiandohan'ny asa soratra lehibe scratch/myfirst.cc. Mandrosoa, manangona ny script isika ary mihazakazaka izany, rehefa mihazakazaka dia manao fangatahana fanampiana toy izao manaraka izao,

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

Hanontany ity baiko ity Waf run script scratch/my voalohany ary asio argument andalana baiko —PrintHelp. Ny mari-pamantarana dia takiana mba hanondroana ny programa natao ho an'ny tohan-kevitra. Ny parser andalana baiko dia hamantatra ny tohan-kevitra —PrintHelp ary hampiseho ny valiny,

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.

Andeha hojerentsika ny safidy —PrintAttributes. Efa niresaka momba ny rafitra toetra ns-3 izahay rehefa mianatra ny script first.cc. Hitanay ireto andalana code manaraka ireto,

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

ary hoy izy ireo DataRate tena toetra PointToPointNetDevice. Andao hampiasa ny parser argument andalana baiko hijerena ireo toetra PointToPointNetDevice. Ny lisitry ny fanampiana dia milaza izay tsy maintsy omenay TypeId. Io no anaran'ny kilasy misy ny toetra mahaliana. Amin'ny tranga misy antsika dia ho izany ns3::PointToPointNetDevice. Andao handroso hatrany, midira,

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

Ny rafitra dia hanonta ny toetra rehetra amin'ity karazana fitaovana tambajotra ity. Ho hitanao fa anisan'ireo toetra ao anaty lisitra dia,

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

Ity no sanda default izay hampiasain'ny rafitra rehefa mamorona ilay zavatra PointToPointNetDevice. Hanafoana io sanda default io isika amin'ny fampiasana ny parameter toetra в PointToPointHelper ambony. Andao hampiasa ny soatoavina mahazatra ho an'ny fitaovana sy fantsona point-to-point. Mba hanaovana izany dia hofafantsika ny antso SetDeviceAttribute и SetChannelAttribute avy amin'ny myfirst.cc, izay ananantsika ao anaty lahatahiry madio.

Tokony hanambara tsotra izao ny scripto PointToPointHelper ary aza manao asa fametrahana araka ny aseho amin'ny ohatra etsy ambany,

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

Mandehana ary mamorona script vaovao miaraka amin'ny Waf (./waff) ary andao hiverina ary hampiditra ny fidirana sasany avy amin'ny fampiharana UDP echo server ary ampidiro ny prefix fotoana.

$ export 'NS_LOG=UdpEchoServerApplication=level_all|prefix_time'

Raha mihazakazaka ny script ianao dia tokony hahita ity vokatra manaraka ity:

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()

Tsarovy fa ny fotoana farany nijery ny fotoana simulation, tamin'ny fotoana noraisin'ny mpizara echo ny fonosana, dia 2,00369 segondra izany.

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

Ankehitriny dia azony ilay fonosana ao anatin'ny 2.25732 segondra. Izany dia satria averinay fotsiny ny tahan'ny data PointToPointNetDevice avy amin'ny dimy megabits isan-tsegondra mankany amin'ny sanda mahazatra, izay 32768 bit isan-tsegondra. Raha toa ka manolo ny DataRate vaovao amin'ny alàlan'ny baiko baiko isika dia afaka manafaingana indray ny simulation. Hanao toy izao manaraka izao isika, araka ny rôlôjia nasehon'ny singa fanampiana:

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

Izany dia hamerina ny toetra DataRate amin'ny sanda mahazatra dimy megabits isan-tsegondra. Gaga ve ianao amin'ny vokatra? Hita fa mba hamerenana ny fitondran-tena tany am-boalohany amin'ny script, dia mila mametraka ny fanemorana ny fantsona hifanaraka amin'ny hafainganam-pandehan'ny hazavana ihany koa isika. Azontsika atao ny mangataka ny rafitra baiko mba hanonta ny toetran'ny fantsona, toy ny nataontsika tamin'ny fitaovana tambajotra:

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

Ho hitantsika fa ny toetran'ny fahatarana ny fantsona dia napetraka toy izao manaraka izao:

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

Avy eo, amin'ny alàlan'ny rafitra baikon'ny baiko, dia afaka mametraka ireo soatoavina mahazatra ireo isika.

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

Amin'ity tranga ity dia mamerina ny fotoana nanananay izahay nametraka mazava ny DataRate sy ny fahatarana amin'ny 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()

Mariho fa voarain'ny mpizara indray ny fonosana rehefa afaka 2,00369 segondra. Azontsika atao ny mametraka ny toetra ampiasaina amin'ny script amin'ity fomba ity. Indrindra indrindra, azontsika atao ny mametraka ny toetra MaxPackets amin'ny sanda tsy misy UdpEchoClient.

Ahoana no hampiasanao azy? Andramo izany. Tsarovy fa tsy maintsy maneho hevitra ianao amin'ny toerana ametrahanay ny sandan'ny toetra default ary apetraka mazava MaxPackets amin'ny script. Avy eo dia tsy maintsy manangana indray ny script ianao. Azonao atao koa ny mampiasa ny baiko baiko mba hahazoana fanampiana syntax amin'ny fametrahana sanda toetra vaovao. Rehefa azonao izany dia azonao atao ny mifehy ny isan'ny fonosana aseho amin'ny baiko. Satria olona mazoto mianatra isika dia tokony ho toy izao ny baikon'ny baiko:

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

Ny fanontaniana voajanahary mipoitra amin'izao fotoana izao dia ny fomba hahafantarana ny fisian'ireo toetra rehetra ireo. Averina indray, manana asa fanampiana amin'ity raharaha ity ny rafitra andalana baiko. Raha mangataka fanampiana amin'ny baiko isika dia tokony hahita:

$ ./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.

Raha misafidy ny tohan-kevitra "PrintGroups" ianao dia tokony hahita lisitry ny vondrona rehetra voasoratra anarana TypeId. Ny anaran'ny vondrona dia mifanaraka amin'ny anaran'ny maody ao amin'ny lahatahiry loharano (na dia lehibe aza). Ny fanaovana pirinty ny fampahalalana rehetra indray mandeha dia mety ho be loatra, noho izany dia misy sivana fanampiny azo atao hanontana fampahalalana isaky ny vondrona. Noho izany, mifantoka indray amin'ny module point-to-point:

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

Eto ianao dia afaka mahita anarana TypeId ho an'ny fitadiavana toetra, ohatra ao amin'ny
--PrintAttributes = ns3 :: PointToPointChannelaraka ny aseho etsy ambony.

Fomba iray hafa hianarana momba ny toetra dia amin'ny alalan'ny Doxygen ns‑3. Misy pejy iray mitanisa ireo toetra rehetra voasoratra ao amin'ny simulator.

5.2.2 Misambotra ny didinao manokana

Azonao atao ihany koa ny manampy ny hooks anao amin'ny alàlan'ny rafitra baiko. Izany dia atao amin'ny fampiasana ny fomba parser andalana baiko AddValue.
Andao hampiasa ity endri-javatra ity mba hamaritana ny isan'ny fonosana haseho amin'ny fomba hafa tanteraka. Andeha isika hanampy faribolana eo an-toerana antsoina hoe nPackets amin'ny asa iray tena. Hametraka azy ho iray isika mba hifanaraka amin'ny fitondran-tenantsika teo aloha. Mba ahafahan'ny parser andalana baiko hanova io sanda io dia mila maka an'io sanda io ao amin'ny parser isika. Manao izany izahay amin'ny fampidirana antso AddValue. Mandehana manova ny script scratch/myfirst.cc ka manomboka amin'ny code manaraka,

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);
...

Mandehana midina mankany amin'ny teboka ao amin'ny script izay ametrahantsika ny toetra MaxPackets ary ovay izany mba hapetraka amin'ny variable nPackets fa tsy ny 1 tsy tapaka, araka ny aseho etsy ambany.

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

Ankehitriny raha mihazakazaka ny script ianao ary manome ny hevitra -PrintHelp dia tokony ho hitanao ny tohan-kevitry ny mpampiasa vaovao. voatanisa eo amin'ny fampisehoana fanampiana. Midira,

$ ./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

Raha te hanova ny isan'ny fonosana nampitaina ianao dia azonao atao izany amin'ny fametrahana ny tohan-kevitra andalana baiko - -nPackets.

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

Ankehitriny dia tokony ho hitanao izao

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()

Nandefa fonosana roa ianao izao. Tsotra kely, sa tsy izany?
Azonao atao ny mahita fa amin'ny maha-mpampiasa ns-3 anao dia azonao atao ny mampiasa ny rafitra adihevitra andalana baiko hanodinana ny soatoavina sy ny toetra manerantany. Raha ianao no mpanoratra modely dia azonao atao ny manampy toetra vaovao amin'ny zavatrao ary ho azo ampiasaina ho azy ireo ny mpampiasa anao amin'ny alàlan'ny rafitra baiko. Raha mpanoratra script ianao, dia azonao atao ny manampy varimbazaha vaovao amin'ny soratanao ary ampidiro ao anaty rafitra baiko.

5.3 Mampiasa ny rafitra fanaraha-maso

Ny teboka iray manontolo amin'ny modeling dia ny famokarana vokatra ho an'ny fandalinana fanampiny, ary ny rafitra trace ns-3 no tena mekanika amin'izany. Satria ny ns-3 dia programa C++, dia azo ampiasaina ny fomba mahazatra amin'ny famoahana vokatra avy amin'ny programa C++:

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

Azonao atao mihitsy aza ny mampiasa module logging mba hanampiana rafitra kely amin'ny vahaolanao. Betsaka ny olana fantatra ateraky ity fomba fiasa ity, ary noho izany dia nanome subsystem tracing hetsika ankapobeny izahay hamahana ireo olana ireo.

Ny tanjon'ny rafitra tracing ns-3 dia:

  • Ho an'ny asa fototra, ny rafitra fanaraha-maso dia tokony hamela ny mpampiasa hamokatra trace manara-penitra ho an'ny loharano malaza sy hisafidy zavatra izay miteraka ny dian;

  • Ireo mpampiasa mpanelanelana dia tokony ho afaka manitatra ny rafitra fanaraha-maso mba hanovana ny endrika mivoaka na hampiditra loharanom-baovao vaovao, tsy manova ny fototry ny simulator;

  • Ireo mpampiasa efa mandroso dia afaka manova ny fototry ny simulator mba hampidirana loharano vaovao sy rendrika. Ny rafitra fanaraha-maso ns-3 dia naorina amin'ny foto-kevitry ny loharanon'ny fanaraha-maso tsy miankina sy ny mpandray, ary koa ny mekanika iraisana hampifandray ireo loharano amin'ny mpanjifa.

Ny rafitra fanaraha-maso ns-3 dia miorina amin'ny foto-kevitry ny loharanon-tsarimihetsika tsy miankina sy ny mpandray, ary koa ny rafitra iray mampifandray ireo loharano amin'ny mpandray. Ny loharanon'ny trace dia zavatra afaka manambara ny fisehoan-javatra mitranga ao amin'ny simulation ary manome fidirana amin'ny angona fototra mahaliana. Ohatra, ny loharano iray dia afaka manondro ny fotoana nahazoan'ny fitaovana tambajotra iray fonosana iray ary manome ny votoatin'ny fonosana ho an'ireo mpandray trace liana.

Tsy misy ilana azy ireo loharanon-tsonia raha tsy hoe "ampifandraisina" amin'ny ampahany hafa amin'ny kaody izay tena manao zavatra mahasoa amin'ny fampahalalana nomen'ny dobo. Tracers dia mpanjifa hetsika sy angona omen'ny loharanom-baovao. Azonao atao, ohatra, ny mamorona fisidinana trace izay (rehefa mifandray amin'ny loharanon'ny trace amin'ny ohatra teo aloha) hanonta ny ampahany mahaliana ao amin'ny fonosana voaray.

Ny anton'ity fisarahana miharihary ity dia ny ahafahan'ny mpampiasa mampifandray ireo karazana rendrika vaovao amin'ireo loharanon-tsofina efa misy nefa tsy mila manitsy sy mamerina ny fototry ny simulator. Noho izany, amin'ny ohatra etsy ambony, ny mpampiasa dia afaka mamaritra tracer vaovao ao amin'ny script-ny ary mampifandray izany amin'ny loharanom-trace efa misy voafaritra ao amin'ny simulation core raha tsy amin'ny alàlan'ny fanovana ny script mpampiasa.

Ato amin'ity lesona ity dia handeha hamaky ny sasany amin'ireo loharano voafaritr'izy ireo isika ary hampiseho ny fomba azo amboarina miaraka amin'ny ezaka kely indrindra ataon'ny mpampiasa. Jereo ny Boky Torolàlana ns-3 na ny fomba fiasa ho an'ny fampahalalana momba ny fandrindrana trace mandroso, ao anatin'izany ny fanitarana ny anaran'ny trace sy ny famoronana loharano vaovao.

5.3.1 ASCII Tracing

Ny ns-3 dia manome fampiasa mpanampy izay manome rafitra fanaraha-maso ambany kokoa hanampy anao amin'ny antsipiriany rehefa manangana trace packet tsotra. Raha avelanao ity fampiasa ity dia ho hitanao ao amin'ny rakitra ASCII ny vokatra. Ho an'ireo izay mahazatra ny ns-2 output, ity karazana trace ity dia mitovy amin'ny out.tr, izay novokarin'ny script maro.

Andao isika hidina any amin'ny orinasa ary ampio valiny ASCII amin'ny script scratch/myfirst.cc. Alohan'ny hiantsoana Simulator :: Run (), ampio ireto andalana manaraka ireto:
AsciiTraceHelper ascii;

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

Tahaka ireo idioms ns-3 hafa, ity code ity dia mampiasa zavatra mpanampy mba hamoronana dian'ny ASCII. Ny andalana faharoa dia misy fiantsoana fomba roa. Fomba "anatiny". CreateFileStream() dia mampiasa ny teny tsy fantatra anarana mba hamoronana rakitra stream zavatra eo amin'ny stack (tsy misy anaran-javatra) ary mampita izany amin'ny fomba antsoina. Hiditra lalindalina kokoa amin'izany isika amin'ny ho avy, fa ny hany tokony ho fantatrao amin'izao fotoana izao dia ny famoronana zavatra iray izay maneho rakitra iray antsoina hoe myfirst.tr ary alefaso any amin'ny ns-3. Ankininay ny ns-3 hikarakara ilay zavatra noforonina mandritra ny androm-piainany manontolo, izay mamaha ny olana ateraky ny famerana tsy dia fantatra loatra (niniany) mifandray amin'ny C++ stream object copy constructors.

Antso ivelany EnableAsciiAll() dia milaza amin'ny mpanampy fa tianao ny hampiditra ASCII tracing ao amin'ny simulation-nao ho an'ny fifandraisana amin'ny fitaovana point-to-point rehetra ary tianao ny mpandray trace (voatondro) handrakitra ny fampahalalana momba ny hetsika amin'ny endrika ASCII.

Ho an'ireo zatra amin'ny ns-2, ny hetsika arahina dia mitovy amin'ireo tracepoint fantatra izay mirakitra ny hetsika "+", "-", "d" ary "r".
Azonao atao izao ny manangana ny script ary mihazakazaka izany avy amin'ny tsipika baiko:

$ ./waf --run scratch/myfirst

Tahaka ny teo aloha, dia hahita hafatra maromaro avy amin'i Waf ianao, ary avy eo dia "vita soa aman-tsara" miaraka amin'ny hafatra sasany avy amin'ny programa mandeha.

Rehefa mihazakazaka, ny programa dia hamorona rakitra iray antsoina hoe myfirst.tr. Noho ny toetry ny asa Waf, amin'ny alàlan'ny default dia tsy ao amin'ny lahatahiry eo an-toerana ny rakitra, fa ao amin'ny lahatahiry ambony indrindra amin'ny tahiry. Raha te hanova ny lalana misy dian ianao dia azonao atao ny mampiasa ny parameter Waf hamaritana azy --cwd. Mbola tsy nanao an'izany izahay, ka raha hijery ny fisie trace ASCII myfirst.tr ao amin'ny tonian-dahatsoratra tianao indrindra, dia mila mandeha any amin'ny lahatahiry ambony indrindra amin'ny tahiry.

Famaritana ny dian'ny ASCII

Misy fampahalalana be dia be ao amin'ny endrika somary matevina, fa ny zavatra voalohany tokony homarihinao dia ny rakitra dia misy andalana tsirairay. Ho hita miharihary izany raha toa ka manitatra ny varavarankelin'ny fijerena ianao.

Ny andalana tsirairay ao amin'ny rakitra dia mifanitsy amin'ny hetsika trace. Amin'ity tranga ity, dia manara-maso ny zava-mitranga ao amin'ny filaharana fampitaovana misy ao amin'ny fitaovana tambajotra isan-karazany amin'ny simulation. Ny filaharana fandefasana dia ny filaharana izay tsy maintsy mandalo ny fonosana tsirairay ho an'ny rohy point-to-point. Mariho fa ny andalana tsirairay ao amin'ny rakitra trace dia manomboka amin'ny tarehin-tsoratra tokana (ary manana toerana aorian'izany). Ity marika ity dia hanana ny dikany manaraka:

+: nisy hetsika filaharana nitranga tamin'ny filaharana fitaovana;
-: nisy hetsika fakana singa nitranga tao amin'ny filaharana fitaovana;
d: nilatsaka ny fonosana, matetika satria feno ny filaharana;
r: Ny fonosana dia noraisin'ny fitaovana tambajotra.

Andeha hojerentsika akaiky ny andalana voalohany amin'ny rakitra trace. Hozaraiko ho ampahany (miaraka amin'ny indentations mba hazava) sy ny laharan'ny andalana eo ankavia:

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)

Ny fizarana voalohany amin'ity hetsika trace miitatra (andalana 0) ity dia ny fandidiana. Manana marika + isika eto, izay mifanitsy amin'ny fiasan'ny filaharana amin'ny fandefasana. Ny fizarana faharoa (andalana 1) dia ny fotoana simulation, aseho amin'ny segondra. Tadidinao angamba ny nangatahanay UdpEchoClientApplication manomboka mandefa fonosana ao anatin'ny roa segondra. Eto isika dia mahita fanamafisana fa tena mitranga tokoa izany.

Ny fizarana manaraka amin'ny ohatra trace (avy amin'ny andalana 2) dia mampiseho izay loharanon'ny trace niteraka ity hetsika ity (manondro ny trace namespace). Azonao atao ny mieritreritra ny namespace trace toy ny hoe namespace namespace. Ny fototry ny espace name dia NodeList. Izany dia mifanitsy amin'ny kaontenera tantanana ao amin'ny kaody ns-3 lehibe. Ahitana ny nodes rehetra izay noforonina ao amin'ny script. Tahaka ny rafitra fichier afaka manana lahatahiry amin'ny fotony, NodeList afaka manana nodes maro isika. Noho izany, ny tsipika /NodeList/0 dia manondro ny node null ao amin'ny NodeList, izay matetika antsoina hoe "node 0". Ny node tsirairay dia manana lisitry ny fitaovana napetraka. Ity lisitra ity dia hita manaraka eo amin'ny namespace. Hitanao fa avy amin'ity hetsika trace ity DeviceList/0, izay ilay fitaovana null napetraka ao amin'ny node.

Substring manaraka, $ ns3 :: PointToPointNetDevice, milaza izay fitaovana eo amin'ny toerana aotra: ny lisitry ny fitaovana misy ny node zero. Tsarovy fa ny hetsika + hita ao amin'ny andalana 0 dia midika fa nisy singa iray nampidirina tao amin'ny filaharana fampitana ny fitaovana. Hita taratra amin'ny fizarana farany amin'ny "lalana" izany: TxQueue/Enqueue.

Ny ampahany sisa ao amin'ny dian dia tokony ho intuitive. Ny andalana 3-4 dia manondro fa ny fonosana dia voarakitra ao anaty protocol point-to-point. Ny andalana 5-7 dia mampiseho fa ny fonosana dia manana lohatenin'ny dikan-teny IP4 ary avy amin'ny adiresy IP 10.1.1.1 ary natao ho an'ny 10.1.1.2. Ny andalana 8-9 dia mampiseho fa ity fonosana ity dia manana lohatenin'ny UDP ary farany ny andalana 10 dia mampiseho fa ny entana dia ny 1024 bytes andrasana.

Ny andalana manaraka ao amin'ny fisie trace dia mampiseho fa ilay fonosana mitovy dia nosintonina avy amin'ny filaharana fandefasana amin'ny node iray ihany.

Ny andalana fahatelo ao amin'ny rakitra trace dia mampiseho fa ny fonosana dia noraisin'ny fitaovana tambajotra amin'ny mpampiantrano mpizara echo. Naveriko eto ambany ity hetsika ity.

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)

Mariho fa ny asa trace dia r ary ny fotoana simulation dia nitombo ho 2,25732 segondra. Raha nanaraka tsara ilay fampianarana ianao dia midika izany fa navelanao tamin'ny sandany mahazatra ny DataRate sy ny Rohy ny fitaovan'ny tambajotra. Ity fotoana ity dia tokony ho mahazatra, araka ny hitanao tamin'ny fizarana teo aloha.

Ny fidirana amin'ny anaran'ny anaran'ny loharano (andalana 2) dia novaina mba hanehoana fa avy amin'ny node 1 (/NodeList/1) ary ny fonosana dia noraisin'ny loharano (/MacRx). Tokony ho mora aminao ny manaraka ny fihetsehan'ny packet amin'ny alàlan'ny topologie amin'ny fijerena ireo soritra sisa tavela ao anaty rakitra.

5.3.2 Trace PCAP

Ny ns-3 Device Helpers dia azo ampiasaina amin'ny famoronana rakitra trace amin'ny endrika .pcap. fanafohezan-teny pcap (matetika voasoratra amin'ny litera kely) dia midika hoe fisamborana fonosana ary raha ny marina dia API iray izay ahitana ny famaritana ny endrika rakitra .pcap. Ny programa malaza indrindra afaka mamaky sy mampiseho ity endrika ity dia Wireshark (antsoina teo aloha Ethereal). Na izany aza, maro ireo mpanadihady trace trace izay mampiasa ity endrika fonosana ity. Mamporisika ny mpampiasa izahay mba hampiasa ireo fitaovana maro azo anadihadiana ny dian'ny pcap. Amin'ity lesona ity dia hifantoka amin'ny fijerena pcap traces amin'ny fampiasana tcpdump.

Ny fampandehanana ny pcap tracing dia atao amin'ny andalana iray amin'ny kaody.

pointToPoint.EnablePcapAll ("myfirst");

Apetaho ity andalana kaody ity aorian'ny code trace ASCII vao nampidirinay scratch/myfirst.cc. Marihina fa ny tady "myfirst" ihany no nandalovanay fa tsy "myfirst.pcap" na zavatra mitovitovy amin'izany. Izany dia satria ny mari-pamantarana dia prefix fa tsy anarana feno. Mandritra ny simulation, ny mpanampy dia hamorona fisie trace ho an'ny fitaovana tsirairay. Ny anaran'ny rakitra dia hamboarina amin'ny alàlan'ny prefix, laharan'ny node, laharan'ny fitaovana ary tovana ".pcap".

Ho an'ny script ohatra, dia hahita rakitra antsoina hoe "myfirst-0-0.pcap"Ary"myfirst-1-0.pcap", izay trace pcap ho an'ny node 0-fitaovana 0 sy ny node 1-fitaovana 0. Raha vao nampidirinao ny tsipika kaody mba ahafahana manao pcap tracing dia azonao atao ny mampandeha ny script amin'ny fomba mahazatra:

$ ./waf --run scratch/myfirst

Raha mijery ny lahatahiry ambony indrindra amin'ny fizaranao ianao dia tokony hahita rakitra telo: rakitra ASCII myfirst.tr, izay nianarantsika teo aloha, rakitra myfirst-0-0.pcap и myfirst-1-0.pcap - rakitra pcap vaovao vao noforoninay.

Mamaky ny vokatra miaraka amin'ny tcpdump

Amin'izao fotoana izao, ny fomba tsotra indrindra hijerena ny rakitra pcap dia ny fampiasana 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

Ao amin'ny fanariam-pako myfirst-0-0.pcap (fitaovana mpanjifa) azonao jerena ny fonosana echo alefa aorian'ny 2 segondra nanaovana simulation. Raha mijery ny fanariam-pako faharoa ianao (myfirst-1-0.pcap), ho hitanao fa voaray ny fonosana amin'ny 2,257324 segondra. Ho hitanao ao amin'ny fanariam-pako faharoa fa naverina tamin'ny 2.257324 segondra ilay fonosana, ary farany dia noraisin'ny mpanjifa indray ilay fonosana tamin'ny fanariam-pako voalohany tamin'ny 2.514648 segondra.

Famakiana Output miaraka amin'ny Wireshark

Raha tsy fantatrao Wireshark, misy tranonkala iray ahafahanao misintona programa sy antontan-taratasy: http://www.wireshark.org/. Wireshark dia GUI azo ampiasaina hanehoana ireo rakitra trace. Raha manana Wireshark ianao, dia azonao atao ny manokatra ny iray amin'ireo fisie trace ary mampiseho ny atiny toy ny hoe naka ny fonosana tamin'ny fampiasana packet sniffer ianao.

Source: www.habr.com

Add a comment