ns-3 rezo similatè leson patikilye. Chapit 5

ns-3 rezo similatè leson patikilye. Chapit 5
chapit 1,2
chapit 3
chapit 4

5 Anviwònman
5.1 Sèvi ak modil anrejistreman an
5.1.1 Apèsi sou anrejistreman
5.1.2 Pèmèt antre
5.1.3 Ajoute login nan kòd ou a
5.2 Sèvi ak agiman liy kòmand
5.2.1 Anile valè atribi default yo
5.2.2 Kaptire pwòp kòmandman ou yo
5.3 Sèvi ak sistèm trase a
5.3.1 Trase ASCII
Analize tras ASCII
5.3.2 Trace PCAP

Chapter 5

ajisteman

5.1 Sèvi ak modil anrejistreman an

Nou te deja gade yon ti tan nan modil la ns-3 pa gade nan script la premye.cc. Nan chapit sa a, nou pral pran yon gade pi pre sou itilizasyon posib pou subsistèm anrejistreman an.

5.1.1 Apèsi sou anrejistreman

Anpil gwo sistèm sipòte kèk kalite etablisman antre mesaj, ak ns-3 pa gen okenn eksepsyon. Nan kèk ka, se sèlman mesaj erè yo ekri nan "konsole operatè a" (ki se nòmalman stderr sou sistèm ki baze sou Unix). Sou lòt sistèm yo, mesaj avètisman yo ka parèt ak enfòmasyon ki pi detaye. Nan kèk ka, zouti antre yo itilize pou pwodiksyon mesaj debogaj ki ka byen vit flou pwodiksyon an.

SubHRD ki itilize nan ns-3 sipoze ke tout nivo sa yo nan kontni enfòmasyon yo itil, epi nou bay yon apwòch selektif, kouch nan anrejistreman mesaj. Logging ka enfim nèt, aktive sou yon baz pa-konpozan, oswa globalman. Pou rezon sa a, yo itilize nivo reglabl nan kontni enfòmasyon. Modil anrejistreman ns-3 bay yon fason relativman senp pou jwenn enfòmasyon itil nan simulation ou a.

Ou ta dwe konprann ke nou bay yon mekanis objektif jeneral - trase - pou ekstrè done ki soti nan modèl ou yo, ki ta dwe pwodiksyon an pi pito pou simulation (pou plis enfòmasyon sou sistèm trase nou an, gade seksyon leson patikilye 5.3). Logging ta dwe metòd pi pito pou jwenn enfòmasyon debogaj, avètisman, mesaj erè, oswa pou byen vit soti mesaj soti nan scripts ou oswa modèl nenpòt ki lè.

Kounye a, sistèm nan defini sèt nivo (kalite) nan mesaj boutèy demi lit nan ogmante lòd nan kontni enfòmasyon.

  • LOG_ERROR - mesaj erè anrejistreman (macro ki gen rapò: NS_LOG_ERROR);
  • LOG_WARN - Anons mesaj avètisman (macro ki gen rapò: NS_LOG_WARN);
  • LOG_DEBUG - Anrejistre mesaj debug espesyal relativman ra (macro ki gen rapò: NS_LOG_DEBUG);
  • LOG_INFO - anrejistreman mesaj enfòmasyon sou pwogrè pwogram nan (macro ki gen rapò: NS_LOG_INFO);
  • LOG_FUNCTION - Anrejistre mesaj ki dekri chak fonksyon yo rele (de makro ki gen rapò: NS_LOG_FUNCTION, ki itilize pou fonksyon manm, ak NS_LOG_FUNCTION_NOARGS, ki itilize pou fonksyon estatik);
  • LOG_LOGIC - mesaj anrejistreman ki dekri koule ki lojik nan yon fonksyon (macro ki gen rapò: NS_LOG_LOGIC);
  • LOG_ALL - Log tout bagay mansyone pi wo a (pa gen makro ki asosye).
    Pou chak kalite (LOG_TYPE) genyen tou yon LOG_LEVEL_TYPE ki, si yo itilize, pèmèt tout nivo ki anlè yo dwe konekte anplis pwòp nivo pa yo. (Kòm yon konsekans, LOG_ERROR ak LOG_LEVEL_ERROR, ak LOG_ALL ak LOG_LEVEL_ALL yo fonksyonèl ekivalan.) Pa egzanp, aktive LOG_INFO pral pèmèt sèlman mesaj yo bay nan makro NS_LOG_INFO a, pandan y ap aktive LOG_LEVEL_INFO pral gen ladan tou mesaj yo bay nan makro NS_LOG_NS_W_LOGARN, ak ERROR_DE_W_LOG.

Nou menm tou nou bay yon makro anrejistreman san kondisyon ki toujou parèt, kèlkeswa nivo anrejistreman an oswa eleman seleksyon an.

  • NS_LOG_UNCOND - Enkondisyonèl anrejistreman mesaj ki asosye a (pa gen okenn nivo anrejistreman ki asosye).

