Mühendis John Nagle'ın adını taşıyan Nagle algoritması, TCP uygulamalarındaki küçük paket sorunlarından kaynaklanan ağ tıkanıklığını az altmak için tasarlanmıştır. UNIX uygulamaları 1980'lerde Nagle algoritmasını kullanmaya başladı ve bugün TCP'nin standart bir özelliği olmaya devam ediyor.
Nagle Algoritması Nasıl Çalışır
Nagle algoritması, nagling adı verilen bir yöntemle TCP uygulamalarının gönderen tarafındaki verileri işler. Küçük boyutlu mesajları algılar ve kablo üzerinden veri göndermeden önce bu mesajları daha büyük TCP paketlerinde biriktirir. Bu işlem, gereksiz yere çok sayıda küçük paketin üretilmesini önler.
Nagle algoritmasının teknik özelliği 1984'te RFC 896 olarak yayınlandı. Ne kadar veri toplanacağına ve gönderimler arasında ne kadar süre bekleneceğine ilişkin kararlar, genel performansı için kritik öneme sahiptir.
Nagling'in Faydaları
Nagling, gecikme veya gecikme ekleme pahasına bir ağ bağlantısının bant genişliğini verimli bir şekilde kullanabilir. RFC 896'da açıklanan bir örnek, potansiyel bant genişliği avantajlarını ve yaratılma nedenini gösterir:
- Klavye tuş vuruşlarını engelleyen bir TCP uygulaması, yazılan her karakteri bir alıcıya iletmek isterse, her biri 1 bayt veri içeren bir dizi mesaj oluşturabilir.
- Bu mesajların ağ üzerinden gönderilebilmesi için, her birinin TCP/IP'nin gerektirdiği şekilde TCP başlık bilgisi ile paketlenmesi gerekir. Her başlığın boyutu 20 ile 60 bayt arasında değişir.
- Durdurmadan, bu örnek uygulama, gönderenin klavyesinden yüzde 95 veya daha fazla başlık bilgisinden (21 baytın en az 20'si) ve yüzde 5 veya daha az gerçek veriden oluşan ağ mesajları üretecektir. Nagle algoritmasını kullanarak, aynı veriler daha az mesaj kullanılarak iletilebilir ve bu da büyük bant genişliği tasarrufu sağlar.
Uygulamalar, TCP_NODELA soket programlama seçeneğiyle Nagle algoritmasını kullanımlarını kontrol eder. Windows, Linux ve Java sistemleri normalde Nagle'ı varsayılan olarak etkinleştirir. Bu nedenle, bu ortamlar için yazılan uygulamaların algoritmayı kapatmak için TCP_NODELAY belirtmesi gerekir.
Sınırlamalar
Görüntülü aramalar ve çevrimiçi oyunlar gibi hızlı ağ yanıtı gerektiren uygulamalar Nagle etkinleştirildiğinde iyi çalışmayabilir. Algoritmanın daha küçük veri parçalarını bir araya getirmek için fazladan zaman almasından kaynaklanan gecikmeler, ekranda veya dijital ses akışında görsel olarak fark edilir gecikmeyi tetikleyebilir. Bu tür uygulamalar genellikle Nagle'ı devre dışı bırakır.
Bu algoritma başlangıçta bilgisayar ağlarının bugün olduğundan daha az bant genişliğini desteklediği bir zamanda geliştirildi. Yukarıda açıklanan örnek, John Nagle'ın 1980'lerin başında Ford Aerospace'deki deneyimlerine dayanıyordu; burada Ford'un yavaş, ağır yüklü, uzun mesafe ağındaki nagling takaslarının mantıklı olduğu görülüyor. Ağ uygulamalarının onun algoritmasından yararlanabileceği günümüzde giderek daha az durum var.
Nagle algoritması yalnızca TCP ile kullanılabilir. UDP gibi diğer protokoller bunu desteklemez.