ns-3 network simulator qhia. Tshooj 5

ns-3 network simulator qhia. Tshooj 5
nqe 1,2
qib 3
qib 4

5 Kev teeb tsa
5.1 Siv lub log log
5.1.1 Logging txheej txheem cej luam
5.1.2 Pab kom nkag mus
5.1.3 Ntxiv kev nkag rau koj cov cai
5.2 Siv cov kab lus hais kom ua
5.2.1 Overriding default attribute values
5.2.2 Capturing koj tus kheej cov lus txib
5.3 Siv cov txheej txheem tracing
5.3.1 ASCII Kev Tshawb Fawb
Kev txheeb xyuas cov kab mob ASCII
5.3.2 PCAP Trace

Tshooj 5

hloov

5.1 Siv lub log log

Peb twb tau saib luv luv ntawm ns-3 logging module los ntawm kev saib tsab ntawv ib.cc. Hauv tshooj no, peb yuav saib ze dua ntawm kev siv tau rau kev kaw lus subsystem.

5.1.1 Logging txheej txheem cej luam

Ntau lub tshuab loj txhawb nqa qee yam ntawm cov lus kaw lus, thiab ns-3 tsis muaj qhov tshwj xeeb. Qee zaum, tsuas yog cov lus yuam kev raug sau rau "tus neeg ua haujlwm console" (uas feem ntau yog stderr ntawm Unix-based systems). Hauv lwm lub tshuab, cov lus ceeb toom yuav raug tso tawm thiab cov ntaub ntawv ntxaws ntxiv. Qee qhov xwm txheej, cov cuab yeej txiav cav yog siv los tawm cov lus debug uas tuaj yeem ua kom pom cov zis sai sai.

Lub subHRD siv nyob rau hauv ns-3 xav tias tag nrho cov theem ntawm cov ntaub ntawv cov ntsiab lus yog pab tau, thiab peb muab ib tug xaiv, txheej txheej mus kom ze rau cov lus kaw lus. Logging tuaj yeem raug kaw tag nrho, qhib rau ntawm ib qho kev sib txuas, lossis thoob ntiaj teb. Rau lub hom phiaj no, adjustable theem ntawm cov ntaub ntawv cov ntsiab lus yog siv. ns-3 logging module muab txoj hauv kev yooj yim kom tau txais cov ntaub ntawv tseem ceeb los ntawm koj qhov kev sim.

Koj yuav tsum nkag siab tias peb muab lub hom phiaj dav dav - tracing - rau kev rho tawm cov ntaub ntawv los ntawm koj cov qauv, uas yuav tsum yog qhov kev tso tawm zoo tshaj plaws rau kev simulations (kom paub ntau ntxiv ntawm peb qhov kev taug qab, saib tshooj 5.3). Kev sau npe yuav tsum yog txoj hauv kev nyiam kom tau txais cov ntaub ntawv debugging, ceeb toom, cov lus yuam kev, lossis kom xa cov lus sai sai los ntawm koj cov ntawv sau lossis cov qauv txhua lub sijhawm.

Tam sim no, lub kaw lus txhais xya qib (hom) ntawm cov lus kaw hauv kev nce qib ntawm cov ntaub ntawv cov ntsiab lus.

  • LOG_ERROR - sau cov lus yuam kev (txog macro: NS_LOG_ERROR);
  • LOG_WARN - Sau cov lus ceeb toom (txog macro: NS_LOG_WARN);
  • LOG_DEBUG - Log kuj tsis tshua muaj tshwj xeeb debug lus (txog macro: NS_LOG_DEBUG);
  • LOG_INFO - sau npe ntawm cov ntaub ntawv xov xwm hais txog kev ua tiav ntawm qhov kev zov me nyuam (txog macro: NS_LOG_INFO);
  • LOG_FUNCTION - Cov ntawv teev cov lus piav qhia txog txhua qhov haujlwm hu ua (ob qhov cuam tshuam nrog macros: NS_LOG_FUNCTION, siv rau kev ua tswv cuab, thiab NS_LOG_FUNCTION_NOARGS, siv rau kev ua haujlwm zoo li qub);
  • LOG_LOGIC - sau cov lus piav qhia txog cov ntsiab lus ntws hauv ib qho kev ua haujlwm (txog macro: NS_LOG_LOGIC);
  • LOG_ALL - Sau txhua yam uas tau hais los saum toj no (tsis muaj kev cuam tshuam macro).
    Rau txhua hom (LOG_TYPE) kuj tseem muaj LOG_LEVEL_TYPE uas, yog siv, tso cai rau txhua qib saum toj no kom nkag mus ntxiv rau nws tus kheej qib. (Raws li qhov tshwm sim, LOG_ERROR thiab LOG_LEVEL_ERROR, thiab LOG_ALL thiab LOG_LEVEL_ALL yog qhov ua haujlwm sib npaug.) Piv txwv li, kev ua kom LOG_INFO tsuas yog tso cai cov lus muab los ntawm NS_LOG_INFO macro, thaum ua kom LOG_LOG_LEVEL_INFO los ntawm WARN_LOGS kuj tseem muab cov lus thiab WARN NS_LOG_ERROR.

Peb kuj muab ib qho kev txiav txim siab tsis raug cai uas yog ib txwm pom, tsis hais txog qib kev txiav txim siab lossis cov kev xaiv xaiv.

  • NS_LOG_UNCOND - Unconditional logging ntawm cov lus sib txuas (tsis muaj feem cuam tshuam txog qib).

Txhua qib tuaj yeem nug tus kheej lossis sib sau ua ke. Logging tuaj yeem teeb tsa siv sh ib puag ncig hloov pauv NS_LOG lossis los ntawm kev kaw lub kaw lus hu ua haujlwm. Raws li tau pom ua ntej, lub kaw lus kaw muaj Doxygen cov ntaub ntawv thiab tam sim no yog lub sijhawm zoo los tshuaj xyuas nws yog tias koj tsis tau.

Tam sim no koj tau nyeem cov ntaub ntawv kom nthuav dav, cia peb siv qhov kev paub ntawd kom tau txais qee cov ntaub ntawv nthuav dav los ntawm cov ntawv piv txwv khawb/myfirst.ccuas koj tau muab tso ua ke lawm.

