L’algoritmo di Nagle è un sistema utilizzato per migliorare l’efficienza delle reti, in particolare Internet. Il sistema prevede di evitare che i dati vengano inviati in batch inutilmente piccoli, il che aumenta anche il numero di batch inviati. Sebbene abbia i suoi usi, l’algoritmo di Nagle può interagire male con altri elementi delle comunicazioni di rete.
Creato da un uomo di nome John Nagle, l’algoritmo di Nagle funziona con reti che utilizzano i protocolli TCP/IP. Questi sono protocolli o “regole” per il modo in cui una rete trasmette i dati. Sebbene i protocolli possano essere applicati a qualsiasi rete, sono più comunemente associati a Internet.
L’algoritmo si occupa del modo in cui i dati vengono trasmessi in piccoli blocchi o “pacchetti”. Ogni pacchetto contiene alcuni dati più informazioni di intestazione, che è l’equivalente dell’indirizzo del mittente e del destinatario su una busta fisica. Il pacchetto contiene anche un checksum, un equivalente matematico dell’inclusione di una bolla di accompagnamento in modo che il destinatario sappia che tutto il contenuto del pacchetto è arrivato sano e salvo.
Sebbene questo sistema funzioni normalmente bene, può essere inefficiente se i blocchi di dati sono particolarmente piccoli. In casi estremi, i dati in un pacchetto possono essere solo un byte, ma le informazioni di intestazione occuperanno 40 byte indipendentemente dalla dimensione dei dati. Questo è più o meno equivalente a scrivere una lettera a qualcuno, ma poi tagliarla e inviare ogni parola in una busta separata. Infatti, poiché i messaggi vengono inviati in binario, è ancora più inefficiente di così. Oltre allo spreco di larghezza di banda, questo aumenta anche il numero di pacchetti che devono essere inviati, il che aumenta la possibilità che si verifichi un errore nel processo di trasmissione.
Il principio dell’algoritmo di Nagle è che dopo aver inviato un pacchetto, il computer trasmittente attenderà che succeda una delle due cose prima di inviare il pacchetto successivo. Se riceve conferma della ricezione dell’ultimo pacchetto, invierà immediatamente i dati in suo possesso, indipendentemente dalle sue dimensioni. Altrimenti, aspetterà fino a quando non avrà un pacchetto “completo” da inviare. Una volta che ciò accade, invierà l’intero pacchetto indipendentemente dal fatto che il pacchetto precedente sia stato ricevuto o meno.
In alcune situazioni, l’algoritmo di Nagle può fare più male che bene. Un esempio è quello dei videogiochi online che sono progettati partendo dal presupposto che i dati verranno inviati immediatamente. Se viene utilizzato l’algoritmo di Nagle, alcuni dati verranno ritardati fino a quando non sarà pronto un pacchetto completo. Ciò può avere un effetto notevole sulla reattività del gioco per un giocatore e rallenterà efficacemente i suoi tempi di reazione rispetto ad altri giocatori.