Insinööri John Naglen mukaan nimetty Nagle-algoritmi on suunniteltu vähentämään verkon ruuhkautumista TCP-sovellusten pienistä pakettiongelmista. UNIX-toteutukset alkoivat käyttää Nagle-algoritmia 1980-luvulla, ja se on edelleen TCP:n vakioominaisuus.
Kuinka Nagle-algoritmi toimii
Nagle-algoritmi käsittelee tietoja TCP-sovellusten lähetyspuolella käyttämällä menetelmää, jota kutsutaan nalkutukseksi. Se havaitsee pienet viestit ja kokoaa ne suuremmiksi TCP-paketteiksi ennen tiedon lähettämistä langalla. Tämä prosessi välttää tarpeettoman suurten pienten pakettien luomisen. Nagle-algoritmin tekninen eritelmä julkaistiin vuonna 1984 nimellä RFC 896. Päätökset siitä, kuinka paljon tietoa kerätään ja kuinka kauan odotusaikaa lähetysten välillä ovat kriittisiä yleisen suorituskyvyn kannalta.
Huijauksen edut
Nagling voi käyttää tehokkaasti verkkoyhteyden kaistanleveyttä lisäämällä viiveitä tai latenssia. RFC 896:ssa kuvattu esimerkki havainnollistaa kaistanleveyden mahdollisia etuja ja sen luomisen perusteita:
- Jos TCP-sovellus, joka sieppaa näppäimistön näppäinpainalluksia, haluaa välittää jokaisen kirjoitetun merkin vastaanottajalle, se voi luoda sarjan viestejä, joista jokainen sisältää yhden tavun dataa.
- Ennen kuin näitä viestejä voidaan lähettää verkon kautta, jokainen viesti on pakattava TCP/IP:n edellyttämällä TCP-otsikkotiedolla. Kunkin otsikon koko vaihtelee 20 ja 60 tavun välillä.
- Ilman meteliä tämä esimerkkisovellus luo verkkoviestejä, jotka sisältävät 95 prosenttia tai enemmän otsikkotiedoista (vähintään 20 tavusta 21:stä) ja 5 prosenttia tai vähemmän todellista dataa lähettäjän näppäimistöltä. Nagle-algoritmia käyttämällä samat tiedot voitaisiin toimittaa pienemmällä määrällä viestejä, mikä johtaisi merkittäviin kaistanleveyden säästöihin.
Sovellukset hallitsevat Nagle-algoritmin käyttöä TCP_NODELA socket -ohjelmointivaihtoehdolla. Windows-, Linux- ja Java-järjestelmät sallivat yleensä Naglen oletuksena. Siksi näihin ympäristöihin kirjoitettujen sovellusten on määritettävä TCP_NODELAY algoritmin poistamiseksi käytöstä.
Rajoitukset
Sovellukset, jotka vaativat nopean verkkovasteen, kuten videopuhelut ja online-pelit, eivät välttämättä toimi kunnolla, kun Nagle on päällä. Viiveet, jotka aiheutuvat siitä, että algoritmi vie ylimääräistä aikaa pienempien tietopalojen kokoamiseen, voivat aiheuttaa visuaalisesti huomattavan viiveen näytöllä tai digitaalisessa äänivirrassa. Tällaiset sovellukset yleensä poistavat Naglen käytöstä. Tämä algoritmi kehitettiin alun perin aikana, jolloin tietokoneverkot tukivat vähemmän kaistanleveyttä kuin nykyään. Yllä kuvattu esimerkki perustui John Naglen kokemuksiin Ford Aerospacessa 1980-luvun alussa, jolloin nalkuttavat kompromissit Fordin hitaassa, raskaasti kuormitetussa kaukoliikenneverkostossa olivat järkeviä. Nykyään on yhä vähemmän tilanteita, joissa verkkosovellukset voivat hyödyntää sen algoritmia. Nagle-algoritmia voidaan käyttää vain TCP:n kanssa. Muut protokollat, kuten UDP, eivät tue tätä.