傳輸層TCP和UDP的區別分析與應用場景
轉載:http://blog.csdn.net/u013777351/article/details/49226101
基本概念:
1: 面向報文
面向報文的傳輸方式是應用層交給UDP多長的報文,UDP就照樣發送,即一次發送一個報文。因此,應用程序必須選擇合適大小的報文。若報文太長,則IP層需要分片,降低效率。若太短,會是IP太小。UDP對應用層交下來的報文,既不合並,也不拆分,而是保留這些報文的邊界。這也就是說,應用層交給UDP多長的報文,UDP就照樣發送,即一次發送一個報文。
2: 面向字節流
面向字節流的話,雖然應用程序和TCP的交互是一次一個數據塊(大小不等),但TCP把應用程序看成是一連串的無結構的字節流。TCP有一個緩沖,當應用程序傳送的數據塊太長,TCP就可以把它劃分短一些再傳送。如果應用程序一次只發送一個字節,TCP也可以等待積累有足夠多的字節後再構成報文段發送出去。
下圖是TCP和UDP協議的一些應用。
下圖是TCP和UDP協議的比較。
這裏再詳細說一下面向連接和面向無連接的區別:
面向連接舉例:兩個人之間通過電話進行通信;
面向無連接舉例:郵政服務,用戶把信函放在郵件中期待郵政處理流程來傳遞郵政包裹。
顯然,不可達代表不可靠。
- 1
- 2
- 3
- 4
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在傳遞數據之前,會有三次握手來建立連接,而且在數據傳遞時,有確認、窗口、重傳、擁塞控制機制,在數據傳完後,還會斷開連接用來節約系統資源。
- 1
- 2
- 3
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文件傳輸
…………
- 1
- 2
- 3
- 4
- 5
- 6
- 7
那麽什麽時候應該使用UDP:
當對網絡通訊質量要求不高的時候,要求網絡通訊速度能盡量的快,這時就可以使用UDP。
比如,日常生活中,常見使用UDP協議的應用如下:
QQ語音
QQ視頻
TFTP
……
傳輸層TCP和UDP的區別分析與應用場景