A John Nagle mérnökről elnevezett Nagle algoritmust a TCP-alkalmazásokkal kapcsolatos kis csomagproblémák okozta hálózati torlódások csökkentésére tervezték. A UNIX implementációi az 1980-as években kezdték használni a Nagle algoritmust, és ez a mai napig a TCP szabványos funkciója.
A Nagle algoritmus működése
A Nagle algoritmus a TCP-alkalmazások küldő oldalán dolgozza fel az adatokat a nyaggatásnak nevezett módszerrel. Érzékeli a kis méretű üzeneteket, és nagyobb TCP-csomagokba halmozja fel, mielőtt adatokat küldene a vezetéken. Ez a folyamat elkerüli a szükségtelenül nagy számú kis csomag létrehozását.
A Nagle algoritmus műszaki specifikációját 1984-ben tették közzé RFC 896 néven. Az a döntés, hogy mennyi adatot kell felhalmozni, és mennyi ideig kell várni a küldések között, kritikusak az általános teljesítmény szempontjából.
A Nagling előnyei
A Nagling hatékonyan tudja kihasználni a hálózati kapcsolat sávszélességét a késések vagy késleltetések növelése rovására. Az RFC 896-ban leírt példa szemlélteti a lehetséges sávszélesség előnyeit és létrehozásának okát:
- Ha egy TCP-alkalmazás, amely elfogja a billentyűzet billentyűleütéseit, minden beírt karaktert kommunikálni szeretne a vevővel, üzenetsorozatot generálhat, amelyek mindegyike 1 bájtnyi adatot tartalmaz.
- Mielőtt ezeket az üzeneteket elküldhetnénk a hálózaton, mindegyiket a TCP/IP által megkövetelt TCP-fejléc-információkkal kell csomagolni. Mindegyik fejléc mérete 20 és 60 bájt között van.
- Abszolválás nélkül ez a példaalkalmazás olyan hálózati üzeneteket generál, amelyek legalább 95 százalékban fejlécinformációkat tartalmaznak (21 bájtból legalább 20) és 5 százalék vagy kevesebb tényleges adatot tartalmaznak a küldő billentyűzetéről. A Nagle algoritmus használatával ugyanazok az adatok kevesebb üzenettel kézbesíthetők, ami nagy sávszélesség-megtakarítást eredményez.
Az alkalmazások a TCP_NODELA socket programozási opcióval szabályozzák a Nagle algoritmus használatát. A Windows, Linux és Java rendszerek alapértelmezés szerint engedélyezik a Nagle-t. Ezért az ilyen környezetekhez írt alkalmazásoknak meg kell adniuk a TCP_NODELAY értéket az algoritmus kikapcsolásához.
Korlátozások
A gyors hálózati választ igénylő alkalmazások, például a videohívások és az online játékok, nem működnek megfelelően, ha a Nagle engedélyezve van. Azok a késések, amelyek miatt az algoritmusnak több időt vesz igénybe a kisebb adattömbök összeállítása, észrevehető késést válthatnak ki vizuálisan a képernyőn vagy a digitális hangfolyamban. Az ilyen alkalmazások általában letiltják a Nagle-t.
Ezt az algoritmust eredetileg akkor fejlesztették ki, amikor a számítógépes hálózatok kisebb sávszélességet támogattak, mint manapság. A fent ismertetett példa John Nagle tapasztalatain alapult a Ford Aerospace-nél az 1980-as évek elején, ahol a Ford lassú, erősen terhelt, távolsági hálózatán való zűrzavaros kompromisszumok logikusak voltak. Manapság egyre kevesebb olyan helyzet van, amikor a hálózati alkalmazások profitálhatnak az algoritmusából.
A Nagle algoritmus csak TCP-vel használható. Más protokollok, például az UDP, nem támogatják.