納格算法

納格算法

納格算法是以減少數據包傳送量來增進TCP/IP網上的性能。它由約翰·納格任職於Ford Aerospace時命名。

簡介

納格算法是以減少數據包傳送量來增進TCP/IP網上的性能。它由約翰·納格任職於Ford Aerospace時命名。

納格的檔案描述了他所謂的“小數據包問題”-某個應用程式不斷地提交小單位的數據,且某些常只占1位元組大小。因為TCP數據包具有40位元組的標頭信息(TCP與IPv4各占20位元組),這導致了41位元組大小的數據包只有1位元組的可用信息,造成龐大的浪費。這種狀況常常發生於Telnet工作階段-大部分的鍵盤操作會產生1位元組的數據並馬上提交。更糟的是,在慢速的網上連線下,這類的數據包會大量地在同一時點傳輸,造成壅塞碰撞。

納格算法的工作方式是合併(coalescing)一定數量的輸出數據後一次提交。特別的是,只要有已提交的數據包尚未確認,傳送者會持續緩衝數據包,直到累積一定數量的數據才提交。

算法

MSS =最大分段大小

該算法與TCP延遲確認會有不好的相互作用,例如當程式傳送端進行兩次連續的小段寫再跟著讀時,接收端接收到第一次寫後因TCP延遲確認而等待第二次寫後一併傳送ACK,傳送端則因第二次寫數據長度小於MSS而等待第一次寫的ACK(如上算法所示),最終將導致兩對端都進入等待直到ACK延遲逾時。因為這個原因,TCP實現通常為應用程式提供一個禁用Nagle算法的接口(通常稱為TCP_NODELAY選項)。用戶級解決方案是避免套接字上的 寫-寫-讀 序列。 寫-讀-讀 和 寫-寫-寫 都是沒問題的。但 寫-寫-讀 則是性能殺手。所以,如果可以的話,緩衝你對TCP的小段寫,然後一次傳送它們。在每次讀之前使用標準的UNIXI/O包並沖刷寫快取通常能起作用。

相關詞條

相關搜尋

熱門詞條

聯絡我們