傳輸層TCP和UDP的區別分析與應用場景

基本概念:

1: 面向報文

面向報文的傳輸方式是應用層交給UDP多長的報文,UDP就照樣發送,即一次發送一個報文。因此,應用程序必須選擇合適大小的報文。若報文太長,則IP層需要分片,降低效率。若太短,會是IP太小。UDP對應用層交下來的報文,既不合並,也不拆分,而是保留這些報文的邊界。這也就是說,應用層交給UDP多長的報文,UDP就照樣發送,即一次發送一個報文。

2: 面向字節流

面向字節流的話,雖然應用程序和TCP的交互是一次一個數據塊(大小不等),但TCP把應用程序看成是一連串的無結構的字節流。TCP有一個緩衝,當應用程序傳送的數據塊太長,TCP就可以把它劃分短一些再傳送。如果應用程序一次只發送一個字節,TCP也可以等待積累有足夠多的字節後再構成報文段發送出去。

下圖是TCP和UDP協議的一些應用。

TCP/UDP常見應用

下圖是TCP和UDP協議的比較。

TCP/UDP比較

這裏再詳細說一下面向連接和麪向無連接的區別:

面向連接舉例:兩個人之間通過電話進行通信;
面向無連接舉例:郵政服務,用戶把信函放在郵件中期待郵政處理流程來傳遞郵政包裹。
    顯然,不可達代表不可靠。

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的優點:

可靠,穩定
TCP的可靠體現在TCP在傳遞數據之前,會有三次握手來建立連接,而且在數據傳遞時,有確認、窗口、重傳、擁塞控制機制,在數據傳完後,還會斷開連接用來節約系統資源。

TCP的缺點:

慢,效率低,佔用系統資源高,易被攻擊 
TCP在傳遞數據之前,要先建連接,這會消耗時間,而且在數據傳遞時,確認機制、重傳機制、擁塞控制機制等都會消耗大量的時間,而且要在每臺設備上維護所有的傳輸連接,事實上,每個連接都會佔用系統的CPU、內存等硬件資源。 
而且,因爲TCP有確認機制、三次握手機制,這些也導致TCP容易被人利用,實現DOS、DDOS、CC等攻擊。

UDP的優點:

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

UDP的缺點:

不可靠,不穩定 
因爲UDP沒有TCP那些可靠的機制,在數據傳遞時,如果網絡質量不好,就會很容易丟包。

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
……
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章