基本信息
Zeta-TCP由一組提高TCP性能的算法組成,由 AppEx NetworksCorporation 開發並商業化。Zeta-TCP 與已存在的 TCP 協定完全兼容。
Zeta-TCP 在以下三個方面對 TCP 核心算法進行了大幅改進:
1) 更適宜現代網際網路狀況的擁塞避免 (Congestionavoidance) 機制
2) 及時精準的丟包預測
3) 反向控制傳送方流量
擁塞避免
今天,絕大多數的TCP實現都是基於TCP New Reno 及其變種(例如 TCP SACK, RFC 3517)作為其擁塞避免算法。 New Reno 的擁塞避免算法是基於丟包統計的算法。基於丟包的算法,將丟包作為網路發生擁塞的標誌。但是,隨著Internet的發展,這個假設在現在的網路環境下,很多時候並不符合實際情況,特別是在無線網路中,丟包的原因通常不是鏈路擁塞,而是由於信道衰減、無線的噪聲等原因導致。New Reno 算法一旦發現網路上發生丟包,就會將擁塞視窗 (CWND) 迅速縮小,導致數據傳送量急劇下降。
TCP Vegas以及其變種(特別是 FastTCP ),將延時作為網路擁塞的標誌。基於延時的擁塞控制算法克服了基於丟包的擁塞控制算法的缺陷,在今天的網路中,更容易反應網路的實際情況。
Zeta-TCP 將延時和丟包的因素組合作為網路擁塞的衡量標準。Zeta-TCP 不斷測量丟包和延時的變化幅度並根據該 TCP 連線歷史數據分析判斷當前所經歷的丟包,延時及其變化是否由擁塞引起,並據此來調整擁塞視窗,從而讓 TCP 的傳送方流量最貼近 TCP 連線整條路徑的可用頻寬,從而減少擁塞,提高整條路徑頻寬利用率,最終達到提高 TCP 傳輸穩定性和吞吐率的目的。
丟包預測
在實際的網路環境中,丟包通常不是均勻發生的,而是經常在短時間內集中發生。TCP 改進相關的RFC (New Reno 和引進 SACK 機制等) ,已經明確定義了怎樣比較準確的預測到第一個丟包。但是當啟用SACK的TCP進入快速恢復階段後,丟包預測準確率顯著降低。
Zeta-TCP 引入了一種根據該連線傳輸歷史進行智慧型學習的算法來計算每一個沒有被 ACK 或 SACK 的數據包丟失的機率,當這個機率高於某一個閾值時,對應的數據包就被判斷為丟失並會被重發。通過更及時準確的判斷丟包並進行重傳,Zeta-TCP 可以有效的讓 TCP 滑動視窗更平滑的向前移動,並降低錯誤重發的機率,減少頻寬的浪費。
逆向控制
針對 TCP 的最佳化算法(如 FastTCP),一般用來最佳化出向流量。Zeta-TCP採用了逆向控制的方法,來最佳化入向流量。逆向控制通過監測每一個連線的質量,給 TCP 連線的對端以豐富的提示信息,讓TCP 的對端能更及時的感知擁塞,丟包,從而更及時地重傳並調整其擁塞視窗以適應網路路徑的實際可用頻寬。
實現
Zeta-TCP在Linux上採用了Loadable Kernel Module(通過NetFilter Hook)的實現方式,在Windows上採用了IM Driver Filter的實現方式。Zeta-TCP實現並不修改系統原有的TCP協定棧,而是攔截TCP的數據包,然後套用其各種最佳化算法。這種實現方法的優勢是模組化更清晰,更容易的在各種系統上實現,其缺陷是可能帶來額外的系統開銷。