Nagle algoritmoa

Wikipedia, Entziklopedia askea

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[aldatu | aldatu iturburu kodea]

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[aldatu | aldatu iturburu kodea]

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[aldatu | aldatu iturburu kodea]

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[aldatu | aldatu iturburu kodea]

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[aldatu | aldatu iturburu kodea]

Kanpo estekak[aldatu | aldatu iturburu kodea]