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 對數據準確性要求高,速度能夠相對慢),發送或接收郵件(網站

相關文章
相關標籤/搜索