1. 程式人生 > 其它 >7.13一次完整的Http請求過程(3)

7.13一次完整的Http請求過程(3)

7.13一次完整的Http請求過程(3)

一次完整請求的圖解

TCP之四次揮手

首先明確特點:

  • 斷開連線Server或者Client都可以斷開

四次揮手過程

  • A向B傳送連線釋放報文段並停止傳送資料,此報文段中FIN=;seq=u(等於上次傳送資料的最後一個位元組加1),此時A進入FIN_WAIT-1(終止等待1)狀態。TCP規定,FIN報文段即使不攜帶資料也要消耗一個序號。

  • B收到連線釋放報文段後就傳送確認報文,此時ACK=1;ack=u+1;seq=v;此時B進入close_wait(關閉等待)狀態。TCP伺服器程序通知應用程序A到B的連線釋放了,此時TCP連線處於半關閉狀態,B到A的連線並未斷開,此時B傳送資料A仍要接收。--->B在這時候做的動作是:通知系統關閉程序,A不能向B傳送資料,但B可向A傳送資料

  • A收到B的確認報文後就處於FIN_WAIT2狀態,等待B傳送連線釋放報文段。

  • 如果B沒有資料要傳送了,就傳送連線釋放報文段,此時,FIN=1;ACK=1;seq=w;ack=u+1;此時B處於last_ack(最後確認)狀態。

  • A收到B的連線請求報文段後就傳送確認報文段,此時ACK=1;ack=w+1;seq=u+1;此時A處於time_wait等待狀態。

此時TCP連線還未釋放掉,必須經過時間等待計時器(TIME-WAIT timer)設定的2倍的最長報文壽命MSL(Maximum Segment Lifetime)後A才進入到CLOSED,MSL建議設為2分鐘。當A撤銷相應的傳輸控制塊TCB後,就結束了這次TCP連線。B收到A的確認報文就進入CLOSED狀態,當B撤銷相應的傳輸控制塊TCB後,就結束了這次TCP連線。

為什麼是四次揮手不是三次:

其實是可以三次揮手的,因為Client端有一個等待時間,超過這個時間未收到可以關閉連線

而Server端有一個保活時間,如果Server端已經發出了確認釋放報文段沒有收到Client的回覆,過了保活時間可以另作處理

It's a lonely road!!!