TCP UDP協議的作用勿混淆
在對TCP UDP協議進行學習的時候。我們總是將兩者相互比較著來學習。這是因為在某些方面,這兩個協議總是讓我們相互混淆。為了能夠明確它們各自的定義,所以我們一定要將之區分開來。那么這兩者有什么本質上的區別呢?讓我們先來看一下它們各自的定義是如何的。
TCP:Transmission Control Protocol,即傳輸控制協議。
UDP:User Data Protocol,即用戶數據報協議。
其中TCP是面向連接的傳輸協議,即傳輸數據前必須先建立連接。UDP是面向非連接的傳輸協議,即傳輸數據前不需要建立連接。
兩者的特點對比如下:
TCP協議:面向連接、可靠性高、大量數據、傳輸慢
UDP協議:面向非連接、可靠性低、少量數據、傳輸快
我們常用的QQ即采用的UDP協議,即發送數據包時不需要與對方建立連接。而常用的ping命令則屬于ICMP協議,即Internet Control Message Protocol(Internet控制報文協議)。它是TCP/IP協議族的一個子協議,用于在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息雖然并不傳輸用戶數據,但是對于用戶數據的傳遞起著重要的作用。
TCP UDP協議都是IP層的傳輸協議,是IP與上層之間的處理接口。TCP UDP協議端口號被設計來區分運行在單個設備上的多重應用程序的IP地址。
由于同一臺機器上可能會運行多個網絡應用程序,所以計算機需要確保目標計算機上接收源主機數據包的軟件應用程序的正確性,以及響應能夠被發送到源主機的正確應用程序上。該過程正是通過使用TCP 或 UDP 端口號來實現的。在 TCP UDP協議頭部分,有“源端口”和“目標端口”段,主要用于顯示發送和接收過程中的身份識別信息。IP 地址和端口號合在一起被稱為“套接字”。
雖然基于TCP/IP連接協議(流套接字)的服務是設計客戶機/服務器應用程序時的主流標準,但有些服務也是可以通過無連接協議(數據報套接字)提供的。先介紹一下TCP socket 與UDP socket在傳送數據時的特性:Stream (TCP) Socket提供雙向、可靠、有次序、不重復的資料傳送。
Datagram(UDP) Socket雖然提供雙向的通信,但沒有可靠、有次序、不重復的保證,所以UDP傳送數據可能會收到無次序、重復的資料,甚至資料在傳輸過程中出現遺漏。由于UDP Socket 在傳送資料時,并不保證資料能完整地送達對方,所以絕大多數應用程序都是采用TCP處理Socket,以保證資料的正確性。一般情況下TCP Socket 的數據發送和接收是調用send() 及recv() 這兩個函數來達成,而 UDP Socket則是用sendto() 及recvfrom() 這兩個函數,這兩個函數調用成功發揮發送或接收的資料的長度,否則返回SOCKET_ERROR。