vodič za simulator mreže ns-3. Poglavlje 5

vodič za simulator mreže ns-3. Poglavlje 5
poglavlje 1,2
3. poglavlje
4. poglavlje

5 Postavljanje
5.1 Korištenje modula za bilježenje
5.1.1 Pregled zapisivanja
5.1.2 Omogući bilježenje
5.1.3 Dodavanje zapisivanja vašem kodu
5.2 Korištenje argumenata naredbenog retka
5.2.1 Nadjačavanje zadanih vrijednosti atributa
5.2.2 Hvatanje vlastitih naredbi
5.3 Korištenje sustava praćenja
5.3.1 ASCII praćenje
Raščlanjivanje ASCII tragova
5.3.2 PCAP praćenje

Poglavlje 5

podešavanje

5.1 Korištenje modula za bilježenje

Već smo ukratko pogledali ns-3 modul zapisivanja gledajući skriptu prvi.cc. U ovom poglavlju pobliže ćemo pogledati moguće upotrebe podsustava za bilježenje.

5.1.1 Pregled zapisivanja

Mnogi veliki sustavi podržavaju neku vrstu mogućnosti zapisivanja poruka, a ns-3 nije iznimka. U nekim slučajevima samo se poruke o pogreškama pišu na "konzolu operatera" (koja je obično stderr na sustavima baziranim na Unixu). Na drugim sustavima mogu se prikazati poruke upozorenja kao i detaljnije informacije. U nekim se slučajevima alati za bilježenje koriste za ispisivanje poruka o otklanjanju pogrešaka koje mogu brzo zamutiti ispis.

SubHRD koji se koristi u ns-3 pretpostavlja da su sve ove razine sadržaja informacija korisne, a mi pružamo selektivan, slojeviti pristup bilježenju poruka. Zapisivanje se može potpuno onemogućiti, omogućiti po komponenti ili globalno. U tu svrhu koriste se podesive razine sadržaja informacija. Modul za bilježenje ns-3 pruža relativno jednostavan način dobivanja korisnih informacija iz vaše simulacije.

Вы должны понимать, что мы предоставляем механизм общего назначения — трассировку — для извлечения данных из ваших моделей, который должен быть предпочтительным для вывода при моделировании (для получения более подробной информации о нашей системы трассировки см. раздел учебника 5.3). Журналирование должно быть предпочтительным методом получения отладочной информации, предупреждений, сообщений об ошибках или для быстрого вывода сообщений из ваших сценариев или моделей в любой момент.

Trenutno sustav definira sedam razina (tipova) log poruka prema rastućem redoslijedu sadržaja informacija.

  • LOG_ERROR - bilježenje poruka o pogrešci (povezani makro: NS_LOG_ERROR);
  • LOG_WARN - Zapisnik poruka upozorenja (povezani makro: NS_LOG_WARN);
  • LOG_DEBUG — регистрация относительно редких специальных сообщений отладки (связанный макрос: NS_LOG_DEBUG);
  • LOG_INFO - registracija informativnih poruka o napretku programa (povezani makro: NS_LOG_INFO);
  • LOG_FUNCTION — регистрация сообщений, описывающих каждую вызванную функцию (два связанных макроса: NS_LOG_FUNCTION, используемый для функций-членов, и NS_LOG_FUNCTION_NOARGS, используемый для статических функций);
  • LOG_LOGIC - poruke zapisivanja koje opisuju logički tijek unutar funkcije (povezani makro: NS_LOG_LOGIC);
  • LOG_ALL - Zapisuje sve gore spomenuto (bez pridružene makronaredbe).
    Za svaki tip (LOG_TYPE) također postoji LOG_LEVEL_TYPE koji, ako se koristi, omogućuje bilježenje svih razina iznad njega uz vlastitu razinu. (Kao posljedica toga, LOG_ERROR i LOG_LEVEL_ERROR, te LOG_ALL i LOG_LEVEL_ALL su funkcionalno ekvivalentni.) Na primjer, omogućavanje LOG_INFO će dopustiti samo poruke koje daje makro NS_LOG_INFO, dok će omogućavanje LOG_LEVEL_INFO također uključivati ​​poruke koje pružaju makronaredbe NS_LOG_DEBUG, NS_LOG_WARN i NS_LOG_ERROR.

Također nudimo makronaredbu bezuvjetnog bilježenja koja se uvijek prikazuje, bez obzira na razinu bilježenja ili komponentu odabira.

  • NS_LOG_UNCOND - Bezuvjetno bilježenje pridružene poruke (bez pridružene razine bilježenja).

Каждый уровень может быть запрошен по отдельности или кумулятивно. Журналирование можно настроить с помощью переменной sh-среды NS_LOG или путем регистрации вызова системной функции. Как было показано ранее, система журналирования имеет Doxygen-документацию и сейчас самое время её просмотреть, если вы это еще не сделали.

Sada kada ste vrlo detaljno pročitali dokumentaciju, iskoristimo to znanje da dobijemo neke zanimljive informacije iz primjera skripte scratch/myfirst.cckoje ste već sastavili.

5.1.2 Omogući bilježenje

Upotrijebimo varijablu okruženja NS_LOG za pokretanje još nekih zapisa, ali prvo, samo da se orijentišete, pokrenite posljednju skriptu kao što ste učinili ranije,

$ ./waf --run scratch/myfirst

Trebali biste vidjeti poznati izlaz iz prvog ns-3 primjera programa

$ 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

Ispostavilo se da su "poslane" i "primljene" poruke koje vidite gore zapravo zabilježene poruke od UdpEchoClientApplication и UdpEchoServerApplication. Na primjer, možemo zatražiti od klijentske aplikacije da ispiše dodatne informacije postavljanjem svoje razine bilježenja putem varijable okoline NS_LOG.

С этого момента я собираюсь предположить, что вы используете sh-подобную оболочку, которая использует синтаксис «VARIABLE = value». Если вы используете csh-подобную оболочку, тогда вам придется преобразовать мои примеры в синтаксис «переменное значение setenv» требуется этими оболочками.

Trenutno UDP echo klijentska aplikacija odgovara na sljedeći redak koda u scratch/myfirst.cc,

LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);

Omogućuje razinu zapisivanja LOG_LEVEL_INFO. Kada prođemo oznaku razine zapisivanja, zapravo omogućujemo tu razinu i sve niže razine. U ovom slučaju, omogućili smo NS_LOG_INFO, NS_LOG_DEBUG, NS_LOG_WARN i NS_LOG_ERROR. Možemo povećati razinu zapisivanja i dobiti više informacija, bez promjena skripte i ponovne kompilacije, postavljanjem varijable okoline NS_LOG na sljedeći način:

$ export NS_LOG=UdpEchoClientApplication=level_all

Так мы устанавливаем следующее значение переменной NS_LOG sh-оболочки,

UdpEchoClientApplication=level_all

Lijeva strana dodjele je naziv zabilježene komponente koju želimo konfigurirati, a desna je zastavica koju želimo primijeniti za nju. U ovom slučaju, omogućit ćemo sve razine otklanjanja pogrešaka u aplikaciji. Ako pokrenete skriptu s NS_LOG postavljenim na ovaj način, ns-3 sustav za bilježenje će prihvatiti promjene i trebali biste vidjeti sljedeći izlaz:

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

Дополнительная отладочная информация, предоставляемая приложением, теперь соответствует уровню NS_LOG_FUNCTION. Он показывает каждый случай вызова функций во время выполнения скрипта. Как правило, в функциях-методах предпочтительно использовать (как минимум)NS_LOG_FUNCTION (this)... Koristiti NS_LOG_FUNCTION_NOARGS ()
только в статических функциях. Тем не менее, обратите внимание, что в системе ns‑3 нет требований поддерживать какую-либо функциональность журналирования. Решение о том, сколько информации регистрируется, остается индивидуально за разработчиком модели. В случае эхо-приложений доступно большое количество выходных данных для журналирования.

Sada možete vidjeti zapisnik poziva funkcija koje je izvršila aplikacija. Ako bolje pogledate, primijetit ćete dvotočku između crte UdpEchoClientApplication и именем метода, в том месте, где вы возможно ожидали увидеть оператор области видимости C++ (: :). Это сделано намеренно.

Ovo zapravo nije naziv klase, već naziv komponente za bilježenje. Kada postoji podudaranje između izvorne datoteke i klase, to je obično naziv klase, ali trebali biste shvatiti da to zapravo nije naziv klase, i da postoji jedna dvotočka umjesto dvostruke dvotočke. Ovo je način da vam pomogne da konceptualno odvojite ime beana za bilježenje od naziva klase na relativno suptilan način.

Međutim, u nekim slučajevima može biti teško odrediti koja metoda zapravo generira poruku dnevnika. Ako pogledate gornji tekst, možda se pitate gdje je linija "Received 1024 bytes from 10.1.1.2». Вы можете решить эту проблему, установив уровень prefiks_func na varijablu okoline NS_LOG. Pokušajte sljedeće:

$ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func'

