UDP TCP應用場景


作者:陳碩
鏈接:https://www.zhihu.com/question/20060141/answer/26735814
來源:知乎
著作權歸作者所有,轉載請聯系作者獲得授權。

UDP 的使用范圍很窄,而且編程比 TCP 難多了:
  1. 你真的很在乎延遲,不能忍受重傳,那么就用UDP,例如 NTP 協議。重傳NTP消息純屬添亂。
  2. 你真的不在乎可靠性,丟一些包也不需要重傳,那么就可以用 UDP。例子我想不出來。有人說音頻或視頻流可以用UDP,不過據我看來各大視頻網站都用HTTP協議,而HTTP是基於TCP的。
  3. 你需要NAT穿透,那么不得不用UDP。
  4. 其他情況,一旦程序要自己做重傳,你都是在用UDP模擬出蹩腳的TCP,還不如直接用TCP呢。
總之:使用 UDP 需要有強大到不容置疑的理由,when in doubt, use TCP.

一些協議,出於歷史原因,受當時技術和網絡條件限制,選擇了基於UDP實現,其選擇的理由現在很可能已經不再成立了。因此“xxx協議用UDP”不是你現在寫網絡應用程序也該用UDP的理由,除非你本身就是在實現xxx協議。

另外,那些說TCP比UDP慢、效率低的,你拿UDP寫個程序,把千兆網帶寬打滿(TCP等價的代碼只有兩行:客戶端 while (true) { send(...); } 服務端 while (true) { recv(...); }。),且不說你的程序會有多復雜,先看看goodput到底是不是比TCP大、CPU使用率是不是比TCP低嘛
 
 
========================================================

兩種協議都是傳輸層協議,為應用層提供信息載體。TCP協議是基於連接的可靠協議,有流量控制和差錯控制,也正因為有可靠性的保證和控制手段,所以傳輸效率比UDP低;UDP協議是基於無連接的不可靠協議,沒有控制手段,僅僅是將數據發送給對方,因此效率比TCP要高。

基於上述特性,不難得到結論,TCP協議適用於對效率要求相對低,但對准確性要求相對高的場景下,或者是有一種連接概念的場景下;而UDP協議適用於對效率要求相對高,對准確性要求相對低的場景。

好了,現在回到你的問題,舉幾個應用的例子。TCP一般用於文件傳輸(FTP HTTP 對數據准確性要求高,速度可以相對慢),發送或接收郵件(


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM