1. 程式人生 > >TCP的三次握手和四次揮手以及狀態轉移過程

TCP的三次握手和四次揮手以及狀態轉移過程

1、TCP的三次握手即客戶端與伺服器端建立連線的過程

(三次握手一般是由客戶端發起的建立連線請求,connect返回連線成功表示三次握手完成)


第一次握手:客戶端發起建立連線請求,併發送SYN和一個序列號i

第二次握手:伺服器確認與客戶端建立連線,傳送SYN和一個自己的序列號j,同時傳送ACK以及確認值i+1

第三次握手:客戶端向伺服器傳送ACK以及確認值j+1

2、TCP的四次揮手即客戶端與伺服器端斷開連線的過程

(四次揮手可能由客戶端執行主動斷開也可能由伺服器端主動斷開)


第一次揮手:主動斷開方要求關閉連線,並且傳送FIN

第二次揮手:被動斷開方確認關閉連線傳送ACK和確認值i+2

第三次揮手:被動斷開方緊接著傳送

FIN

第四次揮手:主動斷開方傳送ACK和確認值J+2表示確認

3. TCP狀態轉移過程


SYN_SENT:客戶端向伺服器端傳送連線請求

ESTABLISHED :客戶端收到伺服器端的同步報文段和確認

FIN_WAIT_1:主動斷開方傳送結束報文段

FIN_WAIT_2:主動斷開方收到被動斷開方的確認報文段

TIME_WAIT:主動斷開方收到結束報文段

SYN_RCVD: listen開始時就建立監聽佇列,若已完成三次握手的佇列為空,則accept阻塞,一旦監聽到連線請求,就將其放入核心等待佇列中,並向客戶端傳送SYN確認,此時該連線處於該狀態。

ESTABLISHED :伺服器端接收到客戶端傳送的確認報文段,連線雙方能夠進行雙向資料傳輸的狀態

CLOSE_WAIT:主動斷開方關閉連線,被動斷開方傳送確認報文段,進入等待關閉連線狀態

LAST_ACK:被動斷開方給主動斷開方傳送結束報文段關閉連線進入該狀態,等待主動斷開方的最後一次確認

4. TIME_WAIT狀態存在的意義

(1)保證可靠的終止TCP連線

     解釋:若最後一條確認報文段丟失,被動斷開方則會重發一條結束報文段,主動斷開方則會在該狀態下處理這條重發的結束報文段,重新向被動斷開方傳送一條確認報文段。

(2)保證遲來的資料能被識別並丟棄

     解釋:處於該狀態下,不能使用這個被佔用的埠建立一個新的連線,防止這個新的連線接收到之前的連線的報文段。

5.為什麼是三次握手呢?

(1)資料延時

假如客戶端向伺服器端發起的連線請求報文段因為某些原因滯留,過了一段時間之後伺服器端才接收到,但是這個報文段已經無效了並未丟失。伺服器端就會向客戶端傳送一個確認的同步報文段。如果是兩次握

握手,這樣連線已經建立,伺服器端就會一直等待客戶端傳送資料,但是客戶端並未建立這次連線,這就造成了資源的浪費。

(1)SYN溢位攻擊

6.四次揮手可不可以是三次揮手?

主動斷開方與被動斷開方同時要關閉連線的情況下,四次揮手也可以是三次揮手,就是當FIN_WAIT_1狀態下的主動斷開方收到被動斷開方帶有確認的結束報文段時轉入TIME_WAIT狀態,不必再經過FIN_WAIT_2狀態。