5.1.2 Pab kom nkag mus

Cia peb siv NS_LOG ib puag ncig hloov pauv kom khiav qee lub cav ntxiv, tab sis ua ntej, tsuas yog kom tau txais koj cov kabmob, khiav cov ntawv kawg raws li koj tau ua dhau los,

$ ./waf --run scratch/myfirst

Koj yuav tsum pom cov txiaj ntsig paub los ntawm thawj ns-3 qhov kev pab cuam piv txwv

$ 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

Nws hloov tawm tias cov "xa" thiab "tau txais" cov lus koj pom saum toj no yog cov lus nkag los ntawm UdpEchoClientApplication ΠΈ UdpEchoServerApplication. Piv txwv li, peb tuaj yeem nug cov neeg siv khoom kom luam tawm cov ntaub ntawv ntxiv los ntawm kev teeb tsa nws qib nkag los ntawm NS_LOG ib puag ncig hloov pauv.

Txij ntawm no mus, kuv yuav xav tias koj siv lub plhaub zoo li sh uas siv "VARIABLE=value" syntax. Yog tias koj siv lub plhaub zoo li csh, ces koj yuav tau hloov kuv cov piv txwv rau "setenv variable value" syntax xav tau los ntawm cov plhaub.

Tam sim no, UDP echo tus thov kev thov teb rau cov kab hauv qab no hauv khawb/myfirst.cc,

LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);

Nws pab kom nkag siab qib LOG_LEVEL_INFO. Thaum peb hla tus chij theem, peb yeej pab tau qib ntawd thiab txhua qib qis. Hauv qhov no, peb tau qhib NS_LOG_INFO, NS_LOG_DEBUG, NS_LOG_WARN thiab NS_LOG_ERROR. Peb tuaj yeem nce qib nkag thiab tau txais cov ntaub ntawv ntau ntxiv, tsis muaj cov ntawv hloov pauv thiab rov ua dua, los ntawm kev teeb tsa NS_LOG ib puag ncig hloov pauv raws li hauv qab no:

$ export NS_LOG=UdpEchoClientApplication=level_all

Yog li peb teem lub sh plhaub sib txawv NS_LOG rau tus nqi nram qab no,

UdpEchoClientApplication=level_all

Sab laug ntawm txoj haujlwm yog lub npe ntawm cov khoom siv uas peb xav kom teeb tsa, thiab sab xis yog tus chij peb xav thov rau nws. Hauv qhov no, peb yuav ua kom txhua qib kev debugging hauv daim ntawv thov. Yog tias koj khiav tsab ntawv nrog NS_LOG teeb tsa txoj hauv kev no, ns-3 logging system yuav lees txais cov kev hloov pauv thiab koj yuav tsum pom cov zis hauv qab no:

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

Cov ntaub ntawv debugging ntxiv muab los ntawm daim ntawv thov tam sim no nyob rau theem NS_LOG_FUNCTION. Nws qhia txhua qhov piv txwv ntawm kev hu xov tooj thaum lub sijhawm ua tiav tsab ntawv. Raws li txoj cai dav dav, hauv kev ua haujlwm nws yog qhov zoo dua los siv (yam tsawg kawg nkaus)NS_LOG_FUNCTION (this)... Siv NS_LOG_FUNCTION_NOARGS ()
tsuas yog nyob rau hauv static functions. Txawm li cas los xij, nco ntsoov tias ns-3 system tsis tas yuav txhawb nqa ib qho kev txiav txim siab ua haujlwm. Qhov kev txiav txim siab txog ntau npaum li cas cov ntaub ntawv raug kaw tseg rau tus kheej tus qauv tsim tawm. Nyob rau hauv cov ntaub ntawv ntawm echo daim ntaub ntawv, ib tug loj npaum li cas ntawm kev txiav tawm tso zis yog muaj.

Tam sim no koj tuaj yeem saib lub cav ntawm kev hu xov tooj uas tau tsim los ntawm daim ntawv thov. Yog tias koj saib ze, koj yuav pom ib txoj hnyuv loj ntawm kab UdpEchoClientApplication thiab lub npe ntawm txoj kev, qhov twg koj yuav xav pom C ++ tus neeg teb xov tooj (: :). Qhov no yog txhob txwm.

Qhov no tsis yog lub npe ntawm chav kawm, tab sis lub npe ntawm cov khoom siv log. Thaum muaj kev sib tw ntawm cov ntaub ntawv hauv chav kawm thiab chav kawm, nws feem ntau yog lub npe ntawm chav kawm, tab sis koj yuav tsum paub tias nws tsis yog lub npe ntawm chav kawm, thiab muaj ib txoj hnyuv loj es tsis yog ob txoj hnyuv loj. Qhov no yog ib txoj hauv kev los pab koj txiav txim siab cais lub npe taum los ntawm cov npe hauv chav kawm hauv txoj kev hloov maj mam.

Txawm li cas los xij, qee zaum nws tuaj yeem nyuaj rau kev txiav txim siab seb txoj kev twg yog qhov tsim cov lus teev tseg. Yog tias koj saib cov ntawv sau saum toj no, tej zaum koj yuav xav tsis thoob tias kab "Received 1024 bytes from 10.1.1.2" Koj tuaj yeem daws qhov teeb meem no los ntawm kev teeb tsa qib ua ntej_func mus rau NS_LOG ib puag ncig hloov pauv. Sim ua cov hauv qab no:

$ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func'

Nco ntsoov tias cov cim hais lus yog qhov tsim nyog vim tias txoj kab ntsug peb siv los sawv cev rau OR ua haujlwm kuj yog Unix yeeb nkab txuas. Tam sim no yog tias koj khiav tsab ntawv, koj yuav pom tias lub kaw lus kaw kom ntseeg tau tias txhua cov lus hauv ib lub cav muab ua ntej nrog lub npe tivthaiv.

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

