TCP三次握手詳解及釋放鏈接過程


TCP頭部: 其中 ACK   SYN  序號  這三個部分在如下會用到,它們的介紹也在下面。
服務器


暫時須要的信息有:ide

ACK : TCP協議規定,只有ACK=1時有效,也規定鏈接創建後全部發送的報文的ACK必須爲1spa

SYN(SYNchronization) : 在鏈接創建時用來同步序號。當SYN=1而ACK=0時,代表這是一個鏈接請求報文。對方若贊成創建鏈接,則應在響應報文中使SYN=1和ACK=1. 所以,  SYN置1就表示這是一個鏈接請求或鏈接接受報文。資源


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




三次握手的過程:it

首先由Client發出請求鏈接即 SYN=1 ACK=0  (請看頭字段的介紹), TCP規定SYN=1時不能攜帶數據,但要消耗一個序號,所以聲明本身的序號是 seq=xio

而後 Server 進行回覆確認,即 SYN=1 ACK=1 seq=y, ack=x+1,class

再而後 Client 再進行一次確認,但不用SYN 了,這時即爲 ACK=1, seq=x+1, ack=y+1.請求

而後鏈接創建,爲何要進行三次握手呢(兩次確認)。程序



下面是釋放鏈接的過程:



當客戶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會發送探測信息, 以決定是否釋放鏈接。

相關文章
相關標籤/搜索