基於UDP實現的可靠傳輸協議(比如uTP),與TCP協議相比有什麼優缺點?
12-28
UDP實現的可靠協議,基本都會對TCP的某一部分進行加強,另外一部分進行削弱。因為:
「實時性+可靠性+公平性」 三者不能同時保證,因此可以犧牲TCP的局部公平性來換取更好的實時性,或者更浪費點帶寬,來實現更低的延遲。比如我實現的一般快速可靠協議,使用比tcp多浪費15%的帶寬的代價,換取了平均延遲降低30%-40%,最大延遲降低兩倍的傳輸效果,成功的用到了多個項目中:
skywind3000/kcp · GitHub
也來說說我的看法。
本人並沒有利用udp實現可靠傳輸的經驗,僅從技術理解上說說個人的理解。
1、這類實現應該以高效為設計目標,否則已經存在tcp的情況下,還有什麼必要在udp基礎上實現可靠性呢。
2、應該有針對性實現tcp的部分功能,比如最基本的重傳,或者是tcp不具備的功能,比如點對多點,比如socket的復用,或者解決高丟包高時延環境中tcp效率低下的問題(更快速的重傳機制)。首先tcp已經有很成熟的實現,如果在udp上完全實現tcp,完全沒必要。另外如果不解決tcp在某些環境中的限制,也失去了這類實現存在的價值。
3、應該以介面庫的方式存在,伺服器端和客戶端都需要調用。應用部署場景有一定的限制。
以上是根據個人對通信理解想到的,沒做過具體實現,只是分享下看法。
最大的優點是可以根據具體的場景來優化,因為TCP很多參數你不可調。
推薦閱讀: