
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
錯誤檢測功能必須加到應用程序中,一般錯誤檢測內容至少涉及確認、超時和重傳。
海量數據傳輸不應使用UDP
例如文件傳輸,這要求不光有錯誤檢測,還要有窗口流量控制、擁塞避免和慢啟動這些特性,這無異於在應用中再造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還將較長時間保持較多的應用。