如何理解UDP 和 TCP? 區別? 應用場景?

林恒發表於2024-03-20

一、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 這種無連線的網路上也能夠實現高可靠性的通訊( 主要透過檢驗和、序列號、確認應答、重發控制、連線管理以及視窗控制等機制實現)

三、區別

UDPTCP兩者的都位於傳輸層,如下圖所示:

兩者區別如下表所示:

  • 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

相關文章