Puteți utiliza comanda traceroute în Linux pentru a localiza exact unde apar întârzierile pe traseul unui pachet de date prin rețea și pentru a remedia problemele legate de conexiunile lente. În acest articol, vă vom explica cum!
Cum funcționează analiza traceroute
Înțelegerea mecanismului de funcționare al comenzii traceroute simplifică interpretarea rezultatelor. Cu cât un pachet de rețea parcurge un traseu mai complex pentru a ajunge la destinație, cu atât este mai dificil să identificăm locul exact în care apar întârzierile.
O rețea locală (LAN) dintr-o organizație mică poate fi relativ simplă, având, de exemplu, un server și unul sau două routere. Complexitatea crește odată cu trecerea la o rețea de arie largă (WAN), care asigură comunicarea între diferite locații sau prin intermediul internetului. În acest caz, pachetul de date traversează o multitudine de echipamente hardware, cum ar fi routere și gateway-uri, fiind redirecționat de fiecare dată.
Antetele de metadate ale pachetelor de date specifică lungimea pachetului, originea sa, destinația, protocolul utilizat și alte detalii relevante. Structura exactă a antetului este definită de protocolul folosit. Cunoașterea protocolului ne permite să determinăm începutul și sfârșitul fiecărui câmp din antet și să interpretăm metadatele.
Traceroute utilizează suita de protocoale TCP/IP și trimite pachete User Datagram Protocol. Antetul include un câmp numit Time to Live (TTL), reprezentat de o valoare întreagă pe 8 biți. Deși numele său ar putea sugera contrariul, TTL reprezintă un număr, nu o durată de timp.
Un pachet de date călătorește de la sursă la destinație, trecând prin diverse routere. De fiecare dată când pachetul ajunge la un router, acesta scade valoarea contorului TTL. Dacă valoarea TTL ajunge la unu, routerul care primește pachetul reduce această valoare la zero. Pachetul este apoi eliminat, nefiind direcționat spre următorul punct, deoarece a „expirat”.
Routerul trimite un mesaj Internet Control Message Protocol (ICMP) de tip Time Exceeded înapoi la sursa pachetului pentru a o informa că pachetul a expirat. Mesajul Time Exceeded conține antetul original și primii 64 de biți ai datelor pachetului original. Aceste detalii sunt specificate în documentul Request for Comments 792, la pagina șase.
Prin urmare, dacă traceroute trimite un pachet cu valoarea TTL setată la unu, pachetul va ajunge doar la primul router înainte de a fi eliminat. Sursa va primi un mesaj ICMP Time Exceeded de la router și va putea înregistra timpul necesar pentru această călătorie dus-întors.
Apoi, procesul se repetă cu valoarea TTL setată la 2, urmând ca pachetul să eșueze după două salturi. Traceroute crește apoi valoarea TTL la trei și încearcă din nou. Acest proces se repetă până când se ajunge la destinație sau se atinge numărul maxim de salturi testate (30 în mod implicit).
Unele routere nu răspund corect
Există routere care au anumite erori de funcționare. În loc să elimine pachetele cu valoarea TTL zero și să trimită un mesaj ICMP Time Exceeded, încearcă să redirecționeze pachetele.
Conform informațiilor furnizate de Cisco, unii Furnizori de Servicii de Internet (ISP) limitează numărul de mesaje ICMP pe care routerele lor le transmit.
Unele dispozitive sunt configurate să nu trimită niciodată pachete ICMP, pentru a preveni participarea neintenționată la un atac de tip denial-of-service, cum ar fi un atac Smurf.
Traceroute are un timp de așteptare implicit de cinci secunde pentru răspunsuri. Dacă nu primește un răspuns în acest interval, încercarea este abandonată. Acest lucru înseamnă că răspunsurile de la routerele foarte lente sunt ignorate.
Instalarea traceroute
Comanda traceroute este preinstalată pe Fedora 31, dar trebuie instalată separat pe Manjaro 18.1 și Ubuntu 18.04. Pentru a instala traceroute pe Manjaro, folosiți următoarea comandă:
sudo pacman -Sy traceroute
Pentru a instala traceroute pe Ubuntu, folosiți următoarea comandă:
sudo apt-get install traceroute
Utilizarea traceroute
După cum am explicat, scopul comenzii traceroute este de a obține un răspuns de la fiecare router de pe traseul dintre computerul dvs. și destinație. Unele routere pot fi setate să nu ofere informații, în timp ce altele pot divulga detalii despre traseu fără probleme.
Vom efectua, de exemplu, un test traceroute către site-ul web al Castelului Blarney din Irlanda, cunoscut pentru celebra Piatră Blarney. Legenda spune că sărutarea Pietrei Blarney aduce noroc în elocvență. Să vedem dacă routerele pe care le vom întâlni în cale sunt la fel de „vorbărețe”.
Introducem comanda următoare:
traceroute www.blarneycastle.ie
Prima linie ne oferă informații precum:
Destinația și adresa sa IP.
Numărul maxim de hop-uri pe care traceroute le va încerca înainte de a renunța.
Dimensiunea pachetelor UDP pe care le trimitem.
Toate celelalte linii conțin informații despre fiecare hop. Observăm că există 11 hop-uri între computerul nostru și site-ul web al Castelului Blarney. Hop-ul 11 ne confirmă că am ajuns la destinație.
Formatul fiecărei linii de hop este următorul:
Numele dispozitivului sau, dacă dispozitivul nu se identifică, adresa IP.
Adresa IP.
Timpul necesar dus-întors pentru fiecare dintre cele trei teste. Dacă apare un asterisc, înseamnă că nu s-a primit un răspuns pentru testul respectiv. Dacă dispozitivul nu răspunde deloc, vor apărea trei asteriscuri și nu va fi afișat niciun nume de dispozitiv sau adresă IP.
Să analizăm rezultatele noastre:
Hop 1: primul punct de acces este routerul DrayTek Vigor din rețeaua locală. Acesta este modul în care pachetele noastre UDP părăsesc rețeaua locală și intră în internet.
Hop 2: Acest dispozitiv nu a răspuns. Poate este configurat să nu trimită pachete ICMP sau poate că răspunsul a întârziat și a fost ignorat de traceroute.
Hop 3: Un dispozitiv a răspuns, dar nu a furnizat numele, doar adresa IP. Observăm prezența unui asterisc în această linie, ceea ce înseamnă că nu am primit răspuns la toate cele trei solicitări. Acest lucru ar putea indica pierderea de pachete.
Hop 4 și 5: Alte hop-uri anonime.
Hop 6: Această linie conține mai multe detalii, deoarece un dispozitiv diferit de la distanță a gestionat fiecare dintre cele trei solicitări UDP. Pentru fiecare dispozitiv, au fost afișate numele și adresele IP. Acest lucru se poate întâmpla într-o rețea cu trafic intens, unde există mai multe dispozitive hardware care gestionează volume mari de date. Acest hop este localizat în rețeaua unuia dintre cei mai mari ISP din Marea Britanie, fiind mai puțin probabil ca aceeași componentă hardware să gestioneze toate cele trei solicitări.
Hop 7: Acest hop marchează ieșirea pachetelor noastre UDP din rețeaua ISP.
Hop 8: Din nou, primim adresa IP, dar nu și numele dispozitivului. Toate cele trei teste au avut succes.
Hop 9 și 10: Încă două hop-uri anonime.
Hop 11: Am ajuns la site-ul Castelului Blarney. Castelul se află în Cork, Irlanda, dar conform Geolocalizării adreselor IP, serverul web este situat în Londra.
Rezultatele sunt mixte. Unele dispozitive au colaborat, altele au răspuns fără a divulga numele, iar unele au rămas complet anonime.
Cu toate acestea, am ajuns la destinație, știm că se află la 11 hop-uri distanță, iar timpul total de călătorie dus-întors a fost de aproximativ 14 milisecunde.
Ascunderea numelor dispozitivelor
După cum am văzut, includerea numelor dispozitivelor poate duce uneori la un afișaj aglomerat. Pentru a facilita vizualizarea datelor, putem folosi opțiunea -n (fără mapare).
Pentru a exemplifica, introducem următoarea comandă:
traceroute -n blarneycastle.ie
Acest lucru simplifică identificarea timpilor de călătorie mai lungi, care ar putea indica un blocaj.
Hop-ul 3 devine puțin suspect. Ultima dată, a răspuns doar de două ori, iar de data aceasta, doar o singură dată. Desigur, acest aspect este în afara controlului nostru.
Cu toate acestea, dacă investigăm propria rețea corporativă, ar trebui să analizăm mai atent acest nod.
Modificarea valorii de expirare a traceroute
Dacă extindem timpul de așteptare implicit (cinci secunde), am putea primi mai multe răspunsuri. Pentru a face acest lucru, vom folosi opțiunea -w (timpul de așteptare) pentru a-l modifica la șapte secunde (rețineți că acesta este un număr cu virgulă mobilă).
Introducem comanda următoare:
traceroute -w 7.0 blarneycastle.ie
Această modificare nu a avut un impact semnificativ, deci este posibil ca răspunsurile să expire în continuare. De asemenea, este posibil ca hop-urile anonime să fie intenționat configurate să nu ofere informații.
Setarea numărului de teste
În mod implicit, traceroute trimite trei pachete UDP la fiecare hop. Putem folosi opțiunea -q (număr de interogări) pentru a ajusta acest număr.
Pentru a accelera testul traceroute, vom reduce numărul de pachete UDP trimise la fiecare hop la unu, folosind comanda:
traceroute -q 1 blarneycastle.ie
Astfel, se va trimite o singură solicitare la fiecare hop.
Setarea valorii TTL inițiale
Putem seta valoarea inițială a TTL la o valoare diferită de unu pentru a omite anumite hop-uri. În mod normal, valorile TTL sunt setate la unu pentru primul set de teste, apoi la doi pentru următorul set, și așa mai departe. Dacă setăm TTL la cinci, primul test va încerca să ajungă la hop-ul cinci, sărind peste hop-urile de la unu la patru.
Deoarece știm că site-ul web al Castelului Blarney se află la 11 hop-uri de acest computer, putem introduce următoarea comandă pentru a merge direct la hop-ul 11:
traceroute -f 11 blarneycastle.ie
Această comandă ne oferă un raport concis despre starea conexiunii la destinație.
Fiți precauți
Traceroute este un instrument eficient pentru a analiza rutarea rețelei, a verifica viteza conexiunii sau pentru a identifica blocajele. Sistemul de operare Windows oferă, de asemenea, o comandă similară numită „tracert”.
Cu toate acestea, nu este recomandat să trimiteți un număr mare de pachete UDP către dispozitive necunoscute. De asemenea, trebuie evitată utilizarea comenzii traceroute în scripturi sau procese automatizate nesupravegheate.
Numărul mare de pachete trimise de traceroute într-o rețea poate avea un impact negativ asupra performanței acesteia. Prin urmare, în afara situațiilor de remediere a problemelor, este recomandată utilizarea comenzii în afara orelor normale de lucru.