面試官:如何理解UDP 和 TCP? 區別? 應用場景?
本文轉載自微信公眾號「JS每日一題」,作者灰灰。轉載本文請聯系JS每日一題公眾號。
一、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 | UDP | |
---|---|---|
可靠性 | 可靠 | 不可靠 |
連接性 | 面向連接 | 無連接 |
報文 | 面向字節流 | 面向報文 |
效率 | 傳輸效率低 | 傳輸效率高 |
雙共性 | 全雙工 | 一對一、一對多、多對一、多對多 |
流量控制 | 滑動窗口 | 無 |
擁塞控制 | 慢開始、擁塞避免、快重傳、快恢復 | 無 |
傳輸效率 | 慢 | 快 |
- 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