tcp/udp協議和應用場景


描述

 

  概述

  兩者都是通信協議, TCP、UDP 是傳輸層協議,但他們的通信機制與應用場景不同,下面來闡述兩者的區別以及它們的應用場景。

  TCP 與 UDP

  TCP(Transmission Control Protocol),又叫傳輸控制協議,UDP(User Datagram Protocol),又叫用戶數據報協議,它們都是傳輸層的協議,但兩者的機制不同,它們的區別如下:

tcp和udp的應用場景

  TCP

  從如上表格看到,TCP 是面向連接的,並且是一種可靠的協議,在基於 TCP 進行通信時,通信雙方需要先建立一個 TCP 連接,建立連接需要經過三次握手,握手成功才可以進行通信,關於 TCP 三次握手、四次揮手的過程請看該文章。

  另外 TCP 協議是一種可靠的傳輸協議,那么它是如何保證可靠性的呢?

  可靠性

  在講解 TCP 如何保證可靠性前,首先得理解什么是可靠。在通信的角度來看,可靠即要確保通信雙方的通信信息不會丟失,若丟失了保證能夠對其進行恢復,並且收到的信息內容與原發送內容一樣。

  在 TCP 中,傳輸報文都是通過建立的虛擬連接來進行傳輸,發送端傳輸的每一個 TCP 報文,都會對其進行編號(編號是由於網絡傳輸的原因,發送的報文可能會亂序到達,因此需要根據編號對報文進行重排),並且開啟一個計時器;當接收端收到報文后,並且通過校驗和對收到的報文數據進行校驗,若校驗成功則會返回一個確認報文,告知發送端我已經成功收到該報文了;若發送端在計時器結束前仍未收到確認報文,則認為接收端接收失敗,則會重傳該報文;服務端若收到重復報文(根據編號發現已經是收到了),則會將該報文丟棄。

  因此,從上面的機制可以知道,TCP 是通過重傳、確認和校驗和的方式來確保可靠。

  Tcp的優點:

  可靠,穩定

  TCP的可靠性體現在傳輸數據之前,三次握手建立連接(四次揮手釋放連接),並且在數據傳遞時,有確認、窗口、重傳、擁塞控制機制,數據傳完之后,斷開連接用來節省系統資源。

  TCP的缺點

  慢,效率低,占用系統資源高,易被攻擊

  傳數據之前建立連接,這樣會消耗時間,而且在消息傳遞時,確認機制、重傳機制和擁塞控制機制都會消耗大量的時間,而且要在每台設備上維護所有的傳輸連接。而每個連接都會占用系統的CPU、內存等硬件軟件資源。並且TCP的取而機制、三次握手,這些也導致TCP容易被人利用,實現DOS,DDOS攻擊。

  UDP的優點

  快,比TCP稍安全

  UDP沒有TCP的握手、確認、窗口、重傳、擁塞控制等機制,udp是一個無狀態的傳輸協議,所以他在傳輸數據時非常快。M沒有TCP的這些機制,UDP較TCP被攻擊者利用的漏洞就要少一些。UDP也是無法避免攻擊的,比如:UDP flood攻擊。。。

  UDP的缺點

  不可靠,不穩定

  因為UDP沒有TCP的那些可靠機制,在網絡質量不好時很容易丟包。

  基於以上優點,那么: 

  UDP 是一種面向無連接,且不可靠的協議,在通信過程中,它並不像 TCP 那樣需要先建立一個連接,只要(目的地址,端口號,源地址,端口號)確定了,就可以直接發送信息報文,並且不需要確保服務端一定能收到或收到完整的數據。它僅僅提供了校驗和機制來保障一個報文是否完整,若校驗失敗,則直接丟棄報文,不做任何處理。

 

  TCP/UDP編程模型

  從程序實現的角度來看,可以用下圖來進行描述。

tcp和udp的應用場景

  從上圖也能清晰的看出,TCP通信需要服務器端偵聽listen、接收客戶端連接請求accept,等待客戶端connect建立連接后才能進行數據包的收發(recv/send)工作。而UDP則服務器和客戶端的概念不明顯,服務器端即接收端需要綁定端口,等待客戶端的數據的到來。后續便可以進行數據的收發(recvfrom/sendto)工作。

  在前面講解UDP時,提到了UDP保留了報文的邊界,下面我們來談談TCP和UDP中報文的邊界問題。在默認的阻塞模式下,TCP無邊界,UDP有邊界。

  對於TCP協議,客戶端連續發送數據,只要服務端的這個函數的緩沖區足夠大,會一次性接收過來,即客戶端是分好幾次發過來,是有邊界的,而服務端卻一次性接收過來,所以證明是無邊界的;

  而對於UDP協議,客戶端連續發送數據,即使服務端的這個函數的緩沖區足夠大,也只會一次一次的接收,發送多少次接收多少次,即客戶端分幾次發送過來,服務端就必須按幾次接收,從而證明,這種UDP的通訊模式是有邊界的。

  TCP 與 UDP 的應用場景

  從特點上我們已經知道,TCP 是可靠的但傳輸速度慢 ,UDP 是不可靠的但傳輸速度快。因此在選用具體協議通信時,應該根據通信數據的要求而決定。

  若通信數據完整性需讓位與通信實時性,則應該選用 TCP 協議(如文件傳輸、重要狀態的更新等);反之,則使用 UDP 協議(如視頻傳輸、實時通信等)。

  什么時候應該使用TCP:

  當對網絡通訊質量有要求的時候,比如:整個數據要准確無誤的傳遞給對方,這往往用於一些要求可靠的應用,比如HTTP、HTTPS、FTP等傳輸文件的協議,POP、SMTP等郵件傳輸的協議。

  在日常生活中,常見使用TCP協議的應用如下:

  瀏覽器,用的HTTP

  FlashFXP,用的FTP

  Outlook,用的POP、SMTP

  Putty,用的Telnet、SSH

  QQ文件傳輸

  什么時候應該使用UDP:

  當對網絡通訊質量要求不高的時候,要求網絡通訊速度能盡量的快,這時就可以使用UDP。

  比如,日常生活中,常見使用UDP協議的應用如下:

  QQ語音

  QQ視頻

  TFTP


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM