在程序員面試中,有一個經常被問到的網絡協議,那便是TCP與UDP,可能TCP大家都比較熟悉,三次握手四次揮手,對于UDP可能陌生一點,覺得應用場景比較少,不過這幾年,由于直播行業的快速發展,UDP的應用也越來越廣,今天我們來學習下UDP協議。

UDP,用戶數據包協議,又稱不可靠數據包協議,顧名思義,就是不能保證數據一定能傳輸到目標機器,既然不能保證傳達,為什么還要用這種協議呢?豈不是非常地不合理?
場景
有位偉人說過,存在即為合理。例如網絡直播,網絡直播采用的很多協議都是基于UDP的,為什么呢?在網絡直播的業務中,是允許部分丟包的,即便我們丟失了部分幀,也能夠正常的播放,并且用戶不一定感受得到。TCP是不允許丟包的,TCP協議會有復雜的重試機制,特別是在弱網環境下,一旦有數據發送失敗,TCP協議就會不停地重試,導致新的視頻內容沒辦法刷出來,那樣子視頻反而會一卡一頓。同樣,在我們經常玩的MOBA游戲中,例如王者榮耀或者英雄聯盟,一旦包丟失了,重新獲取到幾秒鐘前的包已經意義不大了。
構成
UDP的數據包非常的簡單,包頭只有源端口、目標端口、長度跟校驗和四個字段,剩下的就是具體的包體了。和TCP相比,這已經是精簡到不能再精簡了,每一個字段都是必須的。源端口跟目標端口用來給操作系統定位是哪個應用來發送接收包信息,長度跟校驗和用來校驗UDP包是否正確。
特點
我們注意到,UDP的數據包并沒有序列,所以,UDP不保證消息交付順序,并且不確認,不重傳,不排重,隨心所欲,有包就發,不像TCP會優先發隊首。
UDP不跟蹤連接狀態,不建立連接也不關心對方是否能收到!
UDP不需要流量控制,不管網絡的情況,沒有擁塞控制。
應用
即使UDP這么的不靠譜,但是某些場景下的確需要這么搞。UDP有三大使用場景。
- 多播,因為UDP不用建立連接,所以非常適合用來廣播,要想,如果你是一個一萬臺機器組建的集群,建立連接的消耗的代價是非常大的。
- 網絡好或者允許丟包的的內網應用,在公司內網,網絡一般都非常好,這個時候非常適合使用UDP協議,消耗更小。
- 需要處理速度更快,可以容忍少數丟包。UDP初生牛犢不怕虎,就跟敢死隊一樣,無論環境怎么樣,都會一個勁地上,TCP就不這樣了,一旦隊列發生擁堵,就會等前面地處理完再處理。
總結
UDP雖然非常的簡單,但是UDP的應用仍然非常廣泛,可以關注我,后面我們再一起學習,一起分享。大家的支持是我繼續嘮嗑的動力。同名公眾號(沙茶敏碎碎念)