Imajte na umu da su navodnici neophodni jer je okomita traka koju koristimo za predstavljanje operacije ILI također Unix cijevni konektor. Sada, ako pokrenete skriptu, vidjet ćete da sustav za bilježenje osigurava da svaka poruka u danom zapisniku ima prefiks s nazivom komponente.

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

Sada možete vidjeti da su sve poruke koje dolaze iz klijentske aplikacije UDP echo identificirane kao takve. Poruka "Received 1024 bytes from 10.1.1.2" sada je jasno identificirano da dolazi iz klijentske aplikacije echo. Preostala poruka mora doći iz aplikacije poslužitelja UDP echo. Ovu komponentu možemo omogućiti unosom popisa komponenti odvojenih dvotočkom u varijablu okoline NS_LOG.

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

Upozorenje: U gornjem primjeru teksta morat ćete ukloniti znak novog retka nakon dvotočke (:), koji se koristi za formatiranje dokumenta. Sada, ako pokrenete skriptu, vidjet ćete sve poruke dnevnika iz aplikacija klijenta i poslužitelja echo. Možete vidjeti da ovo može biti vrlo korisno prilikom otklanjanja pogrešaka.

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

Također je ponekad korisno moći vidjeti vrijeme simulacije u kojem je generirana poruka dnevnika. To možete učiniti dodavanjem bita OR vrijeme_prefiksa:

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

Ponovno ćete morati ukloniti gornji znak novog retka. Ako sada pokrenete skriptu, trebali biste vidjeti sljedeći izlaz:

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

Imajte na umu da je konstruktor za UdpEchoServer je pozvan tijekom simulacije 0 sekundi. To se zapravo događa prije početka simulacije, ali vrijeme je prikazano kao nula sekundi. Isto vrijedi i za poruku konstruktora 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()

Podsjetimo da je scenarij ogrebotina/prvi.cc pokrenuo aplikaciju echo poslužitelja jednu sekundu prije početka simulacije. Sada možete vidjeti da je metoda Pokreni aplikaciju poslužitelj se zapravo poziva u prvoj sekundi. Također možete primijetiti da se echo klijent pokreće u drugoj sekundi simulacije, kao što smo tražili u skripti.

Sada možete pratiti napredak simulacije pozivom ScheduleTransmit u klijentu koji poziva povratni poziv HandleRead Send u aplikaciji poslužitelja echo. Imajte na umu da je proteklo vrijeme za slanje paketa preko veze od točke do točke 3,69 milisekundi. Možete vidjeti da poslužitelj echo-a bilježi poruku da je odgovorio na paket, a zatim, nakon odgode kanala, vidite da klijent echo-a prima paket echo-a u svojoj metodi HandleRead.

U ovoj simulaciji mnogo toga se događa a da ne primijetite. Ali cijeli proces možete vrlo lako pratiti ako omogućite sve komponente za bilježenje u sustavu. Pokušajte postaviti varijablu NS_LOG na sljedeću vrijednost,

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

Gornja zvjezdica je zamjenski znak za komponentu bilježenja. Ovo će uključiti sve unose u svim komponentama korištenim u simulaciji. Ovdje neću reproducirati izlaz (u vrijeme pisanja proizvodi 1265 redaka izlaza za jedan echo paket), ali možete preusmjeriti ovu informaciju u datoteku i pogledati je u svom omiljenom editoru.

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

Ja osobno koristim ovu izuzetno opširnu verziju zapisivanja kada imam problem i nemam pojma gdje je nešto pošlo po zlu. Mogu prilično lako pratiti izvođenje koda bez postavljanja prijelomnih točaka i koračanja kroz kod u alatu za ispravljanje pogrešaka. Mogu samo urediti izlaz u svom omiljenom editoru i tražiti ono što očekujem i vidjeti da se događa nešto što nisam očekivao. Nakon što steknem opću predodžbu o tome što ne valja, uskočim u program za ispravljanje pogrešaka kako bih dublje proučio problem. Ova vrsta izlaza može biti posebno korisna kada vaša skripta učini nešto potpuno neočekivano. Ako koristite samo program za ispravljanje pogrešaka, možete u potpunosti propustiti zaokret. Registracija čini takve zaokrete uočljivima.

5.1.3 Dodavanje zapisivanja vašem kodu

Svojim simulacijama možete dodati nove unose pozivanjem komponente dnevnika iz više makronaredbi. Učinimo to u scenariju myfirst.cc, koje imamo u “čistom” imeniku. Podsjetimo se da smo definirali komponentu bilježenja u ovom scenariju:

NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

