UDP協議 淺談理解

UDP包頭

無論應用程序寫的使用 TCP 傳數據,還是 UDP 傳數據,都要監聽一個端口。正是這個端口, 用來區分應用程序,要不說端口不能衝突呢。兩個應用監聽一個端口,到時候包給誰呀?所以按理說,無論是 TCP 還是 UDP 包頭裏面應該有端口號,根據端口號,將數據交給相應的應用 程序。

UDP格式:

UDP圖示

UDP的三大特點

(下面將說法更人性化了)
a. 溝通簡單,不需要處理大量的數據結構、處理邏輯、包頭字段。相信網絡通路默認就是很容易送達的,不容易被丟棄
b. 輕信他人,它不會建立連接,雖然有端口號,但是監聽在這個地方,誰都能傳數據給它,他也可以傳數據給別人,也可以同時給多人傳數據
c. **愣頭青,做事不懂權變。**它不會根據網絡情況進行發包的擁塞控制,無論網絡丟包如何,它顯得“不知道”。
ps:(如果不清楚上面的舉例,可以對比看TCP,這就容易理解了)

UDP的三大使用場景

  1. 需要資源少,在網絡情況比較好的內網,或者對於丟包不敏感的應用。這很好理解,就像
    如果你是領導,你會讓你們組剛畢業的小朋友去做一些沒有那麼難的項目,打一些沒有那麼難的
    客戶,或者做一些失敗了也能忍受的實驗性項目。(DHCP就是基於UDP協議的,一般的獲取IP地址都是內網請求。)
  2. 不需要一對一溝通,建立連接,而是可以廣播的應用。(DHCP就是一種廣播形式,基於UDP協議;
    VXLAN協議,是需要用到組播,也是基於UDP的
  3. 需要處理速度快,時延低,可以容忍少數丟包,但是要求即便網絡擁塞,也毫不退縮,一
    往無前的時候。(不會像TCP一樣,需要考慮很多問題,這樣對網絡要求極高,)

基於UDP使用的幾個例子

1. 網頁或者 APP 的訪問

原來訪問網頁和手機 APP 都是基於 HTTP 協議的。HTTP 協議是基於 TCP 的,建立連接都需要 多次交互,對於時延比較大的目前主流的移動互聯網來講,建立一次連接需要的時間會比較長, 然而既然是移動中,TCP 可能還會斷了重連,也是很耗時的。而且目前的 HTTP 協議,往往採 取多個數據通道共享一個連接的情況,這樣本來爲了加快傳輸速度,但是 TCP 的嚴格順序策略 使得哪怕共享通道,前一個不來,後一個和前一個即便沒關係,也要等着,時延也會加大。
而QUIC(全稱Quick UDP Internet Connections,快速 UDP 互聯網連接)是 Google 提出的 一種基於 UDP 改進的通信協議,其目的是降低網絡通信的延遲,提供更好的用戶互動體驗。
QUIC 在應用層上,會自己實現快速連接建立、減少重傳時延,自適應擁塞控制,是應用層的代表。

2. 流媒體協議

現在直播比較火,直播協議多使用 RTMP,而這個 RTMP 協 議也是基於 TCP 的。TCP 的嚴格順序傳輸要保證前一個收到了,下一個才能確認,如果前一個 收不到,下一個就算包已經收到了,在緩存裏面,也需要等着。對於直播來講,這顯然是不合適 的,因爲老的視頻幀丟了其實也就丟了,就算再傳過來用戶也不在意了,他們要看新的了,如果 老是沒來就等着,卡頓了,新的也看不了,那就會丟失客戶,所以直播,實時性比較比較重要, 寧可丟包,也不要卡頓的。
另外,對於丟包,其實對於視頻播放來講,有的包可以丟,有的包不能丟,因爲視頻的連續幀裏 面,有的幀重要,有的不重要,如果必須要丟包,隔幾個幀丟一個,其實看視頻的人不會感知, 但是如果連續丟幀,就會感知了,因而在網絡不好的情況下,應用希望選擇性的丟幀。
還有就是當網絡不好的時候,TCP 協議會主動降低發送速度,這對本來當時就卡的看視頻來講 是要命的,應該應用層馬上重傳,而不是主動讓步。因而,很多直播應用,都基於 UDP 實現了 自己的視頻傳輸協議。

3. 實時遊戲

遊戲有一個特點,就是實時性比較高。快一秒你幹掉別人,慢一秒你被別人爆頭,所以很多職業 玩家會買非常專業的鼠標和鍵盤,爭分奪秒。
因而,實時遊戲中客戶端和服務端要建立長連接,來保證實時傳輸。但是遊戲玩家很多,服務器 卻不多。由於維護 TCP 連接需要在內核維護一些數據結構,因而一臺機器能夠支撐的 TCP 連接 數目是有限的,然後 UDP 由於是沒有連接的,在異步 IO 機制引入之前,常常是應對海量客戶 端連接的策略。
另外還是 TCP 的強順序問題,對戰的遊戲,對網絡的要求很簡單,玩家通過客戶端發送給服務 器鼠標和鍵盤行走的位置,服務器會處理每個用戶發送過來的所有場景,處理完再返回給客戶 端,客戶端解析響應,渲染最新的場景展示給玩家。
如果出現一個數據包丟失,所有事情都需要停下來等待這個數據包重發。客戶端會出現等待接收 數據,然而玩家並不關心過期的數據,激戰中卡 1 秒,等能動了都已經死了。
遊戲對實時要求較爲嚴格的情況下,採用自定義的可靠 UDP 協議,自定義重傳策略,能夠把丟 包產生的延遲降到最低,儘量減少網絡問題對遊戲性造成的影響。

4. IOT物聯網

一方面,物聯網領域終端資源少,很可能只是個內存非常小的嵌入式系統,而維護 TCP 協議代 價太大;另一方面,物聯網對實時性要求也很高,而 TCP 還是因爲上面的那些原因導致時延 大。Google 旗下的 Nest 建立 Thread Group,推出了物聯網通信協議 Thread,就是基於 UDP 協議的。

5. 移動通信領域

在 4G 網絡裏,移動流量上網的數據面對的協議 GTP-U 是基於 UDP 的。因爲移動網絡協議比 較複雜,而 GTP 協議本身就包含複雜的手機上線下線的通信協議。如果基於 TCP,TCP 的機制 就顯得非常多餘。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章