Tam sim no koj tuaj yeem pom tias tag nrho cov lus los ntawm UDP echo tus thov kev thov raug txheeb xyuas li ntawd. Lus "Received 1024 bytes from 10.1.1.2" tam sim no tau qhia meej meej tias yog los ntawm daim ntawv thov echo. Cov lus tseem ceeb yuav tsum yog los ntawm UDP echo server daim ntawv thov. Peb tuaj yeem ua kom cov khoom tivthaiv no los ntawm kev nkag mus rau cov npe sib cais ntawm cov khoom hauv NS_LOG ib puag ncig sib txawv.

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

Ceeb Toom: Hauv cov ntawv piv txwv saum toj no, koj yuav tsum tshem tawm cov cim kab tshiab tom qab txoj hnyuv (:), nws yog siv los tsim cov ntaub ntawv. Tam sim no yog tias koj khiav tsab ntawv, koj yuav pom tag nrho cov ntawv teev lus los ntawm cov neeg siv khoom thiab cov ntawv thov kev pabcuam. Koj tuaj yeem pom tias qhov no tuaj yeem muaj txiaj ntsig zoo thaum kev 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()

Nws kuj yog qee zaum tseem ceeb kom tuaj yeem pom lub sijhawm simulation uas cov lus teev tseg tau tsim tawm. Koj tuaj yeem ua qhov no los ntawm kev ntxiv OR me ntsis prefix_time:

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

Ntxiv dua thiab, koj yuav tau tshem tawm cov cim tshiab saum toj no. Yog tias koj tam sim no khiav tsab ntawv koj yuav tsum pom cov zis hauv qab no:

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

Thov nco ntsoov tias tus constructor rau UdpEchoServer tau hu thaum simulation 0 vib nas this. Qhov no tshwm sim ua ntej lub simulation pib, tab sis lub sij hawm yog qhia li xoom vib nas this. Ib yam yog muaj tseeb rau cov lus 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()

Nco qab tias tsab ntawv khawb/first.cc pib lub ncha server daim ntawv thov ib thib ob ua ntej pib ntawm lub simulation. Tam sim no koj tuaj yeem pom tias txoj kev StartApplication tus neeg rau zaub mov yeej hu ua thawj thib ob. Koj tuaj yeem pom tias tus neeg siv lub suab nrov pib hauv qhov thib ob ntawm qhov simulation, raws li peb tau nug hauv tsab ntawv.

Tam sim no koj tuaj yeem ua raws li kev simulation kev ua tiav ntawm kev hu ScheduleTransmit hauv tus neeg siv uas hu rau HandleRead callback Xa hauv daim ntawv thov ncha server. Nco ntsoov tias lub sij hawm dhau mus los xa ib pob ntawv hla qhov txuas mus rau taw tes yog 3,69 milliseconds. Koj tuaj yeem pom tias tus neeg rau zaub mov ncho sau cov lus uas nws tau teb rau pob ntawv, thiab tom qab ntawd, tom qab ncua sijhawm, koj pom tias tus neeg siv ncho tau txais pob ntawv ncha hauv nws txoj kev HandleRead.

Hauv qhov simulation no, ntau yam tshwm sim yam uas koj tsis pom. Tab sis koj tuaj yeem taug qab tag nrho cov txheej txheem yooj yim heev los ntawm kev ua kom tag nrho cov khoom nkag hauv qhov system. Sim teeb tsa NS_LOG sib txawv rau tus nqi hauv qab no,

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

Lub hnub qub saum toj no yog ib qho cim cim rau kev nkag mus. Qhov no yuav suav nrog txhua qhov nkag hauv txhua qhov khoom siv hauv kev simulation. Kuv yuav tsis rov tsim cov ntawv tso tawm ntawm no (thaum lub sijhawm sau ntawv nws tsim 1265 kab ntawm cov zis rau ib pob ntawv ncha), tab sis koj tuaj yeem hloov cov ntaub ntawv no mus rau ib cov ntaub ntawv thiab saib nws hauv koj nyiam editor.

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

Kuv tus kheej siv qhov no tsis tshua muaj verbose version ntawm kev nkag thaum kuv muaj teeb meem thiab tsis muaj lub tswv yim qhov twg yam tsis raug. Kuv tuaj yeem ua raws li cov lej ua tiav yooj yim heev yam tsis muaj kev teeb tsa cov ntsiab lus thiab nkag mus los ntawm cov lej hauv qhov kev debugger. Kuv tuaj yeem hloov kho cov zis hauv kuv nyiam editor thiab nrhiav qhov kuv xav tau thiab pom qee yam tshwm sim uas kuv tsis tau xav txog. Thaum kuv muaj lub tswv yim dav dav ntawm qhov yuav ua li cas, kuv dhia mus rau hauv qhov debugger txhawm rau txhawm rau hauv qhov teeb meem. Hom kev tso zis no tuaj yeem pab tau tshwj xeeb tshaj yog thaum koj tsab ntawv ua ib yam dab tsi tsis tau xav txog. Yog hais tias koj tsuas yog siv lub debugger, koj yuav nco ib tug twist nkaus. Kev sau npe ua rau muaj qhov hloov pauv pom tau.

5.1.3 Ntxiv kev nkag rau koj cov cai

Koj tuaj yeem ntxiv cov kev nkag tshiab rau koj qhov simulations los ntawm kev hu mus rau lub cav tivthaiv los ntawm ntau lub macros. Cia peb ua nws hauv ib tsab ntawv myfirst.cc, uas peb muaj nyob rau hauv "huv" directory. Nco qab tias peb tau txhais ib qho kev nkag mus rau hauv qhov xwm txheej no:

NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

Koj paub tias koj tuaj yeem qhib kev nkag ntawm txhua cov lus los ntawm cov khoom siv no los ntawm kev teeb tsa NS_LOG ib puag ncig sib txawv ntawm ntau qib. Cia peb mus tom ntej thiab ntxiv qee qhov nkag rau hauv tsab ntawv. Lub macro siv los ntxiv cov ntaub ntawv qib lus rau lub cav yog NS_LOG_INFO. Cia peb ntxiv cov lus (ua ntej peb pib tsim cov nodes) uas qhia rau koj tias tsab ntawv nyob rau theem "Tsim Topology". Qhov no yog ua nyob rau hauv cov nram qab no code snippet,
Qhib khawb/myfirst.cc nyob rau hauv koj nyiam editor thiab ntxiv kab,
NS_LOG_INFO ("Creating Topology");
txoj cai ua ntej kab,

