TCP的三次握手與四次揮手

理解TCP的三次握手與四次揮手過程,先一定要明白幾個字段的含義,分別如下:

  1. SYN:同步位。僅在連接過程置1,SYN=1即表示這是一個連接請求(接收)報文。
  2. ACK:確認位。TCP規定,在連接建立後發送報文的ACK字段置1。如:當主機A請求連接主機B時,那麼主機A會首先會發送一個SYN=1,ACK=0的請求連接報文給主機B,如果主機B同意該連接請求,那麼發送一個SYN=1,ACK=1的報文給主機A,表示A-->B的連接已建立。
  3. seq:序號字段。表示發送的報文數據的第一個字節的序號。
  4. ack:確認號字段。表示期望收到對方發送的下一個報文數據的第一個字節的序號。
  5. FIN:終止位。用來釋放連接,在釋放連接請求的報文中FIN=1,表示發送方的數據已經發送完畢。

 

三次握手:

第一次握手:客戶機A請求與服務器B建立連接。客戶機A的TCP向服務器B的TCP發送一個連接請求報文段,同步位SYN置1。

               (小A告訴小B:我請求你的連接)

第二次握手:服務器B響應客戶機A的請求。服務器的TCP收到連接請求報文段後,如果同意連接就向客戶機A發回確認,同步位SYN置1,確認位ACK置1,表示客戶機A到服務器B方向的連接已經建立。

              (小B告訴小A:我收到並同意了你的連接請求,我請求你的接連)

第三次握手:客戶機A向服務器B發回確認。當客戶機A收到來自服務器B的確認報文段後,向服務器A發回確認,確認位ACK置1,表示服務器B到客戶機A的連接已經建立,給該連接分配緩存和變量。此時A的TCP通知上層應用進程連接已經建立。

              (小A告訴小B:我收到並同意了你的連接請求,我們可以開始傳送數據了)

在經歷上面三次握手之後,客戶機A與服務器B之間就可以開始傳送數據了。

 

四次揮手:

第一次揮手:客戶機A已經沒有要發的數據,那麼A的應用進程先向其 TCP 發出連接釋放報文段,並停止再發送數據,主動關閉 TCP連接。A 把連接釋放報文段首部的 FIN = 1表示這是一個釋放連接的請求,其序號字段seq = u,等待 B 的確認。

          (小A對小B說:我的數據已經發完了,我請求釋放連接)

第二次揮手:服務器B對於客戶機A的釋放連接請求發出確認,確認號爲u+1。服務器B的TCP通知上層應用進程,A-->B的連接已釋放,此時TCP處於半關閉狀態。如果B向A發數據,那麼A仍要接收。

          (小B對小A說:我已經收到了你的請求,知道你沒有要發的數據了,斷開了你的連接。)

第三次揮手:服務器B已經沒有要發的數據,那麼B的應用進程先向其 TCP 發出連接釋放報文段,並停止再發送數據,主動關閉 TCP連接。B 把連接釋放報文段首部的 FIN=1表示這是一個釋放連接的請求,其確認號字段ack = u+1,等待 A 的確認。

          (小B對小A說:我也沒有要發的數據了,我請求釋放連接)

第四次揮手:客戶機A收到服務器B的釋放連接請求後,向B發回確認。

           (小A對小B說:我已經收到了你的請求,知道你沒有要發的數據了,斷開了你的連接。)

經歷上次四次揮手,客戶機A與服務器B之間的連接斷開。

             

有關TCP連接管理的常見面試題:

Q1:簡述TCP三次握手與四次揮手的過程。

答:見以上解釋。

Q2:TCP的三次握手連接連接能不能簡化成兩次?

答:不能。按照兩次握手的協定,主機機A向主機B發出連接請求,主機B向主機A發出確認報文段後認爲連接已經建立。如果該確認報文在傳輸的過程中丟失,那麼主機A將認爲連接還未成功建立,忽略主機B發來的數據分組,一直等待主機B的確認報文分組。而主機B在發出數據分組超時後重複發送數據分組,就造成死鎖。

Q3:爲什麼客戶端在發送完最後一個確認報文段之後還要等待2MSL?

答:爲了保證客戶端A 發送的最後一個ACK報文段能夠到達 B。其次,防止 “已失效的連接請求報文段”出現在本連接中。A 在發送完最後一個 ACK 報文段後,再經過時間 2MSL,就可以使本連接持續的時間內所產生的所有報文段,都從網絡中消失。這樣就可以使下一個新的連接中不會出現這種舊的連接請求報文段。

Q4:爲什麼建立連接時握手是三次,而在關閉連接時是四次?

答:在連接關閉時,存在一個半關閉狀態。當服務端B收到釋放連接請求時,可能不會立即關閉socket,所以會給客戶端A發送一個確認,告訴客戶端A已經收到了釋放連接請求報文。這時,A不可以給B發送數據,但是B給A發送數據A仍要接受,處於半關閉狀態。當B的數據都發完了,發送釋放連接請求報文給A,A給B發送一個確認,客戶端和服務端處於CLOSED狀態,所以是四次揮手。

另注:

TCP報文段組成如下所示:

 

發佈了11 篇原創文章 · 獲贊 0 · 訪問量 4256
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章