TCP三次握手四次揮手

2021-10-09 10:26:01 字數 2202 閱讀 7909

syn表示建立連線,

fin表示關閉連線,

ack表示響應,

psh表示有

data資料傳輸,

rst表示連線重置

作用:

1、確認雙方的接受能力、傳送能力是否正常。

2、指定自己的初始化序列號,為後面的可靠傳送做準備。

3、如果是 https 協議的話,三次握手這個過程,還會進行數字證書的驗證以及加密金鑰的生成到。

流程:

剛開始客戶端處於 closed 的狀態,服務端處於 listen 狀態

第二次握手:伺服器收到客戶端的 syn 報文之後,會以自己的 syn 報文作為應答,並且也是指定了自己的初始化序列號 isn(s),同時會把客戶端的 isn + 1 作為 ack 的值,表示自己已經收到了客戶端的 syn,此時伺服器處於 syn_revd 的狀態。

第三次握手:客戶端收到 syn 報文之後,會傳送乙個 ack 報文,當然,也是一樣把伺服器的 isn + 1 作為 ack 的值,表示已經收到了服務端的 syn 報文,此時客戶端處於 establised 狀態。

伺服器收到 ack 報文之後,也處於 establised 狀態,此時,雙方以建立起了鏈結。

具體細節

1 . (isn)是固定的嗎:

三次握手的乙個重要功能是客戶端和服務端交換isn(initial sequence number), 以便讓對方知道接下來接收資料的時候如何按序列號組裝資料。

如果isn是固定的,攻擊者很容易猜出後續的確認號,因此 isn 是動態生成的。

2 . 什麼是半連線佇列:

伺服器第一次收到客戶端的 syn 之後,就會處於 syn_rcvd 狀態,此時雙方還沒有完全建立其連線,伺服器會把此種狀態下請求連線放在乙個佇列裡,我們把這種佇列稱之為半連線佇列。當然還有乙個全連線佇列,就是已經完成三次握手,建立起連線的就會放在全連線佇列中。如果佇列滿了就有可能會出現丟包現象。

3 . 三次握手過程中可以攜帶資料嗎:

第一次、第二次握手不可以攜帶資料,而第三次握手是可以攜帶資料的。

假如第一次握手可以攜帶資料的話,如果有人要惡意攻擊伺服器,那他每次都在第一次握手中的 syn 報文中放入大量的資料,因為攻擊者根本就不理伺服器的接收、傳送能力是否正常.

第三次的話,此時客戶端已經處於 established 狀態,也就是說,對於客戶端來說,他已經建立起連線了,並且也已經知道伺服器的接收、傳送能力是正常的了,所以能攜帶資料頁沒啥毛病。

流程

剛開始雙方都處於 establised 狀態,假如是客戶端先發起關閉請求

第一次揮手:客戶端傳送乙個 fin 報文,報文中會指定乙個序列號。此時客戶端處於closed_wait1狀態。

第二次握手:服務端收到 fin 之後,會傳送 ack 報文,且把客戶端的序列號值 + 1 作為 ack 報文的序列號值,表明已經收到客戶端的報文了,此時服務端處於 close_wait2狀態

第三次揮手:如果服務端也想斷開連線了,和客戶端的第一次揮手一樣,發給 fin 報文,且指定乙個序列號。此時服務端處於 last_ack 的狀態。

第四次揮手:客戶端收到 fin 之後,一樣傳送乙個 ack 報文作為應答,且把服務端的序列號值 + 1 作為自己 ack 報文的序列號值,此時客戶端處於 time_wait 狀態。需要過一陣子以確保服務端收到自己的 ack 報文之後才會進入 closed 狀態

服務端收到 ack 報文之後,就處於關閉連線了,處於 closed 狀態。

特別需要注意的就是time_wait這個狀態了,這個是面試的高頻考點,就是要理解,為什麼客戶端傳送 ack 之後不直接關閉,而是要等一陣子才關閉。這其中的原因就是,要確保伺服器是否已經收到了我們的 ack 報文,如果沒有收到的話,伺服器會重新發 fin 報文給客戶端,客戶端再次收到 fin 報文之後,就知道之前的 ack 報文丟失了,然後再次傳送 ack 報文。

至於 time_wait 持續的時間至少是乙個報文的來回時間。一般會設定乙個計時,如果過了這個計時沒有再次收到 fin 報文,則代表對方成功就是 ack 報文,此時處於 closed 狀態。

TCP三次握手 四次揮手

tcp 三次握手 tcp 連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程 1.客戶端向伺服器傳送乙個syn置位的tcp報文,其中包含連線的初始序列號x和乙個視窗大小 表示客戶端上用來...

TCP三次握手 四次揮手

服務端的tcp程序先建立傳輸控制塊tcb,準備接受客戶端程序的連線請求,然後服務端程序處於listen狀態,等待客戶端的連線請求,如有,則作出響應。1 客戶端的tcp程序也首先建立傳輸控制模組tcb,然後向服務端發出連線請求報文段,該報文段首部中的syn 1,ack 0,同時選擇乙個初始序號seq ...

TCP三次握手四次揮手

tcp transmission control protocol 傳輸控制協議 tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線。位碼即tcp標誌位,有6種標誌 urg urgent緊急 ack acknowledgement 確認 psh push傳送 rst...