計算機網絡_三次握手四次揮手

一、三次握手
在這裏插入圖片描述
SYN : 建立聯機
ACK : 確認
Seq : 順序號碼

二、四次揮手
在這裏插入圖片描述
FIN : 結束
ACK : 確認
Seq : 順序號碼
Ack : 確認號碼

三:那麼面試的問題來了

  • 1.爲什麼進行三次握手?而不是兩次四次?

假設進行的是兩次握手:兩次握手後雙方就建立了連接,然而客戶端第一個連接請求由於某些原因在網絡節點中滯留了導致到達延遲,這是一個早已失效的報文,二服務器依然認爲這是客戶端的建立連接請求,然而服務器端又接受了這第一次的請求,恰巧客戶端已經把信息完全發送完成,這一次的連接建立後服務器就會一直處於等待狀態。然而四次的連接建立就有點浪費時間了

  • 2.爲什麼要四次揮手?

    確保數據能夠完整傳輸。

  • 3.爲什麼建立連接是三次握手,而關閉連接是四次揮手?

這是因爲服務端在LISTEN狀態下,收到建立連接請求的SYN報文後,把ACK和SYN放在一個報文裏發送給客戶端。而關閉連接時,當收到對方的FIN報文時,僅僅表示對方不再發送數據了但是還能接收數據,己方也未必全部數據都發送給對方了,所以己方可以立即close,也可以發送一些數據給對方後,再發送FIN報文給對方來表示同意現在關閉連接,因此,己方ACK和FIN一般都會分開發送。

  • 4.三次握手?

(1)第一次握手:Client將標誌位SYN置爲1,隨機產生一個值seq=J,並將該數據包發送給Server,Client進入SYN_SENT狀態,等待Server確認。
(2)第二次握手:Server收到數據包後由標誌位SYN=1知道Client請求建立連接,Server將標誌位SYN和ACK都置爲1,ack=J+1,隨機產生一個值seq=K,並將該數據包發送給Client以確認連接請求,Server進入SYN_RCVD狀態。
(3)第三次握手:Client收到確認後,檢查ack是否爲J+1,ACK是否爲1,如果正確則將標誌位ACK置爲1,ack=K+1,並將該數據包發送給Server,Server檢查ack是否爲K+1,ACK是否爲1,如果正確則連接建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨後Client與Server之間可以開始傳輸數據了

  • 5.四次揮手?

(1)第一次揮手:Client發送一個FIN,用來關閉Client到Server的數據傳送,Client進入FIN_WAIT_1狀態。
(2)第二次揮手:Server收到FIN後,發送一個ACK給Client,確認序號爲收到序號+1(與SYN相同,一個FIN佔用一個序號),Server進入CLOSE_WAIT狀態。
(3)第三次揮手:Server發送一個FIN,用來關閉Server到Client的數據傳送,Server
進入LAST_ACK狀態
(4)第四次揮手:Client收到FIN後,Client進入TIME_WAIT狀態,接着發送一個ACK給Server,確認序號爲收到序號+1,Server進入CLOSED狀態,完成四次揮手。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章