Svjesni ste da možete omogućiti bilježenje svih poruka iz ove komponente postavljanjem varijable okruženja NS_LOG na različitim razinama. Idemo naprijed i dodamo neke unose u skriptu. Makro koji se koristi za dodavanje poruka na razini informacija u dnevnik je NS_LOG_INFO. Dodajmo poruku (neposredno prije nego počnemo stvarati čvorove) koja vam govori da je skripta u fazi "Stvaranje topologije". To se radi u sljedećem isječku koda,
Otvoreno scratch/myfirst.cc в вашем любимом редакторе и добавьте строку,
NS_LOG_INFO ("Creating Topology");
točno prije linija,

NodeContainer nodes;
nodes.Create (2);

Теперь скомпилируйте скрипт, используя WAFi izbrišite varijablu NS_LOG da biste onemogućili tok zapisivanja koji smo ranije omogućili:

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

Nećete vidjeti novu poruku jer pridružena komponenta zapisivanja (FirstScriptExample) nije omogućena. Da biste vidjeli svoju poruku morate omogućiti komponentu za bilježenje FirstScriptExample s razinom koja nije niža od NS_LOG_INFO. Ako samo želite vidjeti ovu određenu razinu zapisivanja, možete je omogućiti ovako,

$ export NS_LOG=FirstScriptExample=info

Ako sada pokrenete skriptu, vidjet ćete novu poruku "Stvaranje topologije",

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 Korištenje argumenata naredbenog retka

5.2.1 Nadjačavanje zadanih vrijednosti atributa

Другой способ изменить поведение сценариев ns‑3 без редактирования и сборки — использование аргументов командной строки. Мы предоставляем механизм для разбора аргументов командной строки и автоматической установки локальных и глобальных переменных на основе результатов.

Prvi korak u korištenju sustava argumenata naredbenog retka je deklaracija parsera naredbenog retka. To je prilično lako učiniti (u vašem glavnom programu), kao u sljedećem kodu,

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

Ovaj jednostavni isječak s dva retka zapravo je vrlo koristan sam po sebi. Otvara vrata ns-3 globalnom sustavu varijabli i atributa. Dodajmo dva retka koda na početak funkcije glavne skripte scratch/myfirst.cc. Idemo dalje, kompajliramo skriptu i pokrećemo je, pri pokretanju postavljamo zahtjev za pomoć na sljedeći način,

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

Ova naredba će pitati WAF pokrenuti skriptu scratch/myfirst i proslijedite mu argument naredbenog retka —Pomoć za ispis. Navodnici su potrebni da naznače kojem je programu argument namijenjen. Parser naredbenog retka otkrit će argument —Pomoć za ispis i prikazat će odgovor,

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.

Sada pogledajmo opciju —Ispiši atribute. Već smo spomenuli sustav atributa ns-3 kada smo proučavali skriptu first.cc. Vidjeli smo sljedeće retke koda,

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

i to su rekli DataRate на самом деле является атрибутом PointToPointNetDevice. Давайте применим синтаксический анализатор аргументов командной строки для просмотра атрибутов PointToPointNetDevice. Popis pomoći kaže što moramo pružiti TypeId. Ovo je naziv klase kojoj pripadaju atributi od interesa. U našem slučaju bit će ns3::PointToPointNetDevice. Idemo naprijed, uđi,

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

Sustav će ispisati sve atribute ove vrste mrežnog uređaja. Vidjet ćete da su među atributima na popisu,

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

Это значение по умолчанию, которое будет использоваться в системе при создании объекта PointToPointNetDevice. Zaobići ćemo ovu zadanu vrijednost pomoću parametra Atribut в PointToPointHelper viši. Upotrijebimo zadane vrijednosti za uređaje i kanale od točke do točke. Da bismo to učinili, izbrisat ćemo pozive SetDeviceAttribute и PostaviChannelAttribute od myfirst.cc, koji imamo u čistom imeniku.

Vaša bi skripta sada trebala jednostavno deklarirati PointToPointHelper i nemojte izvoditi nikakve operacije instalacije kao što je prikazano u primjeru u nastavku,

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

Samo naprijed i izradite novu skriptu s WAF (./vaf) i vratimo se i uključimo neki unos iz aplikacije UDP echo poslužitelja i uključimo vremenski prefiks.

$ export 'NS_LOG=UdpEchoServerApplication=level_all|prefix_time'

Ako pokrenete skriptu, trebali biste vidjeti sljedeći izlaz:

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

Podsjetimo se da je posljednji put kada smo pogledali vrijeme simulacije, trenutak kada je paket primio echo server, bilo 2,00369 sekundi.

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