Chak nivo ka mande endividyèlman oswa kimilatif. Ou ka konfigirasyon anrejistreman lè l sèvi avèk varyab anviwònman sh NS_LOG oswa lè w konekte yon apèl fonksyon sistèm. Jan yo montre pi bonè, sistèm anrejistreman an gen dokiman Doxygen e kounye a se yon bon moman pou revize li si ou pa deja.

Kounye a ke ou te li dokiman an ak anpil detay, ann itilize konesans sa a pou jwenn kèk enfòmasyon enteresan nan egzanp script la. grate/myfirst.ccke ou te deja konpile.

5.1.2 Pèmèt antre

Ann sèvi ak varyab anviwònman NS_LOG la pou nou kouri kèk lòt mòso bwa, men anvan, jis pou jwenn bi ou, kouri dènye script la jan ou te fè pi bonè,

$ ./waf --run scratch/myfirst

Ou ta dwe wè pwodiksyon abitye nan premye pwogram egzanp ns-3 la

$ 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

Li sanble ke mesaj "voye" ak "resevwa" ou wè pi wo a se aktyèlman mesaj ki soti nan UdpEchoClientApplication и UdpEchoServerApplication. Pou egzanp, nou ka mande aplikasyon kliyan an enprime plis enfòmasyon lè nou mete nivo anrejistreman li yo atravè varyab anviwònman NS_LOG la.

Depi koulye a, mwen pral asime ke w ap itilize yon kokiy tankou sh ki sèvi ak sentaks "VARIABLE = valè". Si w ap itilize yon kokiy ki tankou csh, Lè sa a, w ap oblije konvèti egzanp mwen yo nan sentaks "setenv varyab value" ki nesesè nan kokiy sa yo.

Kounye a, aplikasyon kliyan eko UDP reponn a liy kòd sa a nan grate/myfirst.cc,

LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);

Li pèmèt nivo anrejistreman LOG_LEVEL_INFO. Lè nou pase yon drapo nivo antre, nou aktyèlman pèmèt nivo sa a ak tout nivo ki pi ba yo. Nan ka sa a, nou te pèmèt NS_LOG_INFO, NS_LOG_DEBUG, NS_LOG_WARN ak NS_LOG_ERROR. Nou ka ogmante nivo anrejistreman an epi jwenn plis enfòmasyon, san chanjman script ak rekonpilasyon, lè nou mete varyab anviwònman NS_LOG la jan sa a:

$ export NS_LOG=UdpEchoClientApplication=level_all

Se konsa, nou mete sh shell varyab NS_LOG nan valè sa a,

UdpEchoClientApplication=level_all

Bò gòch la nan plasman an se non an nan eleman nan konekte nou vle konfigirasyon, ak bò dwat la se drapo a nou vle aplike pou li. Nan ka sa a, nou pral pèmèt tout nivo debogaj nan aplikasyon an. Si ou kouri script la ak NS_LOG mete nan fason sa a, ns-3 logging sistèm pral aksepte chanjman yo epi ou ta dwe wè pwodiksyon sa a:

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

Lòt enfòmasyon debogaj aplikasyon an bay kounye a nan nivo NS_LOG_FUNCTION. Li montre chak egzanp yon apèl fonksyon pandan ekzekisyon script. Kòm yon règ jeneral, nan fonksyon metòd li pi bon pou itilize (nan yon minimòm)NS_LOG_FUNCTION (this)... Sèvi ak NS_LOG_FUNCTION_NOARGS ()
sèlman nan fonksyon estatik. Sepandan, sonje ke sistèm ns-3 a pa oblije sipòte okenn fonksyonalite antre. Desizyon an sou konbyen enfòmasyon ki anrejistre yo kite nan men devlopè modèl endividyèl la. Nan ka aplikasyon eko, yon gwo kantite pwodiksyon antre ki disponib.

Kounye a ou ka wè yon jounal apèl fonksyon aplikasyon an te fè. Si w gade ak anpil atansyon, w ap remake yon kolon ant liy lan UdpEchoClientApplication ak non metòd la, kote ou ta ka espere wè operatè a C++ dimansyon (: :). Sa a se entansyonèl.

Sa a se pa aktyèlman non an nan klas la, men non an nan eleman nan antre. Lè gen yon match ant yon fichye sous ak yon klas, anjeneral li se non klas la, men ou ta dwe reyalize ke li se pa aktyèlman non an nan klas la, epi gen yon kolon sèl olye de yon kolon doub. Sa a se yon fason pou ede w konseptyèlman separe non pwa antre nan non klas la nan yon fason relativman sibtil.