NodeContainer nodes;
nodes.Create (2);

Tam sim no sau tsab ntawv siv waf ua, thiab tshem tawm NS_LOG qhov sib txawv los lov tes taw kev nkag kwj peb tau qhib ua ntej:

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

Koj yuav tsis pom cov lus tshiab vim tias qhov cuam tshuam kev nkag mus (FirstScriptExample) tsis tau qhib. Txhawm rau pom koj cov lus koj yuav tsum tau ua kom muaj kev nkag mus FirstScriptExample nrog qib tsis qis dua NS_LOG_INFO. Yog tias koj tsuas yog xav pom qhov kev txiav txim siab tshwj xeeb no, koj tuaj yeem ua kom nws zoo li qhov no,

$ export NS_LOG=FirstScriptExample=info

Yog tias koj khiav tsab ntawv tam sim no, koj yuav pom cov lus tshiab "Tsim 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 Siv cov kab lus hais kom ua

5.2.1 Overriding default attribute values

Lwm txoj hauv kev los hloov tus cwj pwm ntawm ns-3 scripts yam tsis tau kho lossis lub tsev yog siv cov kab lus sib cav. Peb muab cov txheej txheem los txheeb xyuas cov kab lus sib cav thiab txiav txim siab qhov hloov pauv hauv zos thiab thoob ntiaj teb raws li cov txiaj ntsig.

Thawj kauj ruam hauv kev siv cov kab lus hais lus sib cav yog tshaj tawm cov kab lus hais kom ua. Qhov no yog qhov yooj yim heev los ua (hauv koj qhov program tseem ceeb), xws li hauv cov cai hauv qab no,

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

Qhov no yooj yim ob-kab snippet yog tiag tiag pab tau heev nyob rau hauv nws tus kheej txoj cai. Nws qhib qhov rooj rau ns-3 ntiaj teb no sib txawv thiab tus cwj pwm system. Cia peb ntxiv ob kab ntawm cov lej rau qhov pib ntawm cov ntawv tseem ceeb khawb/myfirst.cc. Tsiv mus, peb sau tsab ntawv thiab khiav nws, thaum khiav peb thov kev pab raws li hauv qab no,

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

Cov lus txib no yuav nug Waf khiav tsab ntawv khawb/myfirst thiab hla nws ib qho kev sib cav kab lus β€”PrintHelp. Cov cim hais lus yuav tsum tau qhia tias qhov program twg qhov kev sib cav yog npaj rau. Tus hais kom ua kab parser yuav ntes qhov kev sib cav β€”PrintHelp thiab yuav muab cov lus teb,

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.

Tam sim no cia saib qhov kev xaiv -PrintAttributes. Peb twb tau hais txog ns-3 attribute system thaum kawm thawj.cc tsab ntawv. Peb tau pom cov kab hauv qab no ntawm code,

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

thiab lawv hais tias DataRate yeej yog tus cwj pwm PointToPointNetDevice. Cia peb siv cov kab lus hais kom sib cav parser saib cov cwj pwm PointToPointNetDevice. Daim ntawv teev kev pab hais tias peb yuav tsum muab dab tsi TypeId. Qhov no yog lub npe ntawm chav kawm uas tus cwj pwm ntawm kev txaus siab koom nrog. Hauv peb qhov xwm txheej nws yuav yog ns3::PointToPointNetDevice. Cia peb mus tom ntej, nkag mus,

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

Lub kaw lus yuav luam tag nrho cov cwj pwm ntawm hom khoom siv network no. Koj yuav pom tias ntawm cov cwj pwm hauv cov npe yog,

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

Qhov no yog tus nqi qub uas yuav siv los ntawm lub kaw lus thaum tsim cov khoom PointToPointNetDevice. Peb yuav override lub neej ntawd tus nqi siv tus parameter Tus Cwj Pwm Π² PointToPointHelper siab dua. Cia peb siv lub neej ntawd qhov tseem ceeb rau point-to-point devices thiab channels. Ua li no, peb yuav rho tawm hu SetDeviceAttribute ΠΈ SetChannelAttribute los ntawm myfirst.cc, uas peb muaj nyob rau hauv ib tug huv directory.

Koj tsab ntawv yuav tsum tam sim no tsuas yog tshaj tawm PointToPointHelper thiab tsis txhob ua ib qho kev teeb tsa ua haujlwm raws li qhia hauv qhov piv txwv hauv qab no,

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

Mus tom ntej thiab tsim ib tsab ntawv tshiab nrog Waf (./faw) thiab cia peb rov qab mus thiab suav qee qhov nkag los ntawm UDP ncha server daim ntawv thov thiab suav nrog lub sijhawm ua ntej.

$ export 'NS_LOG=UdpEchoServerApplication=level_all|prefix_time'

Yog tias koj khiav tsab ntawv koj yuav tsum pom cov zis hauv qab no:

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

Nco qab tias lub sijhawm kawg peb tau saib lub sijhawm simulation, lub sijhawm lub pob ntawv tau txais los ntawm lub ncha server, nws yog 2,00369 vib nas this.

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

Tam sim no nws tau txais pob ntawv hauv 2.25732 vib nas this. Qhov no yog vim hais tias peb tsuas yog rov pib dua PointToPointNetDevice cov ntaub ntawv tus nqi los ntawm tsib megabits ib ob mus rau lub neej ntawd tus nqi, uas yog 32768 khoom ib ob. Yog tias peb yuav hloov tus DataRate tshiab siv cov kab hais kom ua, peb tuaj yeem ua kom peb qhov kev sim ua kom nrawm dua. Peb yuav ua qhov no raws li hauv qab no, raws li cov qauv qhia los ntawm lub ntsiab lus pab:

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