Sada prima paket za 2.25732 sekunde. To je zato što jednostavno resetiramo brzinu prijenosa podataka PointToPointNetDevice s pet megabita u sekundi na zadanu vrijednost, koja iznosi 32768 bita u sekundi. Ako bismo zamijenili novi DataRate pomoću naredbenog retka, mogli bismo ponovno ubrzati našu simulaciju. To ćemo učiniti na sljedeći način, prema formuli koju implicira element pomoći:

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

Ovo će vratiti atribut DataRate na zadanu vrijednost od pet megabita u sekundi. Jeste li iznenađeni rezultatom? Ispostavilo se da, kako bismo vratili originalno ponašanje skripte, također moramo postaviti odgodu kanala da odgovara brzini svjetlosti. Možemo tražiti od sustava naredbenog retka da ispiše atribute kanala, baš kao što smo učinili za mrežni uređaj:

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

Otkrit ćemo da je atribut kašnjenja kanala postavljen na sljedeći način:

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

Zatim možemo, putem sustava naredbenog retka, postaviti obje ove zadane vrijednosti.

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

u ovom slučaju vraćamo vrijeme koje smo imali kada smo eksplicitno postavili DataRate i Delay u skripti:

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

Imajte na umu da poslužitelj ponovno prima paket nakon 2,00369 sekundi. Na ovaj način zapravo možemo postaviti bilo koji od atributa korištenih u skripti. Konkretno, mogli bismo postaviti atribute MaxPackets na vrijednosti koje nisu jedan UdpEchoClient.

Kako biste ga upotrijebili? Pokušati. Ne zaboravite da morate komentirati mjesto gdje nadjačavamo zadanu vrijednost atributa i eksplicitno postavljamo MaxPackets u scenariju. Zatim morate ponovno izgraditi skriptu. Također možete koristiti naredbeni redak da dobijete sintaktičku pomoć za postavljanje nove zadane vrijednosti atributa. Kada ovo shvatite, možete kontrolirati broj paketa prikazanih u naredbenom retku. Budući da smo marljivi ljudi, naša naredbena linija bi trebala izgledati otprilike ovako:

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

Prirodno pitanje koje se u ovom trenutku postavlja je kako znati za postojanje svih ovih atributa. Opet, sustav naredbenog retka ima funkciju pomoći za ovu stvar. Ako zatražimo pomoć od naredbenog retka, trebali bismo vidjeti:

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

Ako odaberete argument "Ispis grupa", trebali biste vidjeti popis svih registriranih grupa TypeId. Nazivi grupa su u skladu s nazivima modula u izvornom direktoriju (iako velikim slovima). Ispisivanje svih informacija odjednom bilo bi preobimno, stoga je dostupan dodatni filtar za ispis informacija po grupama. Dakle, opet se fokusiramo na modul od točke do točke:

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

Ovdje možete pronaći dostupna imena TypeId za traženje atributa, na primjer u
--PrintAttributes = ns3 :: PointToPointChannelkao što je gore prikazano.

Еще один способ узнать об атрибутах — через Doxygen ns‑3. Там есть страница, которая перечисляет все зарегистрированные в симуляторе атрибуты.

5.2.2 Hvatanje vlastitih naredbi

Također možete dodati vlastite kuke putem sustava naredbenog retka. To se radi prilično jednostavno pomoću metode parsera naredbenog retka Dodatna vrijednost.
Upotrijebimo ovu značajku da odredimo broj paketa koji će biti prikazani na potpuno drugačiji način. Dodajmo lokalnu varijablu tzv nPaketi u funkciju glavni. Postavit ćemo ga na jedan kako bi odgovarao našem prethodnom zadanom ponašanju. Kako bismo parseru naredbenog retka omogućili promjenu ove vrijednosti, moramo uhvatiti ovu vrijednost u parseru. To činimo dodavanjem poziva Dodatna vrijednost. Idi i promijeni scenarij scratch/myfirst.cc tako da počnemo sa sljedećim kodom,

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

Pomaknite se prema dolje do točke u skripti gdje smo postavili atribut MaxPackets i promijenite ga tako da bude postavljen na varijablu nPackets umjesto konstante 1, kao što je prikazano u nastavku.

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

Sada, ako pokrenete skriptu i unesete argument -PrintHelp, trebali biste vidjeti argument novog korisnika. naveden na zaslonu pomoći. Unesi,

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

Ako želite promijeniti broj poslanih paketa, to možete učiniti postavljanjem argumenta naredbenog retka - -nPackets.

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

Sada biste trebali vidjeti

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