Sepandan, nan kèk ka li ka difisil pou detèmine ki metòd aktyèlman générer mesaj journal. Si w gade tèks ki anwo a, ou ka mande kote liy lan "Received 1024 bytes from 10.1.1.2" Ou ka rezoud pwoblèm sa a pa mete nivo a prefiks_fonc nan varyab anviwònman NS_LOG. Eseye sa ki annapre yo:

$ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func'

Remake byen ke guillemets yo nesesè paske ba vètikal nou itilize pou reprezante operasyon OSWA a se tou yon konektè tiyo Unix. Koulye a, si ou kouri script la, ou pral wè ke sistèm anrejistreman an asire ke chak mesaj nan yon boutèy demi lit bay prefiks ak non an eleman.

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

Koulye a, ou ka wè ke tout mesaj ki soti nan aplikasyon kliyan eko UDP yo idantifye kòm sa yo. Mesaj "Received 1024 bytes from 10.1.1.2" kounye a idantifye klèman kòm li soti nan aplikasyon kliyan eko. Mesaj ki rete a dwe soti nan aplikasyon sèvè eko UDP. Nou ka pèmèt eleman sa a lè nou antre nan yon lis konpozan ki separe ak kolon nan varyab anviwònman NS_LOG.

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

Avètisman: Nan egzanp tèks ki anwo a, w ap bezwen retire karaktè newline apre kolon an (:), li itilize pou fòma dokiman an. Koulye a, si ou kouri script la, ou pral wè tout mesaj boutèy demi lit ki soti nan aplikasyon yo eko kliyan ak sèvè. Ou ka wè ke sa a ka trè itil lè debogaj.

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

Li se tou pafwa itil pou kapab wè tan an simulation nan ki mesaj la boutèy demi lit te pwodwi. Ou ka fè sa lè w ajoute ti OR la prefiks_time:

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

Ankò, w ap oblije retire karaktè newline ki anwo a. Si ou kounye a kouri script la ou ta dwe wè pwodiksyon sa a:

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

Tanpri sonje ke konstrukteur a pou UdpEchoServer te rele pandan simulation 0 segonn. Sa a aktyèlman rive anvan simulation la kòmanse, men tan an montre kòm zewo segonn. Menm bagay la tou pou mesaj konstrukteur la 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()

Sonje byen ke script la grate/premye.cc te kòmanse aplikasyon sèvè eko yon segonn anvan kòmansman simulation la. Koulye a, ou ka wè ke metòd la StartApplication se sèvè a aktyèlman rele nan premye dezyèm lan. Ou ka remake tou ke kliyan an eko kòmanse nan dezyèm dezyèm nan simulation, jan nou te mande nan script la.

Kounye a ou ka swiv pwogrè simulation sou apèl ScheduleTransmit nan kliyan an ki rele HandleRead callback Voye nan aplikasyon an sèvè eko. Remake byen ke tan an pase pou voye yon pake sou yon lyen pwen-a-pwen se 3,69 milisgond. Ou ka wè ke sèvè a eko anrejistre yon mesaj ke li te reponn a pake a, ak Lè sa a, apre yon reta chanèl, ou wè ke kliyan eko a resevwa pake a eko nan metòd HandleRead li yo.

Nan simulation sa a, anpil k ap pase san ou pa remake. Men, ou ka swiv tout pwosesis la trè fasil pa pèmèt tout konpozan antre nan sistèm nan. Eseye mete varyab NS_LOG nan valè sa a,

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

Asterisk ki anlè a se yon karaktè joker pou eleman ki anrejistre. Sa a pral gen ladan tout antre nan tout eleman yo itilize nan simulation la. Mwen pa pral repwodui pwodiksyon an isit la (nan moman ekri a li pwodui 1265 liy pwodiksyon pou yon sèl pake eko), men ou ka redireksyon enfòmasyon sa a nan yon dosye epi gade li nan editè pi renmen ou.

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

Mwen pèsonèlman sèvi ak vèsyon sa a trè verbose nan antre lè mwen gen yon pwoblèm epi mwen pa gen okenn lide ki kote bagay yo ale mal. Mwen ka swiv ekzekisyon kòd la byen fasil san yo pa mete breakpoints ak etap nan kòd la nan debugger la. Mwen ka jis edite pwodiksyon an nan editè pi renmen mwen an epi gade pou sa mwen espere epi wè yon bagay ki rive ke mwen pa t atann. Yon fwa mwen gen yon lide jeneral sou sa k ap pase mal, mwen sote nan debugger la fè egzèsis desann nan pwoblèm nan. Sa a kalite pwodiksyon ka itil espesyalman lè script ou a fè yon bagay konplètman inatandi. Si ou itilize sèlman debogaj la, ou ka manke yon tòde nèt. Enskripsyon fè vire sa yo aparan.

5.1.3 Ajoute login nan kòd ou a

