💾

Laboratorijska vežba – Modul 19 – Snimanje i analiza ARP, ICMP, DNS, DHCP, HTTP i TCP saobraćaja

Cilj vežbe

Snimiti saobraćaj generisan interakcijom sa Ubuntu Server VM iz Modula 18, primeniti capture i display filtere da izolujete ARP, ICMP, DNS, DHCP, HTTP i TCP handshake saobraćaj, analizirati Follow HTTP Stream, i dijagnostikovati veštački unet gubitak paketa preko TCP retransmisija.

Napomena: Ova vežba koristi Wireshark na host računaru, snimajući saobraćaj ka virtuelnim mašinama izgrađenim u Modulima 17-18. Sve snimanje se vrši isključivo na sopstvenoj laboratorijskoj mreži.

Potrebno predznanje

  • Kompletna teorija ovog modula (Teme 1–15).
  • Funkcionalna Ubuntu Server VM iz Modula 18 (statička adresa, SSH sa ključem, UFW, nginx).
  • (Opciono, za dodatni izazov) Windows klijent VM iz Modula 17.

Potrebni programi

Topologija

graph LR
    Host["Host računar<br/>(Wireshark snima ovde)"] ---|"VirtualBox mrežni adapter"| LINUX1["LINUX1 (Ubuntu Server, Modul 18)<br/>192.168.56.20"]

Koraci vežbe

Korak 1 – Pokretanje snimanja

  1. Otvorite Wireshark na host računaru.
  2. Identifikujte interfejs povezan sa VirtualBox mrežom (Tema 2) — obično nazvan slično „VirtualBox Host-Only Network".
  3. U polju za capture filter (Tema 3), unesite: host 192.168.56.20 (prilagodite stvarnoj adresi vaše LINUX1 VM iz Modula 18).
  4. Kliknite „Start capture".

Korak 2 – Generisanje ARP i ICMP saobraćaja

Sa host računara (terminal ili Command Prompt):

ping -c 4 192.168.56.20

(na Windows-u bez -c, samo ping 192.168.56.20)

U Wireshark-u, primenite display filter (Tema 4):

arp

Identifikujte ARP Request/Reply par (Tema 5) ako je ovo prva komunikacija sa tom adresom u ovoj sesiji. Zatim primenite:

icmp

Identifikujte 4 Echo Request/Reply para (Tema 6), i uporedite Identifier/Sequence number polja.

Korak 3 – Generisanje DNS saobraćaja

Sa host računara:

nslookup google.com 192.168.56.20

(ako LINUX1 nema DNS server, koristite bilo koji dostupan DNS upit, npr. obično pregledanje interneta, i podesite capture filter da ne ograničava na LINUX1 samo za ovaj korak)

Primenite display filter:

dns

Identifikujte DNS Query/Response par (Tema 7) i Transaction ID polje.

Korak 4 – Generisanje TCP handshake i HTTP saobraćaja

Sa host računara, u pretraživaču ili preko curl:

curl http://192.168.56.20

Primenite display filter:

tcp.flags.syn == 1 && ip.addr == 192.168.56.20

Identifikujte SYN i SYN-ACK pakete (Tema 9). Zatim primenite:

http

Pronađite GET zahtev i 200 OK odgovor. Desni klik na jedan od paketa → Follow → HTTP Stream (Tema 11, 13) da vidite kompletan, čitljiv zahtev i HTML odgovor.

Korak 5 – Generisanje HTTPS saobraćaja i analiza SNI

Sa host računara, posetite bilo koji HTTPS sajt u pretraživaču (uklonite privremeno capture filter ili pokrenite novo snimanje bez njega, jer sajt neće biti na adresi 192.168.56.20).

Primenite display filter:

tls.handshake.type == 1

Pronađite Client Hello paket i proširite Handshake Protocol sekciju da pronađete Server Name polje (Tema 12) — potvrdite da odgovara imenu sajta koji ste posetili. Pokušajte Follow → TLS Stream na narednim paketima i uporedite (nečitljiv) rezultat sa čitljivim HTTP primerom iz Koraka 4.

Korak 6 – Simulacija gubitka paketa i analiza retransmisija

