Nagle-algoritmen, uppkallad efter ingenjören John Nagle, designades för att minska nätverksstockning orsakad av små paketproblem med TCP-applikationer. UNIX-implementeringar började använda Nagle-algoritmen på 1980-talet, och det är fortfarande en standardfunktion i TCP idag.
Hur Nagle-algoritmen fungerar
Nagle-algoritmen bearbetar data på sändningssidan av TCP-applikationer med en metod som kallas nagling. Den upptäcker små meddelanden och samlar dessa meddelanden till större TCP-paket innan den skickar data över tråden. Denna process undviker genereringen av onödigt stora antal små paket.
Den tekniska specifikationen för Nagle-algoritmen publicerades 1984 som RFC 896. Besluten för hur mycket data som ska samlas och hur länge man ska vänta mellan sändningarna är avgörande för dess övergripande prestanda.
The Benefits of Nagling
Nagling kan effektivt utnyttja bandbredden för en nätverksanslutning på bekostnad av att lägga till förseningar eller latens. Ett exempel som beskrivs i RFC 896 illustrerar de potentiella bandbreddsfördelarna och anledningen till att den skapades:
- Om ett TCP-program som avlyssnar tangenttryckningar vill kommunicera varje tecken som skrivs till en mottagare, kan det generera en serie meddelanden som vart och ett innehåller 1 byte data.
- Innan dessa meddelanden kan skickas över nätverket måste var och en förpackas med TCP-huvudinformation enligt TCP/IP. Varje rubrik varierar i storlek mellan 20 och 60 byte.
- Utan att tjata skulle den här exempelapplikationen generera nätverksmeddelanden som består av 95 procent eller mer huvudinformation (minst 20 av 21 byte) och 5 procent eller mindre faktisk data från avsändarens tangentbord. Med Nagle-algoritmen kunde samma data levereras med färre meddelanden, vilket resulterade i stora bandbreddsbesparingar.
Applikationer styr sin användning av Nagle-algoritmen med programmerings alternativet TCP_NODELA socket. Windows, Linux och Java-system aktiverar norm alt Nagle som standard. Därför måste applikationer skrivna för dessa miljöer ange TCP_NODELAY för att stänga av algoritmen.
Begränsningar
Appar som kräver ett snabbt nätverkssvar, som videosamtal och onlinespel, kanske inte fungerar bra när Nagle är aktiverat. Förseningarna som orsakas medan algoritmen tar extra tid att sammanställa mindre bitar av data kan utlösa märkbar fördröjning visuellt på en skärm eller i en digital ljudström. Sådana applikationer inaktiverar vanligtvis Nagle.
Denna algoritm utvecklades ursprungligen vid en tidpunkt då datornätverk stödde mindre bandbredd än de gör idag. Exemplet som beskrivs ovan var baserat på John Nagles erfarenheter på Ford Aerospace i början av 1980-talet, där tjatande avvägningar på Fords långsamma, tungt belastade långdistansnätverk var vettiga. Det finns allt färre situationer idag där nätverksapplikationer kan dra nytta av hans algoritm.
Nagle-algoritmen kan endast användas med TCP. Andra protokoll, som UDP, stöder inte det.