原創文章首發於公眾號:「碼農富哥」,歡迎收藏和關注,如轉載請注明出處!
上一篇聊完 一文徹底搞懂 TCP三次握手、四次揮手過程及原理
這次聊聊TCP和UDP的區別和場景
TCP/IP 中有兩個具有代表性的傳輸層協議,分別是 TCP 和 UDP。
來看看傳輸層位於OSI七層協議和TCP/IP四層協議的位置:
那么TCP和UDP的區別和使用場景分別是怎樣的?
我們用一個圖來對比一下UDP和TCP:
TCP
TCP 是面向連接的、可靠的流協議。流就是指不間斷的數據結構,當應用程序采用 TCP 發送消息時,雖然可以保證發送的順序,但還是猶如沒有任何間隔的數據流發送給接收端。
TCP 為提供可靠性傳輸,實行“順序控制”或“重發控制”機制。此外還具備“流控制(流量控制)”、“擁塞控制”、提高網絡利用率等眾多功能。
TCP有以下特點:
- TCP充分地實現了數據傳輸時各種控制功能,可以進行丟包時的重發控制,還可以對次序亂掉的分包進行順序控制。而這些在 UDP 中都沒有。
- 此外,TCP 作為一種面向有連接的協議,只有在確認通信對端存在時才會發送數據,從而可以控制通信流量的浪費。
- 根據 TCP 的這些機制,在 IP 這種無連接的網絡上也能夠實現高可靠性的通信( 主要通過檢驗和、序列號、確認應答、重發控制、連接管理以及窗口控制等機制實現)。
UDP
UDP 是面向報文的,所謂面向報文,是指面向報文的傳輸方式是應用層交給UDP多長的報文,UDP就照樣發送,即一次發送一個報文。因此,應用程序必須選擇合適大小的報文。若報文太長,則IP層需要分片,降低效率。若太短,會是IP太小。
UDP 是不具有可靠性的數據報協議,細微的處理它會交給上層的應用去完成。在 UDP 的情況下,雖然可以確保發送消息的大小,卻不能保證消息一定會到達。因此,應用有時會根據自己的需要進行重發處理。
UDP有以下特點:
- UDP 不提供復雜的控制機制,利用 IP 提供面向無連接的通信服務。
- 傳輸途中出現丟包,UDP 也不負責重發。
- 當包的到達順序出現亂序時,UDP沒有糾正的功能。
- 並且它是將應用程序發來的數據在收到的那一刻,立即按照原樣發送到網絡上的一種機制。即使是出現網絡擁堵的情況,UDP 也無法進行流量控制等避免網絡擁塞行為。
- 如果需要以上的細節控制,不得不交由采用 UDP 的應用程序去處理。
- UDP 常用於以下幾個方面:
- 1.包總量較少的通信(DNS、SNMP等);
- 2.視頻、音頻等多媒體通信(即時通信);
- 3.限定於 LAN 等特定網絡中的應用通信;
- 4.廣播通信(廣播、多播)。
UDP 和 TCP 的應用
他們的應用如下圖:
總結:
TCP 和 UDP 的優缺點無法簡單地、絕對地去做比較:TCP 用於在傳輸層有必要實現可靠傳輸的情況;
而在一方面,UDP 主要用於那些對高速傳輸和實時性有較高要求的通信或廣播通信。TCP 和 UDP 應該根據應用的目的按需使用。
最后
文章如果對你有收獲,可以收藏轉發,這也是對我寫作的肯定!另外可以關注我公眾號「碼農富哥」 (搜索id:coder2025),我會持續輸出Python,服務端架構,計算機基礎(MySQL, Linux,TCP/IP)的 原創 文章