Na LINUX1 (Modul 18 veština), privremeno uvedite veštački gubitak paketa:

sudo tc qdisc add dev enp0s3 root netem loss 15%

Ponovo pokrenite snimanje sa capture filterom host 192.168.56.20, zatim sa host računara prenesite veći fajl preko SCP-a (Modul 18):

scp velikifajl.zip <korisnik>@192.168.56.20:/home/<korisnik>/

Nakon završetka (ili prekida) prenosa, u Wireshark-u primenite:

tcp.analysis.retransmission

Prebrojte retransmisije i uporedite sa ukupnim brojem paketa u snimku (Statistics → Capture File Properties, ili donji desni ugao prozora).

Uklonite simulaciju nakon testa:

sudo tc qdisc del dev enp0s3 root netem

Korak 7 – Statistics pregled

Otvorite Statistics → Conversations na snimku iz Koraka 6 i identifikujte koji par adresa je razmenio najviše bajtova. Zatim otvorite Statistics → I/O Graph (Tema 14) i identifikujte vizuelni pad u protoku tokom perioda kada je netem simulacija bila aktivna.

Korak 8 – Dijagnostička vežba: mreža naspram aplikacije

  1. Zamislite scenario u kome korisnik prijavljuje da je pristup nginx veb serveru na LINUX1 „spor".
  2. Bez simulacije iz Koraka 6 (uklonjene u tom koraku), ponovo snimite saobraćaj tokom pristupa serveru.
  3. Proverite redom (Tema 15): I/O Graph, tcp.analysis.retransmission, dns, tcp.flags.syn == 1, i Follow HTTP Stream (vreme između zahteva i odgovora).
  4. Objasnite svojim rečima, na osnovu ovog redosleda, kako biste razlikovali „mrežni" problem (kao u Koraku 6) od „aplikativnog" problema (spor server koji generiše odgovor) da ste dobili samo prijavu „portal je spor", bez znanja unapred šta je uzrok.

Korak 9 – Čuvanje snimka

File → Save As, sačuvajte snimak iz Koraka 6 (sa simuliranim gubitkom paketa) kao .pcapng fajl radi buduće reference ili predaje uz zadatke.

Komande za proveru

(u Wireshark display filter polju)
arp
icmp
dns
bootp
tcp.flags.syn == 1
tcp.analysis.retransmission
tls.handshake.type == 1
http

Najčešće greške

GreškaUzrokRešenje
Wireshark ne prikazuje nijedan interfejsNpcap (Windows) nije instaliran, ili korisnik nije u wireshark grupi (Linux)Proveriti uputstvo-za-instalaciju-alata.md
Nema snimljenog saobraćajaPogrešan interfejs izabran, ili capture filter previše restriktivanProveriti Korak 1, privremeno ukloniti filter da potvrdite da saobraćaj uopšte postoji
ARP paketi se ne pojavljujuAdresa je već u ARP kešu iz prethodne komunikacijeSačekajte da keš istekne, ili koristite arp -d/ip neigh flush (Moduli 17-18) da ga ručno obrišete pre testa
Nema retransmisija u Koraku 6 uprkos netemtc netem primenjen na pogrešan interfejs, ili nije uklonjen iz prethodnog testa pa je konfiguracija dupliranaProveriti sudo tc qdisc show dev enp0s3 na LINUX1
SNI polje nije vidljivo u Client HelloSajt koristi Encrypted Client Hello (ECH), noviju tehnologiju koja i SNI enkriptujeProbajte drugi, stariji sajt bez ECH podrške za svrhu ove vežbe

Postupak rešavanja problema (troubleshooting)

  1. Potvrdite da Wireshark snima na ispravnom interfejsu (Tema 2) generisanjem poznatog saobraćaja (ping) i proverom da se pojavljuje u snimku.
  2. Proverite capture filter sintaksu ako se očekivani saobraćaj uopšte ne pojavljuje.
  3. Koristite display filtere postepeno, od širih (tcp) ka užim (tcp.analysis.retransmission), da lakše uočite gde se očekivani saobraćaj „gubi" iz prikaza.
  4. Za probleme sa tc netem, uvek proverite tc qdisc show pre i posle svake izmene da potvrdite tačno stanje.

Završna provera

