Algoritmul Nagle pentru comunicarea în rețea TCP

Algoritmul Nagle , numit după inginerul John Nagle, a fost conceput pentru a reduce congestionarea rețelei cauzată de "probleme de pachete mici" cu aplicații TCP . Implementările UNIX au început să utilizeze algoritmul lui Nagle în anii 1980 și rămâne o caracteristică standard a TCP astăzi.

Cum funcționează algoritmul Nagle

Algoritmul lui Nagle procesează datele de pe partea de trimitere a aplicațiilor TCP printr-o metodă numită nagling . Detectează mesaje de dimensiuni mici și le acumulează în pachete TCP mai mari înainte de a trimite date prin fir, evitând astfel generarea unui număr inutil de mari de pachete mici. Specificația tehnică pentru algoritmul lui Nagle a fost publicată în 1984 ca RFC 896. Deciziile privind multitudinea de date care se acumulează și durata de așteptare între acestea sunt esențiale pentru performanța sa globală.

Nagling poate utiliza mai eficient lățimea de bandă a unei conexiuni de rețea în detrimentul adăugării întârzierilor ( latență ). Un exemplu descris în RFC 896 ilustrează beneficiile pentru lățimea de bandă potențială și motivul creării sale:

Aplicațiile controlează utilizarea algoritmului Nagle cu opțiunea de programare socket TCP_NODELAY. Sistemele Windows, Linux și Java permit în mod normal Nagle, astfel încât aplicațiile scrise pentru acele medii trebuie să specifice TCP_NODELAY atunci când doresc să dezactiveze algoritmul.

limitări

Nagle algoritmul este utilizabil doar cu TCP. Alte protocoale, inclusiv UDP , nu o acceptă.

Aplicațiile TCP care au nevoie de răspuns rapid la rețea, cum ar fi apelurile telefonice prin Internet sau jocurile de tip shooter pentru prima persoană, ar putea să nu funcționeze bine când Nagle este activat. Întârzierile cauzate în timp ce algoritmul necesită un timp suplimentar pentru a asambla mai multe bucăți de date mai mici poate provoca o vizibilitate vizibilă pe ecran sau într-un flux audio digital. Aceste aplicații dezactivează de obicei Nagle.

Acest algoritm a fost inițial dezvoltat într-un moment în care rețelele de calculatoare au sprijinit mult mai puțină lățime de bandă decât în ​​prezent. Exemplul descris mai sus a fost bazat pe experiențele lui John Nagle de la Ford Aerospace la începutul anilor 1980, în care compromisurile pe care le-a făcut în rețeaua lor lentă, încărcate pe distanțe mari, au avut un sens. Există din ce în ce mai puține situații în care aplicațiile de rețea pot beneficia de algoritmul său de astăzi.