1. 程式人生 > >TCP協議一

TCP協議一

TCP協議一

TCP/IP協議集包括應用層,傳輸層網路層,鏈路層

其中TCP和UDP協議是工作在傳輸層,用來控制傳輸的。

IP協議工作在網路層。

下面這張圖顯示了各個協議工作層:


一、建立連線階段:

位碼即tcp標誌位,有6種標示:SYN(synchronous建立聯機) ACK(acknowledgement 確認) PSH(push傳送) FIN(finish結束) RST(reset重置) URG(urgent緊急)Sequence number(順序號碼) Acknowledge number(確認號碼)


第一次握手:主機A傳送位碼為syn=1,隨機產生seq number=1234567的資料包到伺服器,主機B由SYN=1知道,A要求建立聯機;


第二次握手:主機B收到請求後要確認聯機資訊,向A傳送ack number=(主機A的seq+1),syn=1,ack=1,隨機產生seq=7654321的包;

第三次握手:主機A收到後檢查ack number是否正確,即第一次傳送的seq number+1,以及位碼ack是否為1,若正確,主機A會再發送ack number=(主機B的seq+1),ack=1,主機B收到後確認seq值與ack=1則連線建立成功。

如圖:


三次握手的意義在於:

第一次:客戶端告訴伺服器,我想要連線你(SYN)

第二次:伺服器迴應客戶端,可以連線(ACK),同時要求客戶端保持指定的埠處於可通訊狀態(SYN),所以在第二次握手時,伺服器會同時置上ACK+SYN位。

第三次:客戶端告訴伺服器,我的指定埠是OK的,可以通訊了(ACK)


在三次握手成功後,客戶端就可以發資料了。

以下是wireshark抓出來的三次握手的過程和傳送的過程



二、資料傳輸階段:

在資料傳輸階段seq和ack的值如下:

seq=(收到包或上個包的)ack

ack=(收到包的)seq+size

顯然ack有效驗的功能,告訴接收方我已經收到了你發過來的包,並且傳遞了size資訊。

以下是整個過程的wireshark抓包的截圖:








分析:


過程圖表分析


可以看出:

將要傳送包的

ack=要響應包的seq + len 或者 (自己發的上一個包的ack(兩次都是響應同一個包))

seq=要響應包的ack 或者 (自己發的上一個包的seq + len (兩次都是響應同一個包))