【計算機網絡】三次握手與四次揮手詳解以及相關問題

1.三次握手:

 

1)相關概念:

SYN(Synchronous:同步):建立連接標誌位,置1表明建立連接。

ACK(Acknowledge:確認):確認標誌位,置1表明收到請求。

FIN(Finsh:結束):斷開鏈接標誌位,置1表明要斷開連接。

TCP傳送數據包括建立建立、發送數據、斷開鏈接三個過程,三次握手發生在建立連接這一步。

 

2)握手過程:

第一次握手:Clien(客戶機)將標誌位SYN(用來標誌是否建立連接)置爲1,隨機產生一個值seq=J,並將該數據包發送給Server(服務器),客戶機進入SYN_SENT(等待發送)狀態,等待Server(服務器)確認。

第二次握手:Server收到數據包後由標誌位SYN=1知道Client請求建立連接,Server將標誌位SYN和ACK都置爲1,ack=J+1,隨機產生一個值seq=K,並將該數據包發送給Client以確認連接請求,Server進入SYN_RCVD狀態。

第三次握手:Client收到確認後,檢查ack是否爲J+1,ACK是否爲1,如果正確則將標誌位ACK置爲1,ack=K+1,並將該數據包發送給Server,Server檢查ack是否爲K+1,ACK是否爲1,如果正確則連接建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨後Client與Server之間可以開始傳輸數據了。

*注意:seq隨機數相當於是用以覈對是否正確接受,當發送發發送一個隨機數seq時,發送方就要收到一個seq+1才能認爲收到正確的確認。

 

2.四次揮手:

(1)相關概念:四次揮手發生在TCP連接的斷開鏈接這一步。TCP共有6個標誌位,分別是:SYN(synchronous),建立聯機;ACK(acknowledgement),確認;PSH(push),傳輸;FIN(finish),結束;RST(reset),重置;URG(urgent),緊急。

*注:由於TCP連接是全雙工的,因此,每個方向都必須要單獨進行關閉,這一原則是當一方完成數據發送任務後,發送一個FIN來終止這一方向的連接,收到一個FIN只是意味着這一方向上沒有數據流動了,即不會再收到數據了,但是在這個TCP連接上仍然能夠發送數據,直到這一方向也發送了FIN。首先進行關閉的一方將執行主動關閉,而另一方則執行被動關閉。

(2)揮手過程:

第一次揮手:Client發送一個FIN,用來關閉Client到Server的數據傳送,Client進入FIN_WAIT_1狀態

第二次揮手:Server收到FIN後,發送一個ACK給Client,確認序號爲收到序號+1(與SYN相同,一個FIN佔用一個序號),Server進入CLOSE_WAIT狀態。此時TCP鏈接處於半關閉狀態,即客戶端已經沒有要發送的數據了,但服務端若發送數據,則客戶端仍要接收。

第三次揮手:Server發送一個FIN,用來關閉Server到Client的數據傳送,Server進入LAST_ACK狀態。

第四次揮手:Client收到FIN後,Client進入TIME_WAIT狀態,接着發送一個ACK給Server,確認序號爲收到序號+1,Server進入CLOSED狀態,完成四次揮手。

3.爲什麼是三次握手而不是兩次握手?

 爲了防止 已失效的鏈接請求報文突然又傳送到了服務端,因而產生錯誤。

 客戶端發出的連接請求報文並未丟失,而是在某個網絡節點長時間滯留了,以致延誤到鏈接釋放以後的某個時間纔到達Server。這是,Server誤以爲這是Client發出的一個新的鏈接請求,於是就向客戶端發送確認數據包,同意建立鏈接。若不採用「三次握手」,那麼只要Server發出確認數據包,新的鏈接就建立了。由於client此時並未發出建立鏈接的請求,所以其不會理睬Server的確認,也不與Server通信;而這時Server一直在等待Client的請求,這樣Server就白白浪費了一定的資源。若採用「三次握手」,在這種情況下,由於Server端沒有收到來自客戶端的確認,則就會知道Client並沒有要求建立請求,就不會建立鏈接。

 

4.關於2MSL問題:

MSL:報文最大生存時間。

2MSL即兩倍的MSL,TCP的TIME_WAIT狀態也稱爲2MSL等待狀態,即第3次握手完成後發送了第四次握手的ACK包後就進入了TIME_WAIT狀態,必須在此狀態上停留兩倍的MSL時間,等待2MSL時間主要目的是怕最後一個 ACK包對方沒收到,那麼對方在超時後將重發第三次握手的FIN包,主動關閉端接到重發的FIN包後可以再發一個ACK應答包。在TIME_WAIT狀態 時兩端的端口不能使用,要等到2MSL時間結束纔可繼續使用。當連接處於2MSL等待階段時任何遲到的報文段都將被丟棄。