Nagle TCP網絡通信算法

以工程師John Nagle命名的Nagle算法旨在減少由TCP應用程序造成的“小包問題”引起的網絡擁塞。 UNIX實現在20世紀80年代開始使用Nagle的算法,並且它仍然是當今TCP的標準功能。

Nagle算法的工作原理

Nagle的算法通過稱為nagling的方法處理TCP應用程序發送端的數據。 它在發送數據之前檢測小型消息並將其累積到較大的TCP數據包中,從而避免產生不必要的大量小數據包。 Nagle算法的技術規範於1984年作為RFC 896發布。 需要積累大量數據的決定以及在兩次發送之間等待的時間長短對於整體性能至關重要。

Nagling能夠以增加延遲( 延遲 )為代價更有效地利用網絡連接的帶寬 。 RFC 896中描述的一個例子說明了潛在的​​帶寬優勢以及其創建的原因:

應用程序通過TCP_NODELAY 套接字編程選項來控制對Nagle算法的使用。 Windows,Linux和Java系統通常默認啟用Nagle,因此為這些環境編寫的應用程序需要在要關閉算法時指定TCP_NODELAY。

限制

Nagle的算法僅適用於TCP。 其他協議,包括UDP不支持它。

當啟用Nagle時,需要快速網絡響應的TCP應用程序(如互聯網電話呼叫或第一人稱射擊遊戲)可能無法正常工作。 當算法花費額外時間將較小的數據組合在一起時所造成的延遲可能在屏幕上或數字音頻流中在視覺上觸發明顯的滯後 。 這些應用程序通常會禁用Nagle。

這種算法最初是在計算機網絡支持的帶寬比現在少得多的時候開發的。 上述例子是基於約翰·納格爾在20世紀80年代早期在福特航空航天公司的經歷,在他們慢速,重負荷的長途網絡上進行的折衷交易很有意義。 網絡應用程序今天可以從他的算法中受益的情況越來越少。