Vežba je uspešno završena kada:

  1. Uspešno ste identifikovali ARP, ICMP, DNS i TCP handshake pakete u sopstvenom snimku.
  2. Follow HTTP Stream prikazuje čitljiv zahtev/odgovor, dok TLS Stream ostaje nečitljiv.
  3. Broj retransmisija sa aktivnom netem simulacijom je značajno veći nego bez nje.
  4. Objašnjena je razlika u dijagnostičkom pristupu između mrežnog i aplikativnog uzroka sporosti (Korak 8).

Dodatni izazov

Ponovite Korak 6 sa različitim procentima gubitka paketa (loss 5%, loss 30%) i dokumentujte kako se broj retransmisija i ukupno trajanje SCP prenosa menjaju sa svakim nivoom. Dodatno, istražite tc netem delay 200ms (umesto loss) i uporedite koji efekat (gubitak naspram kašnjenja) izaziva više retransmisija u Wireshark snimku, i objasnite zašto na osnovu koncepata latencije naspram packet loss-a iz Modula 15.

Rešenje

Kompletno rešenje ove vežbe nalazi se u /resenja/modul-19/04-laboratorijska-vezba-resenje.md.

📖 Prikaži rešenje

Rešenje laboratorijske vežbe – Modul 19

Korak 2 – ARP i ICMP

ARP par (ako je prva komunikacija):

No.  Time    Source             Destination        Protocol  Info
1    0.000   HostMachine_xx     Broadcast          ARP       Who has 192.168.56.20? Tell 192.168.56.1
2    0.001   PCSSystemtec_xx    HostMachine_xx     ARP       192.168.56.20 is at 08:00:27:aa:bb:cc

ICMP parovi (filter icmp):

No.  Time    Source          Destination     Protocol  Info
3    0.002   192.168.56.1    192.168.56.20   ICMP      Echo (ping) request  id=0x0001, seq=1/256
4    0.003   192.168.56.20   192.168.56.1    ICMP      Echo (ping) reply    id=0x0001, seq=1/256
5    1.003   192.168.56.1    192.168.56.20   ICMP      Echo (ping) request  id=0x0001, seq=2/512
6    1.004   192.168.56.20   192.168.56.1    ICMP      Echo (ping) reply    id=0x0001, seq=2/512

(Identifier ostaje isti kroz celu ping sesiju; Sequence number raste sa svakim paketom.)

Korak 3 – DNS

No.  Time    Source          Destination     Protocol  Info
10   2.100   192.168.56.1    8.8.8.8         DNS       Standard query 0x1a2b A google.com
11   2.115   8.8.8.8         192.168.56.1    DNS       Standard query response 0x1a2b A 142.250.x.x

(Transaction ID 0x1a2b je identičan u oba paketa, povezujući upit sa odgovorom.)

Korak 4 – TCP handshake i HTTP

No.  Time    Source          Destination     Protocol  Info
20   3.000   192.168.56.1    192.168.56.20   TCP       [SYN] Seq=0
21   3.001   192.168.56.20   192.168.56.1    TCP       [SYN, ACK] Seq=0 Ack=1
22   3.001   192.168.56.1    192.168.56.20   TCP       [ACK] Seq=1 Ack=1
23   3.002   192.168.56.1    192.168.56.20   HTTP      GET / HTTP/1.1
24   3.003   192.168.56.20   192.168.56.1    HTTP      HTTP/1.1 200 OK

Follow HTTP Stream (skraćeno):

GET / HTTP/1.1
Host: 192.168.56.20
User-Agent: curl/8.x

HTTP/1.1 200 OK
Server: nginx/1.24.0
Content-Type: text/html

<!DOCTYPE html>
<html>
<head><title>Welcome to nginx!</title></head>
...

Kompletan, čitljiv sadržaj potvrđuje da HTTP putuje neenkriptovano (Tema 11).

Korak 5 – HTTPS i SNI

Client Hello (filter tls.handshake.type == 1):

Transport Layer Security
    TLSv1.3 Record Layer: Handshake Protocol: Client Hello
        Handshake Protocol: Client Hello
            Extension: server_name
                Server Name Indication extension
                    Server Name: www.primer-sajt.com