Ou ka ajoute nouvo antre nan simulation ou lè w fè apèl nan eleman boutèy la soti nan makro miltip. Ann fè li nan yon script myfirst.cc, ke nou genyen nan anyè "pwòp". Sonje byen, nou te defini yon eleman anrejistreman nan senaryo sa a:

NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

Ou konnen ke ou ka pèmèt anrejistreman tout mesaj ki soti nan eleman sa a lè w mete varyab anviwònman NS_LOG nan diferan nivo. Ann ale pi devan epi ajoute kèk antre nan script la. Makro yo itilize pou ajoute mesaj nivo enfòmasyon nan jounal la se NS_LOG_INFO. Ann ajoute yon mesaj (jis anvan nou kòmanse kreye nœuds) ki di w ke script la nan faz "Kreye Topoloji". Sa a se fè nan snippet kòd sa a,
Louvri grate/myfirst.cc nan editè pi renmen ou epi ajoute liy lan,
NS_LOG_INFO ("Creating Topology");
dwat devan liy yo,

NodeContainer nodes;
nodes.Create (2);

Koulye a, konpile script la lè l sèvi avèk waf, epi efase varyab NS_LOG la pou enfim kouran enskripsyon nou te pèmèt pi bonè:

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

Ou p ap wè nouvo mesaj la paske eleman ki asosye (FirstScriptExample) pa te aktive. Pou wè mesaj ou a ou bezwen aktive eleman ki anrejistre FirstScriptExample ak yon nivo pa pi ba pase NS_LOG_INFO. Si ou jis vle wè nivo espesifik sa a antre, ou ka pèmèt li tankou sa a,

$ export NS_LOG=FirstScriptExample=info

Si ou kouri script la kounye a, ou pral wè yon nouvo mesaj "Kreye Topoloji",

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 Sèvi ak agiman liy kòmand

5.2.1 Anile valè atribi default yo

Yon lòt fason pou chanje konpòtman ns-3 scripts san yo pa modifye oswa bati se sèvi ak agiman liy lòd. Nou bay yon mekanis pou analize agiman liy kòmand epi otomatikman mete varyab lokal ak mondyal ki baze sou rezilta yo.

Premye etap la nan itilize sistèm agiman liy lòd la se deklare yon analizeur liy kòmand. Sa a se byen fasil fè (nan pwogram prensipal ou a), tankou nan kòd sa a,

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

Sa a senp ti bout de liy se aktyèlman trè itil nan pwòp dwa li yo. Li ouvri pòt la nan ns-3 global varyab ak sistèm atribi. Ann ajoute de liy kòd nan kòmansman fonksyon script prensipal la grate/myfirst.cc. Ale sou, nou konpile script la epi kouri li, lè w ap kouri nou fè yon demann èd jan sa a,

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

Kòmandman sa a pral mande Waf kouri script grate/myfirst epi pase li yon agiman liy lòd —Enprime èd. Sikonskripsyon yo oblije endike pou ki pwogram agiman an fèt. Analyseur liy lòd la pral detekte agiman an —Enprime èd epi yo pral montre repons lan,

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.

Koulye a, kite a gade nan opsyon an —PrintAtributes. Nou te deja mansyone sistèm atribi ns-3 lè n ap etidye script first.cc la. Nou te wè liy sa yo nan kòd,

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

epi yo te di sa DataRate se aktyèlman yon atribi PointToPointNetDevice. Ann sèvi ak analizeur agiman liy kòmand pou wè atribi yo PointToPointNetDevice. Lis èd la di sa nou dwe bay TypeId. Sa a se non klas kote atribi enterè yo fè pati. Nan ka nou an li pral ns3::PointToPointNetDevice. Ann kontinye vanse, antre,

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

Sistèm nan pral enprime tout atribi kalite aparèy rezo sa a. Ou pral wè ke pami atribi yo nan lis la se,

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

Sa a se valè default ke sistèm lan pral itilize lè y ap kreye objè a PointToPointNetDevice. Nou pral pase sou valè default sa a lè l sèvi avèk paramèt la atribi в PointToPointHelper pi wo. Ann sèvi ak valè default yo pou aparèy ak chanèl pwen-a-pwen. Pou fè sa, nou pral efase apèl yo SetDeviceAttribute и SetChannelAttribute nan myfirst.cc, ki nou genyen nan yon anyè pwòp.

Script ou ta dwe kounye a tou senpleman deklare PointToPointHelper epi pa fè okenn operasyon enstalasyon jan yo montre nan egzanp ki anba a,

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

Ale pi devan epi kreye yon nouvo script ak Waf (./waff) epi ann tounen epi enkli kèk antre nan aplikasyon sèvè UDP eko epi enkli prefiks tan an.

$ export 'NS_LOG=UdpEchoServerApplication=level_all|prefix_time'

Si ou kouri script la ou ta dwe wè pwodiksyon sa a:

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