Sada ste poslali dva paketa. Prilično jednostavno, zar ne?
Možete vidjeti da kao ns-3 korisnik možete koristiti sustav argumenata naredbenog retka za manipulaciju globalnim vrijednostima i atributima. Ako ste autor modela, možete dodati nove atribute svojim objektima i oni će automatski biti dostupni za konfiguraciju vašim korisnicima kroz sustav naredbenog retka. Ako ste autor skripte, možete dodati nove varijable svojim skriptama i neprimjetno ih uključiti u svoj sustav naredbenog retka.

5.3 Korištenje sustava praćenja

Cjelokupna poanta modeliranja je generiranje rezultata za daljnje proučavanje, a sustav praćenja ns-3 glavni je mehanizam za to. Budući da je ns-3 C++ program, mogu se koristiti standardni načini generiranja izlaza iz C++ programa:

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

Možete čak koristiti i modul za bilježenje kako biste svom rješenju dodali malu strukturu. Mnogo je poznatih problema uzrokovanih ovim pristupom, stoga smo osigurali opći podsustav praćenja događaja za rješavanje tih problema.

Glavni ciljevi ns-3 sustava praćenja su:

  • Za osnovne zadatke, sustav praćenja trebao bi omogućiti korisniku generiranje standardnog praćenja za popularne izvore i odabir objekata koji generiraju praćenje;

  • Srednji korisnici trebali bi moći proširiti sustav praćenja za promjenu generiranog izlaznog formata ili za umetanje novih izvora praćenja, bez modificiranja jezgre simulatora;

  • Napredni korisnici mogu modificirati jezgru simulatora kako bi dodali nove izvore tragova i odvodnike. Sustav praćenja ns-3 izgrađen je na principima neovisnog praćenja izvora i prijamnika, kao i jedinstvenog mehanizma za povezivanje izvora s potrošačima.

Sustav praćenja ns-3 izgrađen je na principima neovisnog praćenja izvora i prijamnika, kao i jedinstvenog mehanizma za povezivanje izvora i prijamnika. Izvori praćenja su objekti koji mogu signalizirati događaje koji se događaju u simulaciji i omogućiti pristup temeljnim podacima od interesa. Na primjer, izvor praćenja može pokazati kada je mrežni uređaj primio paket i učiniti sadržaj paketa dostupnim zainteresiranim primateljima praćenja.

Izvori praćenja sami po sebi su beskorisni osim ako nisu "povezani" s drugim dijelovima koda koji zapravo čine nešto korisno s informacijama koje pruža odvodnik. Pratitelji su korisnici događaja i podataka koje pružaju izvori praćenja. Na primjer, možete stvoriti prijemnik praćenja koji će (kada je spojen na izvor praćenja iz prethodnog primjera) ispisati dijelove od interesa u primljenom paketu.

Obrazloženje za ovo eksplicitno odvajanje je dopustiti korisnicima da povežu nove tipove odvodnika s postojećim izvorima praćenja bez potrebe za uređivanjem i ponovnim kompajliranjem jezgre simulatora. Dakle, u gornjem primjeru, korisnik može definirati novi alat za praćenje u svojoj skripti i povezati ga s postojećim izvorom praćenja definiranim u jezgri simulacije samo uređivanjem korisničke skripte.

В этом руководстве мы пройдемся по некоторым предопределенным источникам и приемникам и покажем, как их можно настроить с наименьшими усилиями со стороны пользователя. См. Руководство ns‑3 или разделы с инструкциями для получения информации о расширенной конфигурации трассировки, включая расширение пространства имен трассировки и создание новых источников трассировки.

5.3.1 ASCII praćenje

ns-3 pruža pomoćnu funkcionalnost koja pruža sustav praćenja niske razine koji vam pomaže s detaljima pri postavljanju jednostavnih praćenja paketa. Ako omogućite ovu značajku, vidjet ćete izlaz u ASCII datotekama. Za one koji su upoznati s ns-2 izlazom, ova vrsta traga je slična van.tr, который сгенерирован множеством скриптов.

Bacimo se na posao i dodamo neke ASCII rezultate praćenja našoj skripti scratch/myfirst.cc. Neposredno prije poziva Simulator :: Run (), dodajte sljedeće retke koda:
AsciiTraceHelper ascii;

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

Kao i mnogi drugi ns-3 idiomi, ovaj kod koristi pomoćni objekt za stvaranje ASCII tragova. Drugi red sadrži dva ugniježđena poziva metode. Metoda "unutra". CreateFileStream() koristi idiom anonimnog objekta za stvaranje objekta toka datoteke na stogu (bez naziva objekta) i prosljeđuje ga pozvanoj metodi. Ići ćemo dublje u ovo u budućnosti, ali sve što trebate znati u ovom trenutku je da stvarate objekt koji predstavlja datoteku pod nazivom moj prvi.tr i prenijeti ga na ns-3. Povjeravamo ns-3 brigu o stvorenom objektu tijekom cijelog životnog vijeka, tijekom kojeg rješava probleme uzrokovane malo poznatim (namjernim) ograničenjima povezanim s C++ konstruktorima kopiranja objekata toka.

