在程序員面試中,有一個經常被問到的網絡協議,那便是TCP與UDP,可能TCP大家都比較熟悉,三次握手四次揮手,對于UDP可能陌生一點,覺得應用場景比較少,不過這幾年,由于直播行業的快速發展,UDP的應用也越來越廣,今天我們來學習下UDP協議。
UDP,用戶數據包協議,又稱不可靠數據包協議,顧名思義,就是不能保證數據一定能傳輸到目标機器,既然不能保證傳達,為什麼還要用這種協議呢?豈不是非常地不合理?
場景有位偉人說過,存在即為合理。例如網絡直播,網絡直播采用的很多協議都是基于UDP的,為什麼呢?在網絡直播的業務中,是允許部分丢包的,即便我們丢失了部分幀,也能夠正常的播放,并且用戶不一定感受得到。TCP是不允許丢包的,TCP協議會有複雜的重試機制,特别是在弱網環境下,一旦有數據發送失敗,TCP協議就會不停地重試,導緻新的視頻内容沒辦法刷出來,那樣子視頻反而會一卡一頓。同樣,在我們經常玩的MOBA遊戲中,例如王者榮耀或者英雄聯盟,一旦包丢失了,重新獲取到幾秒鐘前的包已經意義不大了。
構成
UDP的數據包非常的簡單,包頭隻有源端口、目标端口、長度跟校驗和四個字段,剩下的就是具體的包體了。和TCP相比,這已經是精簡到不能再精簡了,每一個字段都是必須的。源端口跟目标端口用來給操作系統定位是哪個應用來發送接收包信息,長度跟校驗和用來校驗UDP包是否正确。
特點我們注意到,UDP的數據包并沒有序列,所以,UDP不保證消息交付順序,并且不确認,不重傳,不排重,随心所欲,有包就發,不像TCP會優先發隊首。
UDP不跟蹤連接狀态,不建立連接也不關心對方是否能收到!
UDP不需要流量控制,不管網絡的情況,沒有擁塞控制。
應用
即使UDP這麼的不靠譜,但是某些場景下的确需要這麼搞。UDP有三大使用場景。
UDP雖然非常的簡單,但是UDP的應用仍然非常廣泛,可以關注我,後面我們再一起學習,一起分享。大家的支持是我繼續唠嗑的動力。同名公衆号(沙茶敏碎碎念)
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!