Sonje byen, dènye fwa nou te gade nan tan simulation, moman sa a te resevwa pake a pa sèvè a eko, li te 2,00369 segonn.

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

Kounye a li resevwa pake a nan 2.25732 segonn. Sa a se paske nou tou senpleman reset PointToPointNetDevice pousantaj done a soti nan senk megabit pou chak segonn nan valè a default, ki se 32768 bit pou chak segonn. Si nou ta ranplase yon nouvo DataRate lè l sèvi avèk liy lòd la, nou ta ka pi vit simulation nou an ankò. Nou pral fè sa jan sa a, dapre fòmil la enplike nan eleman nan èd:

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

Sa a pral retounen atribi DataRate nan valè default li yo nan senk megabit pou chak segonn. Èske w sezi pa rezilta a? Li sanble ke yo nan lòd yo retounen konpòtman orijinal la nan script la, nou bezwen tou mete reta nan chanèl matche ak vitès la nan limyè. Nou ka mande sistèm liy lòd pou enprime atribi chanèl yo, menm jan nou te fè pou aparèy rezo a:

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

Nou pral jwenn ke atribi reta kanal la mete jan sa a:

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

Lè sa a, nou ka, atravè sistèm nan liy lòd, mete tou de nan valè default sa yo.

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

nan ka sa a nou retabli tan nou te genyen lè nou klèman mete DataRate ak Delay nan script la:

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

Remake byen ke sèvè a resevwa pake a ankò apre 2,00369 segonn. Nou ta ka aktyèlman mete nenpòt nan atribi yo itilize nan script la fason sa a. An patikilye, nou ta ka mete atribi MaxPackets yo nan valè ki pa yon sèl UdpEchoClient.

Ki jan ou ta itilize li? Bay li yon eseye. Sonje ke ou dwe fè kòmantè kote nou pase sou valè atribi default la epi mete klèman MaxPackets nan script la. Lè sa a, ou dwe rebati script la. Ou kapab tou itilize liy lòd la pou jwenn èd sentaks pou mete yon nouvo valè atribi default. Yon fwa ou konprann sa a, ou ka kontwole kantite pakè ki parèt sou liy lòd la. Depi nou se moun etidyan, liy lòd nou an ta dwe sanble yon bagay tankou sa a:

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

Kesyon natirèl la ki rive nan pwen sa a se ki jan yo konnen sou egzistans la nan tout atribi sa yo. Yon fwa ankò, sistèm nan liy lòd gen yon fonksyon èd pou pwoblèm sa a. Si nou mande liy kòmand pou èd, nou ta dwe wè:

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

Si w chwazi agiman "PrintGroups" ou ta dwe wè yon lis tout gwoup ki anrejistre yo TypeId. Non gwoup yo konsistan avèk non modil yo nan anyè sous la (byenke majiskil). Enprime tout enfòmasyon yo nan yon fwa ta twò volumineux, kidonk yon filtè adisyonèl disponib pou enprime enfòmasyon pa gwoup. Se konsa, ankò konsantre sou modil la pwen-a-pwen:

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

Isit la ou ka jwenn non TypeId ki disponib pou rechèch atribi, pou egzanp nan
--PrintAttributes = ns3 :: PointToPointChanneljan yo montre pi wo a.

Yon lòt fason pou aprann sou atribi se atravè Doxygen ns-3. Gen yon paj ki bay lis tout atribi ki anrejistre nan similatè a.

5.2.2 Kaptire pwòp kòmandman ou yo

Ou kapab tou ajoute kwòk pwòp ou yo atravè sistèm nan liy lòd. Sa a se fè byen tou senpleman lè l sèvi avèk metòd la analize liy lòd AjouteValè.
Ann sèvi ak karakteristik sa a pou presize kantite pakè yo dwe parèt nan yon fason konplètman diferan. Ann ajoute yon varyab lokal yo rele nPackets nan yon fonksyon prensipal. Nou pral mete li nan yon sèl matche ak konpòtman default anvan nou an. Pou pèmèt parser liy kòmand la chanje valè sa a, nou bezwen pran valè sa a nan analizeur la. Nou fè sa lè nou ajoute yon apèl AjouteValè. Ale epi chanje script la grate/myfirst.cc Se konsa, kòmanse ak kòd sa a,

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 desann nan pwen nan script la kote nou mete atribi MaxPackets la epi chanje li pou li mete nan varyab nPackets olye pou yo konstan 1, jan yo montre anba a.

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

Koulye a, si ou kouri script la epi bay agiman -PrintHelp la, ou ta dwe wè nouvo agiman itilizatè a. ki nan lis nan ekspozisyon èd la. Antre,

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

Si ou vle chanje kantite pake ki transmèt, ou ka fè sa lè w mete agiman liy lòd - -nPackets.

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

Koulye a, ou ta dwe kounye a wè

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