Qhov no yuav rov qab DataRate tus cwj pwm rau nws tus nqi pib ntawm tsib megabits ib ob. Koj puas xav tsis thoob los ntawm qhov tshwm sim? Nws hloov tawm tias thiaj li yuav rov qab tus cwj pwm qub ntawm tsab ntawv, peb kuj yuav tsum tau teeb tsa lub channel ncua kom phim qhov ceev ntawm lub teeb. Peb tuaj yeem nug cov kab lus hais kom luam tawm cov yeeb yam channel, ib yam li peb tau ua rau lub network ntaus ntawv:

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

Peb yuav pom tias qhov ncua sij hawm channel yog teem raws li hauv qab no:

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

Peb tuaj yeem tom qab ntawd, los ntawm cov kab hais kom ua, teeb tsa ob qho tib si ntawm cov txiaj ntsig no.

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

Nyob rau hauv rooj plaub no peb rov qab lub sij hawm peb muaj thaum peb qhia meej txog qhov DataRate thiab Delay nyob rau hauv tsab ntawv:

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

Nco ntsoov tias pob ntawv tau txais los ntawm lub server dua tom qab 2,00369 vib nas this. Peb tuaj yeem teeb tsa ib qho ntawm cov cwj pwm siv hauv tsab ntawv no. Tshwj xeeb, peb tuaj yeem teeb tsa MaxPackets tus cwj pwm rau tsis yog ib qho txiaj ntsig UdpEchoClient.

Koj yuav siv nws li cas? Muab nws sim. Nco ntsoov tias koj yuav tsum tawm tswv yim tawm qhov chaw uas peb override lub neej ntawd tus cwj pwm tus nqi thiab qhia meej meej MaxPackets hauv tsab ntawv. Tom qab ntawd koj yuav tsum rov tsim cov ntawv. Koj tuaj yeem siv cov kab hais kom ua kom tau txais kev pabcuam syntax rau kev teeb tsa tus nqi qub qub. Thaum koj nkag siab qhov no, koj tuaj yeem tswj cov naj npawb ntawm cov pob uas tshwm rau ntawm kab hais kom ua. Txij li thaum peb yog cov neeg studious, peb cov kab hais kom ua yuav tsum zoo li no:

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

Cov lus nug ntuj uas tshwm sim ntawm qhov no yog yuav ua li cas thiaj paub txog qhov muaj nyob ntawm tag nrho cov cwj pwm no. Ib zaug ntxiv, cov kab hais kom ua kab muaj kev pab cuam rau qhov teeb meem no. Yog tias peb nug cov kab hais kom pab, peb yuav tsum pom:

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

Yog tias koj xaiv qhov kev sib cav "PrintGroups" koj yuav tsum pom cov npe ntawm txhua pawg sau npe TypeId. Cov npe pab pawg tau zoo ib yam nrog cov npe ntawm cov modules hauv cov ntawv teev npe (txawm tias muaj peev txheej). Kev luam tawm tag nrho cov ntaub ntawv ib zaug yuav voluminous heev, yog li muaj cov lim dej ntxiv los luam tawm cov ntaub ntawv los ntawm pab pawg. Yog li, rov tsom mus rau qhov point-to-point module:

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

Ntawm no koj tuaj yeem pom muaj npe TypeId rau kev saib xyuas tus cwj pwm, piv txwv li hauv
--PrintAttributes = ns3 :: PointToPointChannelraws li qhia saum toj no.

Lwm txoj hauv kev los kawm txog cov cwj pwm yog los ntawm Doxygen ns-3. Muaj ib nplooj ntawv uas teev tag nrho cov cwj pwm sau npe hauv lub simulator.

5.2.2 Capturing koj tus kheej cov lus txib

Koj tuaj yeem ntxiv koj tus kheej hooks ntawm kab hais kom ua. Qhov no yog ua tau yooj yim heev siv cov kab hais kom ua kab parser txoj kev AddValue.
Cia peb siv qhov tshwj xeeb no los qhia cov naj npawb ntawm cov pob khoom kom pom nyob rau hauv txoj kev sib txawv kiag li. Cia peb ntxiv ib qho kev sib txawv hauv zos hu ua nPackets rau hauv kev ua haujlwm ntsiab. Peb mam li muab tso rau ib qho kom phim peb tus cwj pwm yav dhau los. Txhawm rau tso cai rau kab hais kom ua parser hloov tus nqi no, peb yuav tsum ntes tus nqi no hauv parser. Peb ua qhov no los ntawm kev ntxiv hu AddValue. Mus thiab hloov tsab ntawv khawb/myfirst.cc yog li pib nrog cov cai hauv qab no,

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

Scroll down mus rau lub ntsiab lus hauv tsab ntawv uas peb teeb tsa MaxPackets tus cwj pwm thiab hloov nws kom nws tau teeb tsa rau nPackets hloov pauv tsis tu ncua 1, raws li qhia hauv qab no.

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

Tam sim no yog tias koj khiav cov ntawv thiab muab cov lus sib cav -PrintHelp, koj yuav tsum pom cov neeg siv cov lus sib cav tshiab. teev nyob rau ntawm qhov kev pab cuam. Nkag mus,

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

Yog tias koj xav hloov tus naj npawb ntawm cov pob ntawv xa mus, koj tuaj yeem ua tau los ntawm kev teeb tsa cov kab lus sib cav - -nPackets.

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

Tam sim no koj yuav tsum tam sim no pom

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

Tam sim no koj tau xa ob pob ntawv. Yooj yim heev, puas yog?
Koj tuaj yeem pom tias raws li tus neeg siv ns-3, koj tuaj yeem siv cov kab lus hais kom sib cav los tswj hwm cov txiaj ntsig thoob ntiaj teb thiab cov cwj pwm. Yog tias koj yog tus qauv sau ntawv, koj tuaj yeem ntxiv cov yam ntxwv tshiab rau koj cov khoom thiab lawv yuav cia li muaj rau kev teeb tsa los ntawm koj cov neeg siv los ntawm kab hais kom ua. Yog tias koj yog tus sau tsab ntawv, koj tuaj yeem ntxiv cov hloov pauv tshiab rau koj cov ntawv sau thiab txuas txuas mus rau hauv koj cov kab hais kom ua.

