L'algoritmo Nagle, dal nome dell'ingegnere John Nagle, è stato progettato per ridurre la congestione della rete causata da problemi di pacchetti di piccole dimensioni con le applicazioni TCP. Le implementazioni UNIX hanno iniziato a utilizzare l'algoritmo Nagle negli anni '80 e oggi rimane una caratteristica standard di TCP.
Come funziona l'algoritmo di Nagle
L'algoritmo Nagle elabora i dati sul lato di invio delle applicazioni TCP con un metodo chiamato nagling. Rileva messaggi di piccole dimensioni e li accumula in pacchetti TCP più grandi prima di inviare i dati attraverso il cavo. Questo processo evita la generazione di numeri inutilmente grandi di piccoli pacchetti.
Le specifiche tecniche per l'algoritmo Nagle sono state pubblicate nel 1984 come RFC 896. Le decisioni su quanti dati accumulare e quanto tempo attendere tra gli invii sono fondamentali per le sue prestazioni complessive.
I vantaggi di Nagling
Nagling può utilizzare in modo efficiente la larghezza di banda di una connessione di rete a scapito dell'aggiunta di ritardi o latenza. Un esempio descritto in RFC 896 illustra i potenziali vantaggi della larghezza di banda e il motivo della sua creazione:
- Se un'applicazione TCP che intercetta le sequenze di tasti della tastiera desidera comunicare ogni carattere digitato a un destinatario, può generare una serie di messaggi, ciascuno contenente 1 byte di dati.
- Prima che questi messaggi possano essere inviati attraverso la rete, ognuno deve essere impacchettato con le informazioni di intestazione TCP come richiesto da TCP/IP. Ogni intestazione ha una dimensione compresa tra 20 e 60 byte.
- Senza seccature, questa applicazione di esempio genererebbe messaggi di rete costituiti dal 95% o più di informazioni di intestazione (almeno 20 byte su 21) e dal 5% o meno di dati effettivi dalla tastiera del mittente. Utilizzando l'algoritmo Nagle, gli stessi dati potrebbero essere consegnati utilizzando meno messaggi, con conseguente notevole risparmio di larghezza di banda.
Le applicazioni controllano il loro utilizzo dell'algoritmo Nagle con l'opzione di programmazione socket TCP_NODELA. I sistemi Windows, Linux e Java normalmente abilitano Nagle per impostazione predefinita. Pertanto, le applicazioni scritte per quegli ambienti devono specificare TCP_NODELAY per disattivare l'algoritmo.
Limitazioni
Le applicazioni che richiedono una risposta di rete rapida, come videochiamate e giochi online, potrebbero non funzionare correttamente quando Nagle è abilitato. I ritardi causati mentre l'algoritmo impiega più tempo per assemblare blocchi di dati più piccoli possono innescare un notevole ritardo visivamente su uno schermo o in un flusso audio digitale. Tali applicazioni in genere disabilitano Nagle.
Questo algoritmo è stato originariamente sviluppato in un momento in cui le reti di computer supportavano una larghezza di banda inferiore rispetto a quella attuale. L'esempio sopra descritto era basato sulle esperienze di John Nagle alla Ford Aerospace all'inizio degli anni '80, dove i compromessi fastidiosi sulla rete Ford a lunga distanza, lenta, pesantemente caricata, avevano un buon senso. Ci sono sempre meno situazioni oggi in cui le applicazioni di rete possono trarre vantaggio dal suo algoritmo.
L'algoritmo Nagle è utilizzabile solo con TCP. Altri protocolli, come UDP, non lo supportano.