1. 程式人生 > >TCP和UDP協議

TCP和UDP協議

提到網路不得不說下TCP和UDP,這兩個協議都是OSI模型中的四層協議,傳輸資料的形式是以位元組流的形式。下面讓我們一起初步瞭解一下TCP和UDP。

TCP——傳輸控制協議

TCP協議是面向連線的可靠傳輸協議。其功能是將應用層發來的8位位元組表示的資料流分割成適當長度的資料段發給下層。

       注:TCP的主要功能是對資料分段,那麼這裡就要提到兩個名詞MSS和MTS。

           MSS是最大段長度為1480B。這裡的段長度是指資料被TCP協議分段後每段中資料段的最大長度為1480B。

           MTS是最大傳輸單元1500B。這個最大傳輸單元是指被TCP分段後每段資料包的最大傳輸單元為1500B。

知道了什麼是MSS和MTS後大家就會發現,分段後每段資料部分最大是1480B,然而每段資料包卻是1500B,那麼相差這20B幹嘛去了呢?別急,下面就來大家講這20B去哪了。

接下來介紹下TCP包的首部,瞭解了首部就知道了那20B去哪裡了。下面就給大家介紹TCP包首部的內容。(注:下圖源自網路)這裡寫圖片描述

首部內容註釋:

 16-Bit source port:原埠,指的是傳送資料的源程序埠。簡單來說就是資料的發出地。大小為16位位元

 16-Bit destination port:目的埠,指的是接收資料的程序埠。就是資料的的目的地。大小為16位位元

 32-Bit sequence number:序號,代表當前TCP資料段第一個位元組佔整個位元組流的相對位置。簡單來說就是標識這是資料被分段傳送後的第幾個包。大小為32位位元。

 32-Bit acknowledgement number:大小為32位位元,確認號,ACK為1時有效,上次成功收到的資料位元組序號+1(如接收到的為1024--2048,則返回2049)。

 4-Bit header length:大小為4位,位元TCP首部長度,最小為20位元組,最大為60位元組。相差的40位元組為下面的Options選項的最大位元組數。

 resv:6位位元保留位。後面的URG緊急指標;ACK確認序號有效;PSH接收方應儘快將此報文段交給應用層;RST重建連線;SYN同步序號,用來發起一個新連線;FIN發端完成傳送任務。

 16 -Bit windows size:視窗大小,TCP流量控制,位元組數,標識接受方可接受的資料位元組數,最大為65535。大小為16位位元。

 16 Bit TCP checksum:校驗和,用於驗證資料的完整性。大小為16位位元。

 16 Bit urgent pointer:緊急指標,當上面的UPG為1時緊急指標才生效。用於傳送緊急資料。大小為16位位元。

 Options:選項(可沒有)就是上面提到最大40位元組的部分,此選項用於資料的加密等操作。

 Data:資料段。

上述首部大小如果選項部分為空的話,正好是160位位元(8bit=1位元組)20位元組。這就是那相差的20位元組

接下來說下TCP的資料分段過程如下圖(注:圖片源自網路)
TCP資料分段

如圖資料按前面提到的資料段長度分段後每段資料包都會有一個TCP首部加上資料段。

接下來就是TCP很重要的建立與斷開連線的過程(三次握手和四次斷開)(注:下兩圖源自於網路)
建立連線過程(三次握手) 這裡寫圖片描述

過程描述:

1.左主機向右主機發送SYN請求連線報文,請求與右主機建立連線。
2.右主機接受左主機的請求連線報文,並向左主機發送SYN報文和ACK確認包確認與左主機建立連線。
3.左主機收到有主機的SYN和ACK,並向右主機人傳送ACK確認收到右主機發送的確認連線包,兩主機連線建立。

  注:ACK: TCP協議規定,只有ACK=1時有效,也規定連線建立後所有傳送的報文的ACK必須為1
     SYN: 在連線建立時用來同步序號。當SYN=1而ACK=0時,表明這是一個連線請求報文。對方若同意建立連線,則應在響應報文中使SYN=1和ACK=1. 因此,  SYN置1就表示這是一個連線請求或連線接受報文。
     FIN: 即完,終結的意思, 用來釋放一個連線。當 FIN = 1 時,表明此報文段的傳送方的資料已經發送完畢,並要求釋放連線。

斷開連線過程(四次斷開)
這裡寫圖片描述
過程描述:
1.當左主機沒有資料要傳送時就要釋放左主機的連線,左主機會發送一個報文(沒有資料)其中FIN設定為1。
2.右主機收到FIN為1的報文後會傳送一個確認與左主機斷開的報文。
3.右主機還會發送一個FIN為1的報文(沒有資料)給左主機釋放右主機連線。
4.左主機收到確認報文和FLN為1的報文後會向右主機發送一個確認包問,進入到TIME_WAIT狀態,等待斷開連線。

   注:四次斷開時右主機發送的兩個報文是同時傳送的。

UDP——使用者資料報協議

UDP協議是面向非連線的不可靠傳輸協議,功能是將資料流量壓縮成資料包形式傳送。

注:UDP協議不會將資料包分段,會將整個資料一起傳送。

UDP也有一個十分簡單的資料包首部,如下圖(注:圖片源自網路)
這裡寫圖片描述
首部註釋:

16-bit source port:源埠號,資料包傳送的源程序埠。大小為16位位元。
16-bit destination port:目標埠號。書記包傳送的目的程序端介面。大小為16位位元。
16-bit UDP length:UDP首部長度。大小為16位位元。
16-bit UDP checksum:校驗和,檢查資料是否損壞,若損壞直接丟棄。

UDP傳輸就很簡單沒有連線和斷開過程,接受到資料流量之後打包直接傳送。

TCP協議和UDP協議特點

首先說TCP協議,其主要特點就是可靠、穩定。主要運用於傳送一些需要安全保護的資料,以及一些資料量比較大的檔案。

注:
1.TCP可靠性主要體現在其傳輸機制:需要建立與斷開連線的過程,以及在傳輸中的重傳。
2.TCP用於傳送資料量大的檔案主要因為其會將資料分段,排序傳送。與重傳機制共同作用減少丟包率。

TCP也是有缺點的,其主要的缺點就是:滿,傳輸效率低,佔用資源高。這主要是因為它的連線過程。

下面來講講UDP協議,其特點就是速度快,系統消耗低。主要運用於傳送對丟包容忍度大,需要速度快的資料傳輸。
其缺點在於:不可靠,不穩定。它沒有TCP那些可靠的機制也不會資料分段,在資料傳輸時,如果網路質量不好,很容易出現丟包的情況。