TCP的三次握手和四次揮手以及狀態轉移過程
1、TCP的三次握手即客戶端與伺服器端建立連線的過程
(三次握手一般是由客戶端發起的建立連線請求,connect返回連線成功表示三次握手完成)
第一次握手:客戶端發起建立連線請求,併發送SYN和一個序列號i
第二次握手:伺服器確認與客戶端建立連線,傳送SYN和一個自己的序列號j,同時傳送ACK以及確認值i+1
第三次握手:客戶端向伺服器傳送ACK以及確認值j+1
2、TCP的四次揮手即客戶端與伺服器端斷開連線的過程
(四次揮手可能由客戶端執行主動斷開也可能由伺服器端主動斷開)
第一次揮手:主動斷開方要求關閉連線,並且傳送FIN
第二次揮手:被動斷開方確認關閉連線傳送ACK和確認值i+2
第三次揮手:被動斷開方緊接著傳送
第四次揮手:主動斷開方傳送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狀態。