Eksterni poziv OmogućiAsciiAll() govori pomoćniku da želite uključiti ASCII praćenje u svoju simulaciju za sve veze uređaja od točke do točke i da želite (određene) primatelje praćenja da bilježe informacije o kretanju paketa u ASCII formatu.

Za one koji su upoznati s ns-2, praćeni događaji ekvivalentni su poznatim tragovima koji bilježe događaje "+", "-", "d" i "r".
Sada možete izraditi skriptu i pokrenuti je iz naredbenog retka:

$ ./waf --run scratch/myfirst

Kao i mnogo puta prije, vidjet ćete nekoliko poruka od Waf-a, a zatim “'build' completed successfully” s nekim porukama od pokrenutog programa.

При работе, программа создаст файл с именем moj prvi.tr. Zbog prirode posla WAF, prema zadanim postavkama datoteka se ne stvara u lokalnom direktoriju, već u direktoriju najviše razine repozitorija. Ako želite promijeniti stazu na kojoj se spremaju tragovi, možete upotrijebiti parametar Waf da to odredite --cwd. Nismo to učinili, pa da pogledamo ASCII datoteku praćenja myfirst.tr u vašem omiljenom uređivaču, morat ćemo otići do direktorija najviše razine našeg repozitorija.

Raščlanjivanje ASCII tragova

Tamo ima puno informacija u prilično gustom obliku, ali prvo što morate primijetiti je da se datoteka sastoji od pojedinačnih redaka. To će postati jasno vidljivo ako proširite prozor za gledanje.

Svaki redak u datoteci odgovara događaju praćenja. U ovom slučaju, pratimo događaje u redu čekanja za prijenos koji je prisutan u svakom mrežnom uređaju od točke do točke u simulaciji. Prijenosni red je red kroz koji svaki paket mora proći za vezu od točke do točke. Imajte na umu da svaki redak u datoteci praćenja počinje s jednim znakom (i ima razmak iza njega). Ovaj simbol će imati sljedeće značenje:

+: dogodila se operacija čekanja na redu čekanja uređaja;
-: dogodila se operacija dohvaćanja elementa u redu čekanja uređaja;
d: paket je ispušten, obično zato što je red bio pun;
r: Paket je primio mrežni uređaj.

Давайте более детально рассмотрим первую строку в файле трассировки. Я разобью её на части (с отступами для наглядности) и номером строки слева:

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)

Prvi odjeljak ovog proširenog događaja praćenja (redak 0) je operacija. Ovdje imamo simbol + koji odgovara operaciji čekanja za prijenos. Drugi dio (linija 1) je vrijeme simulacije, izraženo u sekundama. Možda se sjećate što smo pitali UdpEchoClientApplication početi slati pakete za dvije sekunde. Ovdje vidimo potvrdu da se to doista događa.

В следующем разделе примера трассировки (со строки 2) показывается, какой источник трассировки породил это событие (указывается трассировка пространства имен). Вы можете представлять пространство имен трассировки примерно так же, как пространстве имен файловой системы. Корнем пространства имен является Popis čvorova. Ovo odgovara spremniku kojim se upravlja u glavnom ns-3 kodu. Sadrži sve čvorove koji su stvoreni u skripti. Baš kao što datotečni sustav može imati direktorije u svom korijenu, Popis čvorova možemo imati mnogo čvorova. Dakle, linija /NodeList/0 odnosi se na nulti čvor u NodeList, koji obično smatramo "čvorom 0". Svaki čvor ima popis uređaja koji su instalirani. Ovaj popis se nalazi sljedeći u imenskom prostoru. Možete vidjeti da ovaj trag događaja dolazi iz Popis uređaja/0, koji je nulti uređaj instaliran u čvoru.

Sljedeći podniz, $ ns3 :: PointToPointNetDevice, govori koji je uređaj na poziciji nula: popis uređaja čvora nula. Podsjetimo se da je + operacija pronađena u retku 0 značila da je element dodan u red čekanja za prijenos uređaja. To se odražava u posljednjim segmentima "staze staze": TxQueue/Enqueue.