Kounye a ou voye de pakè. Assez senp, pa vre?
Ou ka wè ke kòm yon itilizatè ns-3, ou ka itilize sistèm agiman liy lòd pou manipile valè ak atribi mondyal yo. Si ou se otè modèl la, ou ka ajoute nouvo atribi nan objè ou yo epi yo pral otomatikman disponib pou konfigirasyon pa itilizatè ou yo atravè sistèm nan liy lòd. Si ou se yon otè script, ou ka ajoute nouvo varyab nan scripts ou yo ak san pwoblèm ploge yo nan sistèm liy lòd ou a.

5.3 Sèvi ak sistèm trase a

Pwen an antye nan modèl se jenere pwodiksyon pou plis etid, ak sistèm nan tras ns-3 se mekanis prensipal la pou sa. Depi ns-3 se yon pwogram C++, yo ka itilize mwayen estanda pou jenere pwodiksyon nan yon pwogram C++:

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

Ou ka menm itilize yon modil antre pou ajoute yon ti estrikti nan solisyon ou. Gen anpil pwoblèm li te ye ki te koze pa apwòch sa a, ak Se poutèt sa nou te bay yon sous-sistèm trase evènman jeneral yo rezoud pwoblèm sa yo.

Objektif prensipal sistèm trase ns-3 la se:

  • Pou travay debaz yo, sistèm trase a ta dwe pèmèt itilizatè a jenere yon tras estanda pou sous popilè yo epi chwazi objè ki jenere tras la;

  • Itilizatè entèmedyè yo ta dwe kapab pwolonje sistèm trase a pou chanje fòma pwodiksyon pwodwi a oswa pou mete nouvo sous tras, san yo pa modifye nwayo similatè a;

  • Itilizatè avanse yo ka modifye nwayo similatè a pou ajoute nouvo sous tras ak lavabo. Sistèm trase ns-3 la bati sou prensip sous swiv endepandan ak reseptè yo, ansanm ak yon mekanis inifye pou konekte sous ak konsomatè yo.

Sistèm trase ns-3 la bati sou prensip sous trase endepandan ak reseptè yo, ansanm ak yon mekanis inifye pou konekte sous ak reseptè yo. Sous tras yo se objè ki ka siyal evènman ki fèt nan simulation la epi bay aksè a done ki kache nan enterè yo. Pou egzanp, yon sous tras ka endike lè yon aparèy rezo te resevwa yon pake epi fè sa ki nan pake a disponib pou reseptè tras ki enterese yo.

Sous tras poukont yo pa itil sòf si yo "makonnen" ak lòt pati nan kòd la ki aktyèlman fè yon bagay itil ak enfòmasyon ki bay koule a. Traseur yo se konsomatè evènman ak done ki bay sous tras. Pou egzanp, ou ka kreye yon koule tras ki pral (lè yo konekte ak sous la tras nan egzanp anvan an) enprime soti nan pati ki enterese nan pake resevwa a.

Rezon ki fè pou separasyon eksplisit sa a se pou pèmèt itilizatè yo konekte nouvo kalite koule ak sous tras ki deja egziste san yo pa bezwen edite ak rekonpile nwayo similatè a. Se konsa, nan egzanp ki anwo a, itilizatè a ka defini yon nouvo traseur nan script yo epi konekte li nan yon sous tras ki egziste deja defini nan nwayo a simulation sèlman pa koreksyon script itilizatè a.

Nan leson patikilye sa a, nou pral ale nan kèk nan sous yo predefini ak lavabo epi montre ki jan yo ka configuré ak pi piti kantite efò sou pati itilizatè a. Gade Manyèl ns-3 oswa seksyon kijan pou w fè pou w jwenn enfòmasyon sou konfigirasyon tras avanse, tankou agrandi espas non tras la ak kreye nouvo sous tras.

5.3.1 Trase ASCII

ns-3 bay fonksyonalite asistan ki bay yon sistèm trase ba-nivo pou ede w ak detay yo lè w ap mete tras senp pake. Si ou pèmèt karakteristik sa a, ou pral wè pwodiksyon an nan dosye ASCII. Pou moun ki abitye ak pwodiksyon ns-2, kalite tras sa a sanble ak soti.tr, ki te pwodwi pa anpil scripts.

Ann vin nan biznis epi ajoute kèk rezilta trase ASCII nan script scratch/myfirst.cc nou an. Dwa anvan apèl la Simulator :: Run (), ajoute liy kòd sa yo:
AsciiTraceHelper ascii;

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

Tankou anpil lòt langaj ns-3, kòd sa a sèvi ak yon objè asistan pou kreye tras ASCII. Dezyèm liy lan gen de apèl metòd imbrike. "Anndan" metòd CreateFileStream() sèvi ak idiom objè anonim yo kreye yon objè kouran dosye sou pil la (san yon non objè) epi li pase li nan metòd la rele. Nou pral antre pi fon nan sa a nan lavni, men tout sa ou bezwen konnen nan pwen sa a se ke w ap kreye yon objè ki reprezante yon dosye ki rele myfirst.tr epi transfere li nan ns-3. Nou konfye ns-3 pou pran swen objè a kreye pou tout lavi li, pandan sa li rezoud pwoblèm ki te koze pa yon ti kras li te ye (entansyonèl) limitasyon ki asosye ak konstrukteur kopi objè kouran C++.

Rele ekstèn EnableAsciAll() di asistan an ke ou vle mete trase ASCII nan simulation ou pou tout koneksyon aparèy pwen-a-pwen epi ou vle (espesifye) reseptè tras yo anrejistre enfòmasyon mouvman pake nan fòma ASCII.

Pou moun ki abitye ak ns-2, evènman yo swiv yo ekivalan a tracepoints yo konnen ki anrejistre evènman "+", "-", "d" ak "r".
Koulye a, ou ka bati script la epi kouri li nan liy lòd la:

$ ./waf --run scratch/myfirst

Tankou anpil fwa anvan, ou pral wè plizyè mesaj ki soti nan Waf, ak Lè sa a, "'build' fini avèk siksè" ak kèk mesaj ki soti nan pwogram nan kouri.

Lè w ap kouri, pwogram nan pral kreye yon dosye ki rele myfirst.tr. Akòz nati travay la Waf, pa default fichye a kreye pa nan anyè lokal la, men nan anyè ki pi wo nan depo a. Si ou vle chanje chemen kote tras yo sove, Lè sa a, ou ka itilize paramèt Waf la pou presize li. --cwd. Nou poko fè sa, kidonk pou nou gade fichye trase ASCII myfirst.tr nan editè ou pi renmen an, nou pral bezwen navige nan anyè ki pi wo nan depo nou an.

Analize tras ASCII

Genyen anpil enfòmasyon la nan yon fòm jistis dans, men premye bagay ou bezwen remake se ke dosye a konsiste de liy endividyèl yo. Sa a pral vin klèman vizib si ou elaji fenèt la gade pi laj.

Chak liy nan dosye a koresponn ak yon evènman tras. Nan ka sa a, nou trase evènman nan keu transmisyon prezan nan chak aparèy rezo pwen-a-pwen nan simulation la. Nat transmisyon an se keu kote chak pake dwe pase pou yon lyen pwen-a-pwen. Remake byen ke chak liy nan dosye tras la kòmanse ak yon karaktè sèl (epi li gen yon espas apre li). Senbòl sa a pral gen siyifikasyon sa a:

+: yon operasyon keuing te fèt sou keu aparèy la;
-: yon operasyon rekipere eleman ki te fèt nan keu aparèy la;
d: pake a te tonbe, anjeneral paske keu la te plen;
r: Yon aparèy rezo te resevwa pake a.

Ann pran yon gade pi pre nan premye liy nan dosye tras la. Mwen pral kraze li an pati (ak endentasyon pou klè) ak nimewo liy lan sou bò gòch la:

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)

Premye seksyon evènman trase pwolonje sa a (liy 0) se operasyon an. Nou gen yon senbòl + isit la, ki koresponn ak operasyon an nan file pou transmisyon. Dezyèm seksyon an (liy 1) se tan an simulation, eksprime an segonn. Ou ka sonje sa nou te mande UdpEchoClientApplication kòmanse voye pake nan de segonn. Isit la nou wè konfimasyon ke sa a se tout bon k ap pase.

Pwochen seksyon egzanp tras la (ki soti nan liy 2) montre ki sous tras ki te pwodwi evènman sa a (ki endike tras espas non an). Ou ka panse ak espas non tras la menm jan ak espas non sistèm fichye a. Rasin nan espas non an se NodeList. Sa a koresponn ak veso ki jere nan kòd prensipal ns-3 la. Li gen tout nœuds ki kreye nan script la. Menm jan yon sistèm fichye ka gen anyè nan rasin li, NodeList nou ka gen anpil nœuds. Se konsa, liy /NodeList/0 refere a nœuds la nil nan NodeList la, ke nou anjeneral panse a kòm "nœud 0". Chak ne gen yon lis aparèy ki te enstale. Lis sa a sitiye pwochen nan espas non an. Ou ka wè ke evènman tras sa a soti DeviceList/0, ki se aparèy la nil enstale nan ne la.

Next substring, $ ns3 :: PointToPointNetDevice, di ki aparèy ki nan pozisyon zewo: lis aparèy la nan ne zewo. Sonje byen, operasyon an + yo te jwenn nan liy 0 vle di ke yo te ajoute yon eleman nan keu transmèt aparèy la. Sa a reflete nan dènye segman yo nan "chemen tras la": TxQueue/Enqueue.

