UDP和TCP都有其自身的特色,不一樣的應用場景和要求須要使用不一樣的協議來傳輸,那麼什麼時候咱們能夠用UDP代替TCP呢。服務器
UDP 的優勢
- UDP支持廣播和多播,事實上若是應用程序使用廣播或多播,那就必須使用UDP
- UDP沒有鏈接創建和拆除,UDP只須要兩個分組就能交換一個請求和一個應答(這裏假設二者的長度都小於兩端系統之間的最小MTU)。TCP卻須要大約20個分組,這裏假設爲每次請求—應答交換創建一個新的TCP鏈接
TCP 的優勢
- 正確確認
- 丟失分包重傳
- 重複分組檢測
- 亂序排序
- 窗口流量控制
- 慢啓動和擁塞控制
TCP與UDP基本區別
- 基於鏈接與無鏈接
- TCP要求系統資源較多,UDP較少
- UDP程序結構較簡單
- 流模式(TCP)與數據報模式(UDP)
- TCP保證數據正確性,UDP可能丟包
- TCP保證數據順序,UDP不保證
協議使用建議
廣播或多播必須使用UDP
任何形式的錯我控制必須加到客戶和服務器程序之中,通常應用系統每每是在能夠接受必定量的錯誤前提下使用廣播和多播網絡
簡單的請求—應答可使用UDP
錯誤檢測功能必須加到應用程序中,通常錯誤檢測內容至少涉及確認、超時和重傳。app
海量數據傳輸不該使用UDP
例如文件傳輸,這要求不光有錯誤檢測,還要有窗口流量控制、擁塞避免和慢啓動這些特性,這無異於在應用中再造TCP。tcp
這些規則存在一些列外
- 如TFTP使用UDP來傳輸文件,TFTP選擇使用UDP的緣由在於,在系統自舉引導代碼中使用UDP比使用TCP易於實現,並且TFTP只用於局域網上,而不是跨廣域網傳輸海量數據。
- NFS也是使用UDP來傳輸海量數據,這樣的選擇部分是出於歷史緣由的,在20世紀80年代中期設計NFS時,UDP的實現要比TCP的快,並且NFS僅僅用於局域網,然而NFS從20世紀90年代早期開始被設計成支持TCP,大多數廠商現今已改成同時支持UDP和TCP上的NFS服務。一樣的緣由致使DCE遠程過程調用(
remote procedure call, RPC
)的前身軟件包(Apollo NCS
軟件包)也選擇UDP而不是TCP,不過現在的實現是同時支持UDP和TCP的了。
總結
現現在良好的TCP實現可以充分發揮網絡的帶寬容量,並且愈來愈少的應用系統設計人員願意在本身的UDP應用中再造TCP,因此相比TCP而言,UDP的用途在遞減,但在多媒體應用中UDP還將較長時間保持較多的應用。 spa