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