Preostali dijelovi u tragu trebali bi biti prilično intuitivni. Linije 3-4 označavaju da je paket enkapsuliran u protokolu od točke do točke. Linije 5-7 pokazuju da paket ima zaglavlje IP4 verzije i da potječe iz IP adrese 10.1.1.1 a namijenjen je za 10.1.1.2. Linije 8-9 pokazuju da ovaj paket ima UDP zaglavlje i konačno linija 10 pokazuje da je korisni teret očekivanih 1024 bajta.

Sljedeći redak u datoteci praćenja pokazuje da je isti paket izvučen iz reda čekanja za prijenos na istom čvoru.

Treći redak u datoteci praćenja pokazuje da je paket primio mrežni uređaj na hostu echo poslužitelja. U nastavku sam reproducirao događaj.

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)

Обратите внимание, что операция трассировки теперь r, а время симуляции увеличено до 2,25732 секунд. Если вы внимательно следовали инструкциям учебника, то это означает, что вы оставили DataRate сетевых устройств и задержку канала в их значениях по умолчанию. Это время должно быть знакомо, как вы уже видели в предыдущем разделе.

Unos prostora imena izvora praćenja (redak 2) izmijenjen je tako da odražava da ovaj događaj potječe iz čvora 1 (/Popis čvorova/1) i paket prima izvor praćenja (/MacRx). Trebalo bi vam biti prilično lako pratiti kretanje paketa kroz topologiju gledajući preostale tragove u datoteci.

5.3.2 PCAP praćenje

Pomoćnici uređaja ns-3 također se mogu koristiti za stvaranje datoteka praćenja u .pcap formatu. Akronim pcap (obično napisano malim slovima) označava hvatanje paketa i zapravo je API koji uključuje definiranje formata datoteke .pcap. Najpopularniji program koji može čitati i prikazati ovaj format je Wireshark (prethodno nazvan eteričan). Međutim, postoji mnogo analizatora praćenja prometa koji koriste ovaj format paketa. Potičemo korisnike da koriste mnoge dostupne alate za analizu pcap tragova. U ovom vodiču ćemo se usredotočiti na gledanje pcap tragova pomoću tcpdump.

Omogućavanje praćenja pcap-a vrši se pomoću jednog retka koda.

pointToPoint.EnablePcapAll ("myfirst");

Zalijepite ovaj redak koda nakon ASCII koda za praćenje koji smo upravo dodali scratch/myfirst.cc. Imajte na umu da smo proslijedili samo niz "myfirst", a ne "myfirst.pcap" ili nešto slično. To je zato što je parametar prefiks, a ne puni naziv datoteke. Tijekom simulacije, pomoćnik će zapravo stvoriti datoteku praćenja za svaki uređaj od točke do točke. Nazivi datoteka bit će konstruirani pomoću prefiksa, broja čvora, broja uređaja i sufiksa ".pcap".

Za naš primjer skripte, na kraju ćemo vidjeti datoteke pod nazivom "moj prvi-0-0.pcap"A"moj prvi-1-0.pcap», которые являются pcap трассировками для узла 0-устройство 0 и узла 1-устройство 0 соответственно. После того, как вы добавили строку кода для включения pcap трассировки, вы можете запустить скрипт обычным способом:

$ ./waf --run scratch/myfirst

Ako pogledate u direktorij najviše razine vaše distribucije, trebali biste vidjeti tri datoteke: ASCII datoteku praćenja moj prvi.tr, koje smo prethodno proučavali, datoteke moj prvi-0-0.pcap и moj prvi-1-0.pcap - nove pcap datoteke koje smo upravo generirali.

Čitanje izlaza pomoću tcpdump

На данный момент для просмотра файлов pcap проще всего будет использовать 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

Na smetlištu moj prvi-0-0.pcap (klijentski uređaj) možete vidjeti da je echo paket poslan nakon 2 sekunde simulacije. Ako pogledate drugi deponij (moj prvi-1-0.pcap), vidjet ćete da je paket primljen na 2,257324 sekunde. Vidjet ćete u drugom dumpu da je paket vraćen na 2.257324 sekunde, i konačno da je paket primio natrag klijent u prvom dumpu na 2.514648 sekundi.

Čitanje izlaza s Wiresharkom

Ako niste upoznati sa Wireshark, postoji web stranica s koje možete preuzeti programe i dokumentaciju: http://www.wireshark.org/. Wireshark je GUI koji se može koristiti za prikaz ovih datoteka praćenja. Ako imate Wireshark, možete otvoriti bilo koju datoteku praćenja i prikazati sadržaj kao da ste uhvatili pakete pomoću njuškala paketa.

Izvor: www.habr.com

Dodajte komentar