Nagle-algoritmen, oppk alt etter ingeniør John Nagle, ble designet for å redusere nettverksbelastning forårsaket av små pakkeproblemer med TCP-applikasjoner. UNIX-implementeringer begynte å bruke Nagle-algoritmen på 1980-tallet, og den er fortsatt en standardfunksjon i TCP i dag.
How the Nagle Algorithm Works
Nagle-algoritmen behandler data på sendersiden av TCP-applikasjoner ved hjelp av en metode som kalles nagling. Den oppdager små meldinger og samler disse meldingene til større TCP-pakker før den sender data over ledningen. Denne prosessen unngår generering av unødvendig store antall små pakker.
Den tekniske spesifikasjonen for Nagle-algoritmen ble publisert i 1984 som RFC 896. Avgjørelsene for hvor mye data som skal samles og hvor lenge man skal vente mellom sendingene er avgjørende for dens generelle ytelse.
The Benefits of Nagling
Nagling kan effektivt utnytte båndbredden til en nettverkstilkobling på bekostning av å legge til forsinkelser eller ventetid. Et eksempel beskrevet i RFC 896 illustrerer de potensielle båndbreddefordelene og årsaken til opprettelsen:
- Hvis en TCP-applikasjon som fanger opp tastetrykk på tastaturet ønsker å kommunisere hvert tegn som skrives til en mottaker, kan det generere en rekke meldinger som hver inneholder 1 byte med data.
- Før disse meldingene kan sendes over nettverket, må hver enkelt pakkes med TCP-headerinformasjon som kreves av TCP/IP. Hver overskrift varierer i størrelse mellom 20 og 60 byte.
- Uten å mase vil denne eksempelapplikasjonen generere nettverksmeldinger som består av 95 prosent eller mer overskriftsinformasjon (minst 20 av 21 byte) og 5 prosent eller mindre faktiske data fra avsenderens tastatur. Ved å bruke Nagle-algoritmen kunne de samme dataene leveres med færre meldinger, noe som resulterer i store båndbreddebesparelser.
Applikasjoner kontrollerer bruken av Nagle-algoritmen med TCP_NODELA-socket-programmerings alternativet. Windows, Linux og Java-systemer aktiverer norm alt Nagle som standard. Derfor må applikasjoner skrevet for disse miljøene spesifisere TCP_NODELAY for å slå av algoritmen.
Begrensninger
Apper som krever rask nettverksrespons, som videosamtaler og nettspill, fungerer kanskje ikke bra når Nagle er aktivert. Forsinkelsene som oppstår mens algoritmen bruker ekstra tid på å sette sammen mindre biter av data, kan utløse merkbar forsinkelse visuelt på en skjerm eller i en digital lydstrøm. Slike applikasjoner deaktiverer vanligvis Nagle.
Denne algoritmen ble opprinnelig utviklet på en tid da datanettverk støttet mindre båndbredde enn de gjør i dag. Eksemplet beskrevet ovenfor var basert på John Nagles erfaringer hos Ford Aerospace på begynnelsen av 1980-tallet, der nagende avveininger på Fords langsomme, tungt belastede langdistansenettverk ga god mening. Det er stadig færre situasjoner i dag der nettverksapplikasjoner kan dra nytte av algoritmen hans.
Nagle-algoritmen kan bare brukes med TCP. Andre protokoller, for eksempel UDP, støtter det ikke.