趣談網路協議(六)UDP協議
TCP與UDP有哪些區別?
(1)TCP是面向連線的,UDP是面向無連線的
(2)所謂的建立連線,是為了在客戶端和伺服器端維護連線,而建立一定的資料結構來維護雙方互動的狀態,用這樣的資料機構來保證所謂的面向連線的特性
(3)TCP提供可靠交付。通過TCP連線傳輸的資料,無差錯、不丟失、不重複、並且按序到達,而UDP繼承了IP包的特性,不保證不丟失,不保證順序到達
(4)TCP是面向位元組流的傳送的時候發的是一個流,沒頭沒尾。IP包可不是一個流,而是一個個的IP包。之所以變成了流,這也是TCP自己的狀態維護做的事情。而UDP繼承了IP的特性,基於資料報的,一個一個地發,一個一個地收
(5)TCP是可以有擁塞控制的。它意識到包丟棄了或者網路的環境不好了,就會根據情況調整自己的行為,看看是不是發快了,要不要發慢點。UDP就不會,應用讓我發,我就發,管它洪水滔天
(6)因而TCP其實是一個有狀態服務,通俗地講是有腦子的,裡面精確地記著傳送了沒有,接收到沒有,傳送到哪個了,應該接收哪個了,錯一點都不行。而UDP是無狀態服務,通俗地說是沒腦子的,發出去就發出去了
UDP包頭是什麼樣的?
UDP的三大特點
(1)溝通簡單,前提是它相信網路世界是美好的,秉承性善論,相同網路通路預設就是很容易到達的,不容易被丟失的
(2)輕信他人。它不會建立連線,雖然有埠號,但是監聽在這個地方,誰都可以可以傳給他資料,它也可以傳給任何人資料,甚至可以同時傳給多個人資料
(3)愣頭青,做事不懂權變。不知道什麼時候該堅持,什麼時候該退讓。它不會根據網路的情況進行發包的擁塞控制,無論網路丟包丟成啥樣了,它都該怎麼發怎麼發
UDP的三大使用場景
(1)需要資源少,在網路情況比較好的內網,或者對於丟包不敏感的應用
(2)不需要一對一溝通,建立連線,而是可以廣播的應用
(3)需要處理速度快,時延低,可以容忍少數丟包,但是要求即便網路擁塞,也毫不退縮,一往無前的時候
基於UDP的五個例子
網頁或者APP的訪問
QUIC(快速UDP網際網路連線)是Google提出的一種基於UDP改進的通訊協議,其目的是降低網路通訊的延遲,提供更好的使用者體驗
流媒體的協議
很多直播應用,實現了自己的視訊傳輸協議
實時遊戲
遊戲對實時要求較為嚴格的情況下,採用自定義的可靠UDP協議,自定義重傳策略,能夠把丟包產生的延遲降到最低,儘量減少網路問題對遊戲效能造成的影響