天天看點

TCP的三次握手與四次斷開

一、面向連接配接的協定

UDP是一種無連接配接的協定,而TCP則是一種面向連接配接的協定。所謂面向連接配接的協定,就是在兩個對等端内部網之間直接建立邏輯連接配接。

它通過跟蹤資料的傳送,并确認和跟蹤序号來確定它成功到達接收方。簡單來說,TCP傳輸資料比UDP安全。

二、TCP握手

TCP面向連接配接的傳輸是以兩個主機間的握手開始的。一個主機發送到另一個主機之間的握手有以下三個作用:

1、確定目的主機可用

2、確定目的主機正在偵聽目标端口号

3、通知給目的主機發出者的序号,是雙方在傳輸資料時可以進行跟蹤。

三、TCP資料包

TCP主機之間通過握手程序互相建立起來一種虛拟連接配接。在握手期間,主機之間交換序号,當資料從一台主機發送到另一台主機時序号便跟蹤這些資料。

TCP把資料轉換成連續的位元組流,但是不能分辨出位元組流的基礎消息和消息邊界。接收到位元組流後,上層應用程式再把位元組流解釋成消息。

可以這麼說:發送方将資料按協定封裝成TCP資料包,接收方也按協定讀取TCP資料包中的資料。

TCP資料包的最大值為65495位元組。65495 = 總長度 - IP題頭(20位元組)- TCP題頭(20位元組)

下圖描述了資料是怎麼分割的和怎麼在資料開始部分加上題頭(IP題頭、TCP題頭、以太網題頭):

(根據協定層的不同,封裝在資料包中的資訊有不同的名稱)

TCP的三次握手與四次斷開

四、TCP建立連接配接:三次握手

1、建立連接配接時,客戶機向伺服器發送一個TCP資料包,這個資料包中不含有任何資料,隻有客戶機的啟動順序、使用的目的端口号和TCP資料包的

最大分段大小(MSS),還包含一個同步辨別——SYN(同步序号,假設SYN值為A);

2、伺服器對自己的啟動序号和最大分段大小進行回複,即首先确認客戶機的SYN:發送一個ACK資料包,ACK資料包中的值為(A+1);

再發送一個SYN(裡面是自己的序列号,假設為B),并定義MSS的大小。然後設定認領位,承認已接收到第一個資料包。

3、客戶機接收到了伺服器的序号和分段大小資訊,就發送一個ACK(B+1)來确認自己已收到,第三個資料包用來結束握手程序。

(三次握手隻是我自己的初步了解,以後會逐漸完善)

五、TCP終止連接配接:四次斷開

為什麼建立連接配接要三次握手,而終止連接配接就要進行四次呢?

隻是因為TCP連接配接是全雙工的,即資料可在兩個方向上同時傳遞,是以關閉時每個方向上都要單獨關閉,這種單方向的關閉就叫半關閉。

4次斷開的基本流程:

(1)、當主機一完成資料傳輸後,将FIN置為1,提出停止TCP連接配接的請求;

(2)、主機二收到主機一發來的FIN後,關閉連接配接,并将ACK置為1;

(3)、主機二反向提出終止連接配接,将FIN置為1;

(4)、主機一收到消息後,停止連接配接,并将ACK置為1,雙方向的關閉結束。

TCP的三次握手與四次斷開

由以上可見,光是建立連接配接與終止連接配接就這麼多步驟,終于知道TCP為什麼慢了?但是正是這樣才提高了資料傳輸的可靠性。當然,三次握手和四次斷開也不是我這寥寥數語能說清楚的,自己的了解還很淺顯,以後會繼續完善。