一、UDP UDP(User Datagram Protocol),用戶數據包協議,是一個簡單的面向數據報的通信協議,即對應用層交下來的報文,不合併,不拆分,只是在其上面加上首部後就交給了下麵的網路層 也就是說無論應用層交給UDP多長的報文,它統統發送,一次發送一個報文 而對接收方,接到後直接去除首 ...
一、UDP
UDP(User Datagram Protocol),用戶數據包協議,是一個簡單的面向數據報的通信協議,即對應用層交下來的報文,不合併,不拆分,只是在其上面加上首部後就交給了下麵的網路層
也就是說無論應用層交給UDP
多長的報文,它統統發送,一次發送一個報文
而對接收方,接到後直接去除首部,交給上面的應用層就完成任務
UDP
報頭包括4個欄位,每個欄位占用2個位元組(即16個二進位位),標題短,開銷小
特點如下:
- UDP 不提供複雜的控制機制,利用 IP 提供面向無連接的通信服務
- 傳輸途中出現丟包,UDP 也不負責重發
- 當包的到達順序出現亂序時,UDP沒有糾正的功能。
- 並且它是將應用程式發來的數據在收到的那一刻,立即按照原樣發送到網路上的一種機制。即使是出現網路擁堵的情況,UDP 也無法進行流量控制等避免網路擁塞行為
二、TCP
TCP(Transmission Control Protocol),傳輸控制協議,是一種可靠、面向位元組流的通信協議,把上面應用層交下來的數據看成無結構的位元組流來發送
可以想象成流水形式的,發送方TCP會將數據放入“蓄水池”(緩存區),等到可以發送的時候就發送,不能發送就等著,TCP會根據當前網路的擁塞狀態來確定每個報文段的大小
TCP
報文首部有20個位元組,額外開銷大
特點如下:
- TCP充分地實現了數據傳輸時各種控制功能,可以進行丟包時的重發控制,還可以對次序亂掉的分包進行順序控制。而這些在 UDP 中都沒有。
- 此外,TCP 作為一種面向有連接的協議,只有在確認通信對端存在時才會發送數據,從而可以控制通信流量的浪費。
- 根據 TCP 的這些機制,在 IP 這種無連接的網路上也能夠實現高可靠性的通信( 主要通過檢驗和、序列號、確認應答、重發控制、連接管理以及視窗控制等機制實現)
三、區別
UDP
與TCP
兩者的都位於傳輸層,如下圖所示:
兩者區別如下表所示:
-
TCP 是面向連接的協議,建立連接3次握手、斷開連接四次揮手,UDP是面向無連接,數據傳輸前後不連接連接,發送端只負責將數據發送到網路,接收端從消息隊列讀取
-
TCP 提供可靠的服務,傳輸過程採用流量控制、編號與確認、計時器等手段確保數據無差錯,不丟失。UDP 則儘可能傳遞數據,但不保證傳遞交付給對方
-
TCP 面向位元組流,將應用層報文看成一串無結構的位元組流,分解為多個TCP報文段傳輸後,在目的站重新裝配。UDP協議面向報文,不拆分應用層報文,只保留報文邊界,一次發送一個報文,接收方去除報文首部後,原封不動將報文交給上層應用
-
TCP 只能點對點全雙工通信。UDP 支持一對一、一對多、多對一和多對多的交互通信
兩者應用場景如下圖:
可以看到,TCP 應用場景適用於對效率要求低,對準確性要求高或者要求有鏈接的場景,而UDP 適用場景為對效率要求高,對準確性要求低的場景
參考文獻
- https://zh.wikipedia.org
- https://www.shangmayuan.com/a/a1e3ceb218284cefb95de7fd.html
- https://segmentfault.com/a/1190000021815671
- https://vue3js.cn/interview