前言:在瞭解TCP和UDP的特性之前,我們還是先瞭解什麼是資料包的概念。
包(Packet)是TCP/IP協議通訊傳輸中的資料單位,一般也稱“資料包”。包在包交換網路裡,單個訊息被劃分為多個資料區塊,這些資料區塊稱為包,它包含寄件者和接收者的地址資訊。這些包然後沿著不同的路徑在一個或多個網路中傳輸,並且在目的地重新組合。資料包主要由“目的IP地址”、“源IP地址”、“淨載資料”等部分構成,包括包頭和包體,包頭是固定長度,包體的長度不定,各欄位長度固定,雙方的請求資料包和應答資料包的包頭結構是一致的,不同的是包體的定義。
資料包的結構與我們平常寫信非常類似,目的IP地址是說明這個資料包是要發給誰的,相當於收信人地址;源IP地址是說明這個資料包是發自哪裡的,相當於發信人地址;而淨載資料相當於信件的內容。 正是因為資料包具有這樣的結構,安裝了TCP/IP協議的電腦之間才能相互連信。我們在使用基於TCP/IP協議的網路時,網路中其實傳遞的就是資料包。
2.1、連線導向
“連線導向”就是在正式通訊前必須要與對方建立起串連。比如你給別人打電話,必須等線路接通了、對方拿起話筒才能相互連話。TCP(Transmission Control Protocol,傳輸控制通訊協定)是基於串連的協議,也就是說,在正式收發資料前,必須和對方建立可靠的串連。
2.2、三次會話
一個TCP串連必須要經過三次“對話”才能建立起來,其中的過程非常複雜,我們這裡只做簡單、形象的介紹,你只要做到能夠理解這個過程即可。我們來看看這三次對話的簡單過程:主機A向主機B發出串連請求資料包:“我想給你發資料,可以嗎?”,這是第一次對話;主機B向主機A發送同意串連和要求同步(同步就是兩台主機一個在發送,一個在接收,協調工作)的資料包:“可以,你什麼時候發?”,這是第二次對話;主機A再發出一個資料包確認主機B的要求同步:“我現在就發,你接著吧!”,這是第三次對話。三次“對話”的目的是使資料包的發送和接收同步,經過三次“對話”之後,主機A才向主機B正式發送資料。
2.3、通訊效率低、可靠性高
TCP協議能為應用程式提供可靠的通訊串連,使一台電腦發出的位元組流無差錯地發往網路上的其他電腦,對可靠性要求高的資料通訊系統往往使用TCP協議傳輸資料。
3.1、面向非串連
“面向非串連”就是在正式通訊前不必與對方先建立串連,不管對方狀態就直接發送。這與現在風行的手機簡訊非常相似:你在發簡訊的時候,只需要輸入對方手機號就OK了。
UDP(User Data Protocol,使用者資料包通訊協定)是與TCP相對應的協議。它是面向非串連的協議,它不與對方建立串連,而是直接就把資料包發送過去!
3.2、通訊效率高、可靠性低
UDP適用於一次只傳送少量資料、對可靠性要求不高的應用環境。比如,我們經常使用“ping”命令來測試兩台主機之間TCP/IP通訊是否正常,其實“ping”命令的原理就是向對方主機發送UDP資料包,然後對方主機確認收到資料包,如果資料包是否到達的訊息及時反饋回來,那麼網路就是通的。例如,在預設狀態下,一次“ping”操作發送4個資料包()。大家可以看到,發送的資料包數量是4包,收到的也是4包(因為對方主機收到後會發回一個確認收到的資料包)。這充分說明了UDP協議是面向非串連的協議,沒有建立串連的過程。正因為UDP協議沒有串連的過程,所以它的通訊效率高;但也正因為如此,它的可靠性不如TCP協議高。QQ就使用UDP發訊息,因此有時會出現收不到訊息的情況。
TCP協議和UDP協議各有所長、各有所短,適用於不同要求的通訊環境。TCP協議和UDP協議之間的差別如附表所示。