5.3 Siv cov txheej txheem tracing

Tag nrho cov ntsiab lus ntawm kev ua qauv yog los tsim cov khoom tsim tawm rau kev kawm ntxiv, thiab ns-3 kab ke system yog lub ntsiab mechanism rau qhov no. Txij li thaum ns-3 yog C ++ qhov kev pab cuam, tus qauv txhais tau tias tsim cov zis tawm los ntawm C ++ program tuaj yeem siv:

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

Koj tuaj yeem siv lub log log los ntxiv cov qauv me me rau koj qhov kev daws teeb meem. Muaj ntau yam teeb meem paub los ntawm txoj hauv kev no, thiab yog li ntawd peb tau muab cov xwm txheej dav dav tracing subsystem los daws cov teeb meem no.

Lub hom phiaj tseem ceeb ntawm ns-3 tracing system yog:

  • Rau cov haujlwm yooj yim, cov txheej txheem tracing yuav tsum tso cai rau tus neeg siv los tsim cov txheej txheem taug qab rau cov chaw nrov thiab xaiv cov khoom uas tsim cov kab;

  • Cov neeg siv nruab nrab yuav tsum muaj peev xwm txuas ntxiv qhov kev taug qab los hloov cov qauv tsim tawm los yog ntxig cov kab tshiab, tsis tas yuav hloov pauv cov tub ntxhais simulator;

  • Cov neeg siv qib siab tuaj yeem hloov kho lub simulator core ntxiv cov kab tshiab thiab cov dab dej. ns-3 tracing system yog tsim los ntawm cov hauv paus ntsiab lus ntawm kev ywj pheej taug qab qhov chaw thiab cov neeg txais, nrog rau kev sib koom ua ke rau kev sib txuas rau cov neeg siv khoom.

ns-3 tracing system yog tsim los ntawm cov hauv paus ntsiab lus ntawm kev ywj pheej tracing qhov chaw thiab cov neeg txais, nrog rau kev sib koom ua ke rau kev sib txuas cov chaw rau cov neeg txais. Trace qhov chaw yog cov khoom uas tuaj yeem teeb liab cov xwm txheej tshwm sim hauv simulation thiab muab kev nkag mus rau cov ntaub ntawv hauv qab ntawm kev txaus siab. Piv txwv li, ib qho kev taug qab tuaj yeem qhia tau tias thaum twg lub network ntaus ntawv tau txais ib pob ntawv thiab ua kom cov ntsiab lus ntawm pob ntawv muaj rau cov neeg txaus siab nrhiav.

Cov peev txheej ntawm lawv tus kheej tsis muaj txiaj ntsig tshwj tsis yog tias lawv "coupled" nrog rau lwm qhov ntawm cov cai uas ua tau ib yam dab tsi pab tau nrog cov ntaub ntawv muab los ntawm lub dab dej. Tracers yog cov neeg siv khoom ntawm cov xwm txheej thiab cov ntaub ntawv muab los ntawm qhov chaw taug qab. Piv txwv li, koj tuaj yeem tsim cov kab dab dej uas yuav (thaum txuas nrog cov kab hauv qab ntawm qhov piv txwv yav dhau los) luam tawm qhov kev txaus siab hauv pob ntawv tau txais.

Lub laj thawj rau qhov kev sib cais meej no yog tso cai rau cov neeg siv los txuas cov dab dej tshiab rau cov peev txheej uas twb muaj lawm yam tsis tas yuav hloov kho thiab rov ua dua lub simulator core. Yog li hauv qhov piv txwv saum toj no, tus neeg siv tuaj yeem txhais tau tus neeg taug qab tshiab hauv lawv cov ntawv thiab txuas mus rau qhov chaw uas twb muaj lawm uas tau teev tseg hauv simulation core tsuas yog kho cov neeg siv tsab ntawv.

Hauv qhov kev qhia no, peb yuav dhau los ntawm qee qhov tau hais tseg ua ntej thiab dab dej thiab qhia seb lawv tuaj yeem teeb tsa li cas nrog qhov tsawg kawg ntawm kev siv zog ntawm tus neeg siv. Saib ns-3 Phau Ntawv Qhia lossis tshooj yuav ua li cas rau cov ntaub ntawv ntawm kev txhim kho kab mob siab heev, suav nrog kev nthuav dav cov kab cim npe thiab tsim cov kab ke tshiab.

5.3.1 ASCII Kev Tshawb Fawb

ns-3 muab kev pabcuam pabcuam uas muab cov txheej txheem taug qab qis los pab koj nrog cov ntsiab lus thaum teeb tsa cov pob ntawv yooj yim. Yog tias koj qhib qhov no, koj yuav pom cov zis hauv ASCII cov ntaub ntawv. Rau cov neeg paub txog ns-2 tso zis, hom kab no zoo ib yam li tawm. tr, uas yog generated los ntawm ntau scripts.

Cia peb nqis mus rau kev lag luam thiab ntxiv qee qhov ASCII tracing cov txiaj ntsig rau peb cov ntawv kos / myfirst.cc. Txoj cai ua ntej hu Simulator :: Run (), ntxiv cov kab hauv qab no ntawm code:
AsciiTraceHelper ascii;

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

Zoo li ntau lwm yam lus ns-3, cov cai no siv cov khoom siv los tsim cov kab ASCII. Cov kab thib ob muaj ob txoj kev hu ua nested. "Inside" txoj kev CreateFileStream() siv cov khoom siv tsis qhia npe los tsim cov ntaub ntawv kwj khoom ntawm pawg (tsis muaj lub npe khoom) thiab dhau mus rau txoj kev hu ua. Peb yuav nkag mus tob rau hauv qhov no yav tom ntej, tab sis txhua yam koj yuav tsum paub ntawm lub sijhawm no yog tias koj tab tom tsim cov khoom uas sawv cev rau cov ntaub ntawv hu ua myfirst.tr thiab hloov mus rau ns-3. Peb tso siab rau ns-3 los saib xyuas cov khoom tsim rau nws lub neej tag nrho, thaum lub sijhawm nws daws cov teeb meem tshwm sim los ntawm me ntsis-paub (kev mob siab rau) kev txwv cuam tshuam nrog C ++ kwj khoom luam theej tsim.