Follow TLS Stream (skraćeno):

......{binarni, nečitljivi bajtovi}......

Za razliku od HTTP Stream-a, TLS Stream ne prikazuje nikakav čitljiv tekst — potvrđuje enkripciju (Tema 12).

Korak 6 – Simulacija gubitka paketa

Bez netem:

$ scp velikifajl.zip student@192.168.56.20:/home/student/
velikifajl.zip   100%   50MB   45.2MB/s   00:01
tcp.analysis.retransmission → 0 rezultata (od ukupno ~850 paketa)

Sa sudo tc qdisc add dev enp0s3 root netem loss 15%:

$ scp velikifajl.zip student@192.168.56.20:/home/student/
velikifajl.zip   100%   50MB   2.1MB/s   00:24
tcp.analysis.retransmission → 187 rezultata (od ukupno ~2.400 paketa, zbog retransmisija)

Objašnjenje: Sa 15% veštački unetog gubitka paketa, brzina prenosa je pala sa ~45MB/s na ~2MB/s, a broj retransmisija je skočio sa 0 na 187 — direktna, merljiva potvrda da gubitak paketa drastično usporava TCP prenos, jer TCP mora ponovo da šalje svaki izgubljeni segment i pritom smanjuje veličinu prozora (congestion window) kao odgovor na percipirano zagušenje.

Uklanjanje simulacije:

$ sudo tc qdisc del dev enp0s3 root netem
$ tc qdisc show dev enp0s3
qdisc noqueue 0: root refcnt 2

Korak 7 – Statistics

Conversations: Par (Host računar ↔ LINUX1) pokazuje najveći broj bajtova, odgovarajući SCP prenosu.

I/O Graph: Grafikon pokazuje visok, stabilan protok tokom prenosa bez netem, i isprekidan, značajno niži protok sa vidljivim „zupčastim" padovima tokom perioda sa aktivnom netem simulacijom — vizuelna potvrda uticaja gubitka paketa na protok.

Korak 8 – Dijagnostička vežba

Prateći redosled iz Teme 15 na snimku bez netem simulacije (čist pristup portalu):

  1. I/O Graph — stabilan, bez anomalija.
  2. tcp.analysis.retransmission — 0 ili zanemarljivo malo rezultata.
  3. dns — brza rezolucija.
  4. tcp.flags.syn == 1 — SYN-ACK stiže odmah.
  5. Follow HTTP Stream — ako i pored svega navedenog vreme između GET zahteva i prvog bajta HTTP odgovora i dalje traje sekundama, to izoluje problem na samu aplikaciju (serversku obradu zahteva), ne na mrežu.

Objašnjenje: Ako su koraci 1-4 svi „čisti" (bez anomalija), a Follow HTTP Stream i dalje pokazuje sporo generisanje odgovora, dokazano je da mreža nije uzrok — sledeći korak istrage bi bio na serverskoj strani (nginx konfiguracija, backend aplikacija, baza podataka), ne dalja mrežna dijagnostika. Ovo je upravo razlika između scenarija iz Koraka 6 (mreža jasno uzrok, potvrđeno retransmisijama) i ovog scenarija (mreža isključena kao uzrok, sumnja pada na aplikaciju).

Rešenje dodatnog izazova

netem parametarRetransmisijeTrajanje prenosa
bez netem01s
loss 5%~404s
loss 30%~52090s
delay 200ms0-2 (zanemarljivo)~3s (sporije zbog RTT-a, ali bez retransmisija)

Objašnjenje: loss direktno uzrokuje retransmisije jer paketi stvarno nestaju i moraju se ponovo poslati. delay sam po sebi (bez gubitka) ne uzrokuje značajne retransmisije — TCP i dalje prima sve pakete, samo kasnije; retransmisija bi nastala tek ako je kašnjenje toliko veliko da TCP retransmission timer (RTO) istekne pre nego što ACK stigne, što je mnogo ređi scenario od direktnog gubitka paketa. Ovo potvrđuje razliku između latencije i packet loss-a iz Modula 15 — oba degradiraju performanse, ali kroz različite mehanizme, i Wireshark jasno pokazuje tu razliku kroz prisustvo (ili odsustvo) retransmisija.