Seksyon ki rete yo nan tras la ta dwe jistis entwisyon. Liy 3-4 endike ke pake a encapsulé nan yon pwotokòl pwen-a-pwen. Liy 5-7 montre ke pake a gen yon header vèsyon IP4 epi li soti nan adrès IP la 10.1.1.1 epi li fèt pou 10.1.1.2. Liy 8-9 montre ke pake sa a gen yon header UDP epi finalman liy 10 montre ke chaj la se 1024 bytes yo espere.

Pwochen liy nan dosye tras la montre ke menm pake a te rale nan keu transmisyon an sou menm ne.

Twazyèm liy nan dosye tras la montre ke pake a te resevwa pa yon aparèy rezo sou lame a sèvè eko. Mwen te repwodui evènman an anba a.

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)

Remake byen ke operasyon an tras se kounye a r ak tan an simulation te ogmante a 2,25732 segonn. Si ou te swiv leson patikilye a ak anpil atansyon, sa vle di ke ou te kite DataRate ak Reta Link aparèy rezo yo nan valè default yo. Tansyon sa a ta dwe abitye, jan ou te wè nan seksyon anvan an.

Antre espas non sous tras la (liy 2) te modifye pou reflete ke evènman sa a soti nan ne 1 (/NodeList/1) epi sous tras la resevwa pake a (/MacRx). Li ta dwe jistis fasil pou w swiv mouvman pake a atravè topoloji a lè w gade tras ki rete yo nan dosye a.

5.3.2 Trace PCAP

Ns-3 Device Helpers yo ka itilize tou pou kreye dosye tras nan fòma .pcap. Akwonim pcap (anjeneral ekri an miniskil) vle di kaptire pake epi li se aktyèlman yon API ki gen ladan defini fòma fichye .pcap la. Pwogram ki pi popilè ki ka li epi montre fòma sa a se Wireshark (yo te rele deja Ethereal). Sepandan, gen anpil analizè tras trafik ki itilize fòma pake sa a. Nou ankouraje itilizatè yo sèvi ak anpil zouti ki disponib pou analize tras pcap. Nan leson patikilye sa a nou pral konsantre sou gade tras pcap lè l sèvi avèk tcpdump.

Pèmèt trase pcap fèt ak yon liy kòd.

pointToPoint.EnablePcapAll ("myfirst");

Kole liy kòd sa a apre kòd tras ASCII nou jis ajoute nan grate/myfirst.cc. Remake byen ke nou sèlman pase fisèl "myfirst la", pa "myfirst.pcap" oswa nenpòt bagay ki sanble. Sa a se paske paramèt la se yon prefiks, pa yon non dosye konplè. Pandan simulation an, asistan an pral kreye yon dosye tras pou chak aparèy pwen-a-pwen. Non fichye yo pral konstwi lè l sèvi avèk prefiks, nimewo ne, nimewo aparèy, ak sifiks ".pcap'.

Pou egzanp script nou an, nou pral fini wè dosye ki rele "myfirst-0-0.pcap"Ak"myfirst-1-0.pcap", ki se tras pcap pou ne 0-aparèy 0 ak ne 1-aparèy 0 respektivman. Yon fwa ou te ajoute liy kòd la pou pèmèt trase pcap, ou ka kouri script la nan fason nòmal la:

$ ./waf --run scratch/myfirst

Si ou gade nan anyè ki pi wo nan distribisyon ou a, ou ta dwe wè twa fichye: yon dosye tras ASCII. myfirst.tr, ki nou te deja etidye, dosye myfirst-0-0.pcap и myfirst-1-0.pcap - nouvo dosye pcap ke nou jis pwodwi.

Lekti pwodiksyon ak tcpdump

Pou kounye a, fason ki pi fasil yo wè dosye pcap se sèvi ak 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

Nan pil fatra a myfirst-0-0.pcap (aparèy kliyan) ou ka wè pake eko voye apre 2 segonn simulation. Si w gade dezyèm pil fatra a (myfirst-1-0.pcap), ou pral wè ke yo resevwa pake a nan 2,257324 segonn. Ou pral wè nan dezyèm pil fatra a ke pake a retounen nan 2.257324 segonn, epi finalman ke pake a te resevwa tounen pa kliyan an nan premye pil fatra a nan 2.514648 segonn.

Lekti Sòti ak Wireshark

Si ou pa abitye ak Wireshark, gen yon sit entènèt kote ou ka telechaje pwogram ak dokiman yo: http://www.wireshark.org/. Wireshark se yon entèfas ki ka itilize pou montre dosye tras sa yo. Si ou gen Wireshark, ou ka louvri nenpòt nan dosye tras yo epi montre sa yo kòm si ou te kaptire pake yo lè l sèvi avèk yon sniffer pake.

Sous: www.habr.com

Add nouvo kòmantè