Hu rau sab nraud EnableAsciiAll() Qhia rau tus neeg pab hais tias koj xav kom suav nrog ASCII tracing hauv koj qhov kev sim rau txhua qhov kev sib txuas ntawm cov cuab yeej taw tes thiab qhov koj xav tau (tshwj xeeb) cov neeg txais kab ntawv los sau cov ntaub ntawv kev txav mus los hauv ASCII hom.

Rau cov neeg paub txog ns-2, cov xwm txheej tau taug qab yog sib npaug rau cov cim qhia paub uas teev cov xwm txheej "+", "-", "d" thiab "r".
Tam sim no koj tuaj yeem tsim tsab ntawv thiab khiav nws los ntawm kab hais kom ua:

$ ./waf --run scratch/myfirst

Zoo li ntau zaus ua ntej, koj yuav pom ntau cov lus los ntawm Waf, thiab tom qab ntawd "'tsim' tiav tiav" nrog qee cov lus los ntawm kev khiav haujlwm.

Thaum khiav, qhov kev pab cuam yuav tsim ib cov ntaub ntawv npe myfirst.tr. Vim qhov xwm txheej ntawm kev ua haujlwm Waf, los ntawm lub neej ntawd cov ntaub ntawv yog tsim tsis nyob rau hauv lub zos directory, tab sis nyob rau hauv lub sab saum toj-theem directory ntawm lub repository. Yog tias koj xav hloov txoj hauv kev uas tau txais kev cawmdim, ces koj tuaj yeem siv Waf parameter los qhia nws. --cwd. Peb tsis tau ua qhov no, yog li saib cov ntaub ntawv ASCII kab myfirst.tr hauv koj tus kws kho mob uas koj nyiam, peb yuav tsum tau mus rau cov ntawv teev npe saum toj kawg nkaus ntawm peb lub chaw cia khoom.

Kev txheeb xyuas cov kab mob ASCII

Muaj ntau cov ntaub ntawv muaj nyob rau hauv daim ntawv tuab tuab, tab sis thawj qhov koj yuav tsum tau ceeb toom yog tias cov ntaub ntawv muaj cov kab ntawm tus kheej. Qhov no yuav ua kom pom tseeb yog tias koj nthuav lub qhov rais saib dav dua.

Txhua kab hauv cov ntaub ntawv sib raug rau ib qho kev tshwm sim. Hauv qhov no, peb taug qab cov xwm txheej hauv cov kab sib kis tam sim no nyob rau hauv txhua qhov point-to-point network ntaus ntawv hauv simulation. Cov kab sib kis yog cov kab uas txhua pob ntawv yuav tsum dhau mus rau qhov txuas mus rau taw tes. Nco ntsoov tias txhua kab hauv kab ntawv pib nrog ib tus cim (thiab muaj qhov chaw tom qab nws). Lub cim no yuav muaj lub ntsiab lus hauv qab no:

+: kev ua haujlwm queuing tshwm sim ntawm cov khoom kab;
-: ib qho kev ua haujlwm retrieval tshwm sim hauv cov khoom kab;
d: pob ntawv poob, feem ntau yog vim cov kab puv;
r: Cov pob ntawv tau txais los ntawm lub network ntaus ntawv.

Cia peb ua tib zoo saib thawj kab hauv kab ntawv kab. Kuv yuav rhuav nws mus rau hauv qhov chaw (nrog indentations rau clarity) thiab kab zauv ntawm sab laug:

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)

Thawj ntu ntawm qhov kev tshwm sim txuas ntxiv (kab 0) yog kev ua haujlwm. Peb muaj lub cim + ntawm no, uas sib haum rau kev ua haujlwm ntawm queuing rau kev sib kis. Ntu thib ob (kab 1) yog lub sijhawm simulation, qhia hauv vib nas this. Tej zaum koj yuav nco ntsoov qhov peb nug UdpEchoClientApplication pib xa pob ntawv hauv ob vib nas this. Ntawm no peb pom kev lees paub tias qhov no tshwm sim tiag tiag.

Tshooj tom ntej ntawm kab piv txwv (los ntawm kab 2) qhia tau hais tias cov kab mob twg tau tsim qhov xwm txheej no (qhia txog lub npe qhov chaw taug qab). Koj tuaj yeem xav txog cov kab npe npe ntau npaum li koj xav tau lub npe filesystem. Lub hauv paus ntawm lub namespace yog NodeList. Qhov no sib raug rau lub thawv tswj hauv lub ntsiab ns-3 code. Nws muaj tag nrho cov nodes uas tsim nyob rau hauv tsab ntawv. Ib yam li cov ntaub ntawv kaw lus tuaj yeem muaj cov npe ntawm nws cov hauv paus, NodeList peb tuaj yeem muaj ntau cov nodes. Yog li cov kab / NodeList / 0 hais txog qhov tsis muaj nyob hauv NodeList, uas peb feem ntau xav tias yog "node 0". Txhua lub node muaj cov npe ntawm cov khoom siv uas tau teeb tsa. Daim ntawv teev npe no nyob tom ntej hauv lub npe. Koj tuaj yeem pom tias qhov kev tshwm sim kab no los ntawm DeviceList/0, uas yog cov khoom siv null ntsia hauv qhov node.

Ntxiv substring, $ ns3 :: PointToPointNetDevice, qhia cov cuab yeej twg nyob ntawm txoj hauj lwm xoom: cov npe ntaus ntawv ntawm node xoom. Nco qab tias qhov + kev ua haujlwm pom nyob rau hauv kab 0 txhais tau hais tias ib qho khoom tau ntxiv rau cov khoom xa mus. Qhov no tau tshwm sim hauv ntu kawg ntawm "khiav txoj kev": TxQueue/Enqueue.

