Perdita pacchetti e packet loss test

Cos'è la perdita di pacchetti, da cosa può dipendere e come verificare quando si presenta. Packet loss test con i comandi del sistema operativo, utilità dedicate e strumenti online.

La rete Internet è l’esempio per eccellenza di rete a commutazione di pacchetto in cui l’informazione da trasferire viene “spezzettata” in porzioni trasmesse individualmente e in sequenza. Queste porzioni di dati vengono chiamati pacchetti e ciascuno di essi, oltre al payload ovvero i dati veri e propri da trasferire, consta di un’intestazione o header.
L’header contiene l’indirizzo del trasmettitore, quello del ricevitore, la vita del pacchetto, i dati che riguardano l’assemblaggio con gli altri pacchetti e così via.

Per raggiungere il dispositivo (host) di destinazione i pacchetti imboccano una o più strade a seconda delle indicazioni contenute nelle tabelle di instradamento o tabelle di routing.

L’insieme di protocolli utilizzati per una rete a commutazione di pacchetto qual è Internet si chiama TCP/IP ed è nato nel 1981.
Quando non tutti i pacchetti dati arrivano a destinazione, TCP si occupa di inviare nuovamente i pacchetti persi o danneggiati. La ricezione di un pacchetto ACK (acknowledgment) inviato dal destinatario conferma che la trasmissione del singolo dato è andata a buon fine.

Perdita pacchetti o packet loss: cosa significa

Quando uno o più pacchetti dati inviati dal trasmettitore non vengono ricevuti dall’host di destinazione si parla di perdita di pacchetti o packet loss in inglese.

Con la tipica navigazione Web basata su TCP, quando vengono persi dei pacchetti il mittente si rende conto che il suo messaggio non è stato consegnato correttamente e lo reinvia fino a quando non viene ricevuto correttamente o fin quando desiste in forza del timeout impostato per poi ricominciare eventualmente l’intero processo di invio.

A differenza del TCP, UDP è un protocollo di tipo connectionless, non gestisce il riordinamento dei pacchetti né la ritrasmissione di quelli persi. È quindi meno affidabile per trasferire i dati da un host all’altro ma nonostante questo è ampiamente utilizzato: avrete certamente trovato riferimenti a UDP nelle applicazioni per lo streaming audio e video, nelle applicazioni VoIP, nel gaming online e in tutti quei contesti in cui le prestazioni sono essenziali.

UDP è un protocollo di comunicazione “leggero”: non effettuando tutte le verifiche sui pacchetti dati in arrivo e non richiedendo una nuova trasmissione dei pacchetti eventualmente andati perduti, UDP sa essere molto performante.
Applicazioni come quelle che abbiamo citato in precedenza tollerano bene qualche perdita di dati preferendo uno stream di dati che fluisce senza interruzioni.

Le cause della perdita di pacchetti sono spesso le stesse cause della maggior parte dei problemi di rete: spesso il packet loss è figlio di una situazione di congestione quando troppi utenti stanno utilizzando un insieme di router e questi non riescono a smaltire lo smistamento di tutti i pacchetti.

I pacchetti possono essere persi già entro la LAN, a livello della rete dell’operatore di telecomunicazioni che fornisce il servizio di accesso a Internet oppure esternamente ad essa. La perdita di pacchetti può verificarsi anche sulla rete alla quale è connesso il server di destinazione oppure sulla rete locale usata da quest’ultimo.
In locale può dipendere dall’utilizzo di una scheda di rete difettosa, da problemi hardware sul PC in uso, da problematiche sul router locale (compresa la congestione della rete locale), dall’utilizzo di una connessione WiFi instabile.

In un altro articolo abbiamo visto come verificare cosa non va quando risulta impossibile raggiungere un sito Web.

A volte i pacchetti non sono veramente persi perché alla fine arrivano a destinazione; giungono però così in ritardo che vengono considerati ormai perduti.
Gli strumenti per verificare la velocità della connessione di rete si chiamano speed test: i migliori misurano anche la latenza ossia il tempo richiesto dai pacchetti dati per raggiungere correttamente il sistema di destinazione e tornare indietro (ping) e il jitter ovvero la variazione che interessa il dato relativo alla latenza (quanto il valore del ping è più o meno stabile). Latenza e jitter dovrebbero mantenersi su valori tendenzialmente “bassi”.
Il concetto di “basso” è ovviamente relativo: innanzi tutto va considerata la tipologia di connessione Internet che si sta utilizzando (fibra FTTH, FTTC, FWA, ADSL, satellitare, dati mobile,…) e poi il server sul quale si sta effettuando il test (quanto è fisicamente vicino? Con quale tipologia di connessione è collegato alla rete Internet?…).

Packet loss test: come eseguirlo

Uno dei migliori strumenti per verificare se si verifica una perdita di pacchetti è il comando ping: è presente in tutti i sistemi operativi ed accetta sia indirizzi IP privati che pubblici.

