Nagle algoritmoa

**Nagle algoritmoa**, John Nagle-ek sortua, **TCP** (Transmission Control Protocol) protokoloan oinarritutako sareen efizientzia handitzeko prozedura bat da. Algoritmo honek, metodo heuristikoen bitartez, IP pakete txikiegiak bidaltzea ekiditen du. Azken hauek buffer batean kateatzen dira eta horrela bidaliko den hurrengo mezuaren tamaina egokiagoa izango da.

### Sortzearen arrazoiak 
Algoritmo hau sortzearen arrazoia, 1984ko *Congestion Control in IP/TCP Internetworks* (RFC 986) dokumentuan azaldu zuen John Nagle-ek. Bertan, pakete txikien (tinygrams) arazoa bezala definiturikoa erakusten da. Sarri arazo hau eta Leiho Leloaren sindromearekin (Silly Window Syndrome) nahasten da. Lehena, leihoa utzik dagoenean gertatzen da eta bigarrena berriz, beteta dagoenean.

Dokumentu horretan azaldutakoa argi ikusten da 1 byteko mezuak sortzen dituen aplikazio bat badugu (adibidez telnet erabiltzean, teklatuko botoi askok tamaina horretako mezuak sortzen dituzte). Kasu horietan sarea paketeekin gainkargatzea oso erraza da, izan ere, 1 byteko datuak bidaltzeko 40 byteko burualdea beharko da (20 byte TCP burualdearentzat eta beste 20 IP burualdean) eta orduan 41 byte bidali beharko lirateke. Honek guztiak, %4000ko alferrik galtzea dakar bai paketeen prozesatzea burutzeko behar den denboran eta bai erabilitako baliabideetan.

### Algoritmoa 
 **if** transmititzeko datuak daude
   **if** Leihoaren tamaina >= MSS eta datu erabilgarriak>= MSS
     bidali MSS segmentua orain
   **else**
     **if** baieztatu gabeko datuak daude itxaroten
       buffer-ean kateatu datuak baieztapena (ack) jaso arte
     **else**
       bidali datuak
     **end if**
   **end if**
 **end if**

### Abantailak 
Nagle algoritmoak dakarren aldaketa nagusia sarean zehar segmentu txiki bakarra (byte gutxi batzuk) egon daitekeela da. Hartzaileak bidalitako segmentu honen baieztapena (ACK seinalea) igorleari heltzen ez zaion bitartean helburura bidali beharreko datu berriak buffer batean pilatzen ariko dira.

Horrela, behin igorleak aurreko segmentu horren baieztapena jasotzen duenean pilatutako datuak bidaltzen dira aurreko segmentuak baino byte kopuru gehiago izango dituelarik. Horrela, sarea pakete desberdinekin gainkargatzea zailagoa izango da. Bufferrean pilatutako datuek MSSa (Maximun Segment Size) gainditzen dutenean ere, segmentua bidali egiten da.

Gainera, Nagle algoritmoa sarearen egoerara moldatzen da. Sarearen erabilpen maila zenbat eta handiagoa izan, ACK mezuak denbora gehiago beharko du bueltan eta beraz bufferrean kateatuko diren datu kopurua handiagoa izango da.

### Atzerapen gabeko kasuentzat 
Gaur egun, interneten, gehiegi kargatutako sareetan sortzen dituen abantailak baliatzeko algoritmo honen erabilpena lehenesten da. Hala ere, ez da beti egokia izango burutu nahi ditugun zereginetarako. Interakzio azkarra behar den kasuetan esaterako, paketeen transmisioan atzerapen txiki bat edukitzea oso kaltegarria gerta daiteke. Kasu horietan, aplikazioen socket-etan `TCP_NODELAY` aplikatzen da Nagle algoritmoa ez erabiltzeko.

### Erreferentziak 
* RFC 896 Congestion Control in IP/TCP Internetworks, John Nagle, 1984, Internet Engineering Task Force.

## Kanpo estekak