Cov seem seem nyob rau hauv txoj kab yuav tsum yog intuitive. Kab 3-4 qhia tias lub pob ntawv yog encapsulated nyob rau hauv ib tug point-to-point raws tu qauv. Kab 5-7 qhia tau hais tias lub pob ntawv muaj IP4 version header thiab keeb kwm ntawm tus IP chaw nyob 10.1.1.1 thiab yog npaj rau 10.1.1.2. Kab 8-9 qhia tias pob ntawv no muaj UDP header thiab thaum kawg kab 10 qhia tau hais tias lub payload yog qhov xav tau 1024 bytes.

Cov kab tom ntej no hauv cov ntaub ntawv taug qab qhia tau tias tib lub pob ntawv raug rub los ntawm cov kab sib kis ntawm tib lub node.

Cov kab thib peb hauv cov ntaub ntawv taug qab qhia tau hais tias cov pob ntawv tau txais los ntawm lub network ntaus ntawv ntawm lub ncha server host. Kuv tau rov tsim dua qhov xwm txheej hauv qab no.

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)

Nco ntsoov tias txoj haujlwm taug qab yog tam sim no r thiab lub sijhawm simulation tau nce mus rau 2,25732 vib nas this. Yog tias koj ua raws li cov lus qhia ua tib zoo, qhov no txhais tau hais tias koj tawm ntawm cov khoom siv network 'DataRate thiab Txuas Ncua sijhawm ntawm lawv qhov tseem ceeb. Qhov kev nruj no yuav tsum paub, raws li koj tau pom hauv ntu dhau los.

Cov kab hauv qab lub npe nkag nkag (kab 2) tau raug hloov kho kom pom tias qhov xwm txheej no tshwm sim los ntawm node 1 (/NodeList/1) thiab pob ntawv tau txais los ntawm qhov chaw taug qab (/MacRx). Nws yuav tsum yooj yim haum rau koj ua raws cov pob ntawv txav los ntawm cov topology los ntawm saib cov kab nyob hauv cov ntaub ntawv.

5.3.2 PCAP Trace

Cov ns-3 Device Helpers tuaj yeem siv los tsim cov ntaub ntawv kab hauv .pcap hom. Lub ntsiab lus pcap ua (feem ntau sau ua ntawv me) sawv cev rau pob ntawv ntes thiab yog qhov tseeb API uas suav nrog kev txhais cov hom ntawv .pcap. Qhov kev pabcuam nrov tshaj plaws uas tuaj yeem nyeem thiab tso tawm hom ntawv no yog Wireshark (yav dhau los hu ua Ethereal). Txawm li cas los xij, muaj ntau cov neeg taug qab taug qab uas siv cov ntawv no. Peb txhawb kom cov neeg siv siv ntau yam cuab yeej muaj los txheeb xyuas cov kab pcap. Hauv no nyeem peb yuav tsom mus saib pcap kab siv tcp pom.

Enabling pcap tracing yog ua tiav nrog ib kab ntawm cov lej.

pointToPoint.EnablePcapAll ("myfirst");

Muab cov kab no ntawm cov lej tom qab ASCII kab cim peb nyuam qhuav ntxiv rau khawb/myfirst.cc. Nco ntsoov tias peb tsuas yog dhau txoj hlua "myfirst", tsis yog "myfirst.pcap" lossis lwm yam zoo sib xws. Qhov no yog vim qhov parameter yog prefix, tsis yog tag nrho filename. Thaum lub sij hawm simulation, tus pab yuav ua tau ib cov ntaub ntawv taug qab rau txhua qhov point-to-point device. Cov npe ntaub ntawv yuav raug tsim los siv cov npe ua ntej, ntawm tus lej, tus lej ntaus ntawv, thiab cov lus tom qab ".pcap ua".

Rau peb tsab ntawv piv txwv, peb yuav xaus pom cov ntaub ntawv npe "myfirst-0-0.pcap"Thiab"myfirst-1-0.pcap", uas yog cov cim pcap rau node 0-device 0 thiab node 1-device 0 feem. Thaum koj tau ntxiv cov kab ntawm txoj cai los pab pcap tracing, koj tuaj yeem khiav cov ntawv nyob rau hauv txoj kev ib txwm:

$ ./waf --run scratch/myfirst

Yog tias koj saib hauv cov npe saum toj kawg nkaus ntawm koj qhov kev faib tawm, koj yuav tsum pom peb cov ntaub ntawv: cov ntaub ntawv ASCII kab myfirst.tr, uas peb tau kawm yav dhau los, cov ntaub ntawv myfirst-0-0.pcap ΠΈ myfirst-1-0.pcap - cov ntaub ntawv pcap tshiab uas peb nyuam qhuav tsim.

Nyeem ntawv tso zis nrog tcpdump

Txog tam sim no, txoj hauv kev yooj yim tshaj plaws los saib cov ntaub ntawv pcap yog siv 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

Nyob rau hauv lub pov tseg myfirst-0-0.pcap (tus neeg siv khoom) koj tuaj yeem pom cov pob ntawv ncha xa tom qab 2 vib nas this ntawm kev sim. Yog tias koj saib ntawm qhov pov tseg thib ob (myfirst-1-0.pcap), koj yuav pom tias pob ntawv tau txais ntawm 2,257324 vib nas this. Koj yuav pom nyob rau hauv qhov chaw pov tseg thib ob tias pob ntawv xa rov qab ntawm 2.257324 vib nas this, thiab thaum kawg tias pob ntawv tau txais rov qab los ntawm tus neeg siv khoom hauv thawj pob tseg ntawm 2.514648 vib nas this.

Nyeem ntawv tso zis nrog Wireshark

Yog koj tsis paub Wireshark, muaj ib lub vev xaib uas koj tuaj yeem rub tawm cov haujlwm thiab cov ntaub ntawv: http://www.wireshark.org/. Wireshark yog GUI uas tuaj yeem siv los tso saib cov ntaub ntawv taug qab no. Yog tias koj muaj Wireshark, koj tuaj yeem qhib ib qho ntawm cov ntaub ntawv taug qab thiab tso saib cov ntsiab lus zoo li koj tau ntes cov pob ntawv siv lub pob ntawv sniffer.

Tau qhov twg los: www.hab.com

Ntxiv ib saib