Per impostazione predefinita il comando ping in Windows invia quattro pacchetti dati di test (ICMP) da 32 byte ciascuno e calcola la latenza in millisecondi (ms).
Quando l’host specificato come destinatario del test non invia alcuna risposta, ping mostra il messaggio Richiesta scaduta.
Per eseguire il test basta digitare cmd nella casella di ricerca di Windows quindi premere Invio e scrivere ping -t seguito dall’indirizzo dell’host oggetto di verifica (si può anche premere Windows+R e scrivere il comando nel campo Apri).
Digitando ping -t seguito dall’indirizzo IP del router locale (esempio: ping -t 192.168.1.1 oppure ping -t 192.168.0.1) si verifica in quanti millisecondi tale dispositivo risponde all’invio di pacchetti di test ICMP. Risposte tardive o richieste scadute sono imputabili alla presenza di fenomeni di congestione nella rete locale (banda esaurita dai dispositivi locali che stanno effettuando trasferimenti di dati) o ad esempio, tra gli altri motivi, a un collegamento WiFi inaffidabile, alla troppa distanza dal router wireless o dall’access point,…

Nel caso in cui si fosse indicato l’indirizzo IP pubblico di un host remoto (ad esempio un server Web), va detto che non tutti rispondono alle richieste ping pur essendo perfettamente funzionanti e raggiungibili. In questo caso si avrà un packet loss pari al 100% quando in realtà l’host di destinazione risulta perfettamente raggiungibile.

Il comando ping -t invia pacchetti ICMP senza alcun limite: per interrompere il test basta premere CTRL+C. Tenendo aperta la finestra del prompt dei comandi in cui si è lanciato il comando ping -t si può tuttavia verificare l’esatto momento in cui si presenta la perdita di pacchetti o l’aumento della latenza in millisecondi.

MTR (Matt’s traceroute) è un’utilità da riga di comando che combina il comando ping con un meccanismo di verifica della rotta seguita dai pacchetti dati (traceroute). Nasce come programma Linux che in Windows può essere eseguito ad esempio utilizzando WSL 2 (WinMTR non offre purtroppo lo stesso ventaglio di funzioni).

Digitando ad esempio mtr google.it apparirà una schermata simile a quella in figura, in continuo aggiornamento.

Come si vede, a sinistra MTR restituisce gli indirizzi IP degli host (vengono automaticamente risolti quando possibile) che vengono via via attraversati dai pacchetti lungo il loro percorso fino alla destinazione (hop) mentre sotto la colonna Lost% è riportata la percentuale dei pacchetti persi in corrispondenza dei singoli hop.
Esaminando le indicazioni Lost% è possibile capire subito quali host incontrati lungo il percorso sono verosimilmente responsabili del packet loss.

Ancora più a destra sono riportati il numero di test eseguiti (pacchetti inviati, Snt) e i valori di latenza (ultimo rilevato, medio, migliore, peggiore, deviazione standard).
Come accennato in precedenza il valore di latenza può aumentare, talvolta anche in modo considerevole, tra i primi hop (rete del proprio operatore di telecomunicazioni) e i passaggi finali (rete dell’host remoto).

MTR ha il vantaggio che permette di simulare la connessione anche su porte specifiche usando i protocolli indicati. Il comando che segue, ad esempio, stabilisce una connessione TCP sulla porta 443 (HTTPS) verso il server di Google (motore di ricerca):

mtr -T -P 443 www.google.it

Affinché il comando venga correttamente eseguito è necessario rispettare le maiuscole.
Con un WHOIS è inoltre possibile stabilire con certezza a quali soggetti appartengono i vari sistemi, a partire dal corrispondente indirizzo IP pubblico. Ne parliamo anche nell’articolo in cui vediamo come trovare a chi è intestato un dominio.
Nel traceroute di MTR è possibile trovare anche indirizzi IP privati: oltre a quelli della propria rete locale anche gli operatori usano IP privati per smistare i pacchetti dati prima di inoltrarli a host esterni.

Sulle distribuzioni Debian, Ubuntu e derivate MTR si può installare digitando semplicemente sudo apt install mtr -y nella finestra del terminale.

In ultimo citiamo anche Packet Loss Test online, uno strumento che permette di verificare la presenza di eventuali pacchetti persi. Suggeriamo di scegliere Germany come server di test.

Accanto a Select a Preset Approximation si può scegliere un profilo di test che permetta di simulare il trasferimento di video in streaming 720p o 1080p, l’utilizzo di una soluzione per la videoconferenza come Zoom, una connessione VoIP o alcuni tra i principali titoli gaming.
Optando per uno dei profili presentati, il test regola la dimensione dei pacchetti, la frequenza, la durata e il ritardo da considerare come “accettabile”.

Ti consigliamo anche

Link copiato negli appunti