1. 程式人生 > >TCP三次握手和四次揮手

TCP三次握手和四次揮手

tcp握手和揮手

技術分享TCP報文的頭部信息: SEQ SYN ACK FIN此時會用上

ACK : TCP協議規定,只有ACK=1時有效,也規定連接建立後所有發送的報文的ACK必須為1

SYN(SYNchronization) : 在連接建立時用來同步序號。當SYN=1而ACK=0時,表明這是一個連接請求報文。對方若同意建立連接,則應在響應報文中使SYN=1和ACK=1. 因此, SYN置1就表示這是一個連接請求或連接接受報文。

FIN (finis)即完,終結的意思, 用來釋放一個連接。當 FIN = 1 時,表明此報文段的發送方的數據已經發送完畢,並要求釋放連接

SEQ:每個字節花費一個序號,例如一個報文seq=301,傳輸100字節的數據,表示第一個字節的序號301,最後一個字節序號400,下一個報文的序列號從seq=401開始

序列號和確認號用於分析和確認是否丟包,防止亂序

技術分享

TCP可靠連接三次握手過程:

1、客戶端發送一個SYN報文給服務器,請求服務器打開某個端口與之連接

2、服務器發送ACK報文給客戶端確認打開某個端口與之連接,並發送SYN報文請求客戶端打開某個端口與之連接

3、客戶端發送ACK報文確認打開某個端口與之連接

技術分享

TCP可靠連接四次揮手過程:

1、客戶端發送FIN報文請求服務器釋放客戶端連接的端口

2、服務器發送ACK報文確認服務器斷開與客戶端端口的連接

3、服務器發送FIN報文請求客戶端釋放服務器連接的端口

4、客戶端發送ACK報文確認客戶端斷開與服務器連接的端口


當客戶A 沒有東西要發送時就要釋放 A 這邊的連接,A會發送一個報文(沒有數據),其中 FIN 設置為1, 服務器B收到後會給應用程序一個信,這時A那邊的連接已經關閉,即A不再發送信息(但仍可接收信息)。 A收到B的確認後進入等待狀態,等待B請求釋放連接, B數據發送完成後就向A請求連接釋放,也是用FIN=1 表示, 並且用 ack = u+1(如圖), A收到後回復一個確認信息,並進入 TIME_WAIT 狀態, 等待 2MSL 時間。

為什麽要等待呢?

為了這種情況: B向A發送 FIN = 1 的釋放連接請求,但這個報文丟失了, A沒有接到不會發送確認信息, B 超時會重傳,這時A在 WAIT_TIME 還能夠接收到這個請求,這時再回復一個確認就行了。(A收到 FIN = 1 的請求後 WAIT_TIME會重新記時)


另外服務器B存在一個保活狀態,即如果A突然故障死機了,那B那邊的連接資源什麽時候能釋放呢? 就是保活時間到了後,B會發送探測信息, 以決定是否釋放連接。


本文出自 “個人學習筆記” 博客,謝絕轉載!

TCP三次握手和四次揮手