基于Nagle算法的嵌入式TCP協議
簡化TCP 協議的性能分析
這種簡化的TCP 協議的性能可以通過在NS-2
網絡模擬器中進行模擬實現。
通常在嵌入式的環境中,應用層產生的數據包是很小的,經常是每個包只有幾個、十幾、幾十個字節的數據,這樣就產生了一個問題: TCP 協議的報頭開銷太大。假設數據僅有一個字節,而TCP 的包頭有40 個字節,這樣的數據報對底層網絡的利用率僅僅只有1/ 41 ,考慮到分組之間的間隙和網絡硬件組成幀還需要一些比特,實際的網絡利用率更低。 嵌入式系統的這種常見的小的數據包造成了網絡帶寬的極大浪費。除了網絡利用率不高之外,還有另外一個問題是產生TCP 數據包數量極多,網關和路由器會由于這些極大數量的小數據包而發生阻塞。
組塊技術與其不足
通過以上分析,很自然的想到采用組塊技術(clumping) 把一定數量的數據包組成一個幀,這樣既能減小報頭開銷,又能減小TCP 數據包的數量,而且代碼量增加很少。但是,這樣組包會產生一個問題,TCP 在數據幀未達到一定大小之前不會傳輸數據,這樣產生的延時會影響到數據的實時傳輸。因此,有必要對怎樣避免這種延時進行研究。
Nagle 算法的由來
在因特網發展初期,由于bbs 和新聞組的流行,網絡上充斥著大量的telnet 產生的小的數據包,數量極大的這些數據包使得路由器和網關發生了嚴重的阻塞現象,這和嵌入式系統中的情形類似。JoneNagle 提出了一種算法來對付這種棘手的小數據包問題,后來被稱為Nagle 算法。
Nagle 算法與簡單的組包( clumping) 技術不同,它和慢啟動一樣使用自計時( self clocking) 、用確認的到達來觸發其余數據的傳輸。因此它沒有引入額外的延時,而且能有效地減少網絡上小數據包的流量。
評論