TCP連線詳解
阿新 • • 發佈:2018-11-09
一. 連線過程示意圖
二. 建立TCP連線
2.1 三次握手
- 第一次握手:建立連線。客戶端傳送連線請求報文段,將SYN置為1,Sequence Number為x;然後,客戶端進入SYN_SEND狀態,等待伺服器的確認;
- 第二次握手:伺服器收到SYN報文段。伺服器收到客戶端的SYN報文段,需要對這個SYN報文段進行確認,設定Acknowledgment Number為Sequence Number+1;同時,自己自己還要傳送SYN請求資訊,將SYN位置為1,Sequence Number為y;伺服器端將上述所有資訊放到一個報文段(即SYN+ACK報文段)中,一併傳送給客戶端,此時伺服器進入SYN_RECV狀態;
- 第三次握手:客戶端收到伺服器的SYN+ACK報文段。然後將Acknowledgment Number設定為y+1,向伺服器傳送ACK報文段,這個報文段傳送完畢以後,客戶端和伺服器端都進入ESTABLISHED狀態,完成TCP三次握手。
2.2 為什麼三次握手
目的:為了防止已失效的連線請求報文段突然又傳送到了服務端,產生錯誤。 已失效的連線請求報文段”的產生在這樣一種情況下: client發出的 第一個連線請求報文段並沒有丟失,而是在某個網路結點長時間的 滯留三. 斷開TCP連線
3.1 四次揮手
- 第一次揮手:主機1(可以使客戶端,也可以是伺服器端),設定Sequence Number和Acknowledgment Number,向主機2傳送一個FIN報文段;此時,主機1進入FIN_WAIT_1狀態;這表示主機1沒有資料要傳送給主機2了;
- 第二次揮手:主機2收到了主機1傳送的FIN報文段,向主機1回一個ACK報文段,Acknowledgment Number為Sequence Number加1;主機1進入FIN_WAIT_2狀態;主機2告訴主機1,我“同意”你的關閉請求;
- 第三次揮手:主機2向主機1傳送FIN報文段,請求關閉連線,同時主機2進入LAST_ACK狀態;
- 第四次揮手:主機1收到主機2傳送的FIN報文段,向主機2傳送ACK報文段,確認關閉連線。然後主機1進入TIME_WAIT狀態;主機2收到主機1的ACK報文段以後,此時,主機1等待2MSL後依然沒有收到回覆,則證明Server端已正常關閉,那好,主機1也可以關閉連線了。