TCP的三次握手四次揮手

2022-09-01 13:39:13 字數 1742 閱讀 2358

三次握手

第一次握手:

客戶端傳送tcp包,置syn標誌位為1,將初始序號x,儲存在包頭的序列號(seq)裡

第二次握手:服務端回應確認包,置syn標誌位為1,置ack為x+1,將初始序列號y,儲存在包頭序列號裡

第三次握手:客戶端對服務端的確認包進行確認,置syn標誌位為0,置ack為y+1,置序列號為z

tcp建立連線為什麼是三次握手,而不是兩次或四次?

tcp,名為傳輸控制協議,是一種可靠的傳輸層協議,ip協議號為6。

順便說一句,原則上任何資料傳輸都無法確保絕對可靠,三次握手只是確保可靠的基本需要。

第一次握手服務端可以確認自己收報文與客戶端發報文功能都正常

第二次握手客戶端確認自己收發報文與服務端收發報文功能都正常,也就認為連線已建立

第三次,服務端確認雙方都能夠正常通訊

如果不進行第三次握手,服務端對客戶端的請求進行回應(第二次握手)後,就會理所當然的認為連線已建立,而如果c並沒有收到s的回應呢?此時,c仍認為連線未建立,s會對已建立的連線儲存必要的資源,如果大量的這種情況,s會崩潰。

因此第三次握手是必要的。

四次揮手

先由客戶端向伺服器端傳送乙個fin,請求關閉資料傳輸。

當伺服器接收到客戶端的fin時,向客戶端傳送乙個ack,其中ack的值等於fin+seq

然後伺服器向客戶端傳送乙個fin,告訴客戶端應用程式關閉。

當客戶端收到伺服器端的fin是,回覆乙個ack給伺服器端。其中ack的值等於fin+seq

確保資料能夠完整傳輸。

當被動方收到主動方的fin報文通知時,它僅僅表示主動方沒有資料再傳送給被動方了。

但未必被動方所有的資料都完整的傳送給了主動方,所以被動方不會馬上關閉socket,它可能還需要傳送一些資料給主動方後,

再傳送fin報文給主動方,告訴主動方同意關閉連線,所以這裡的ack報文和fin報文多數情況下都是分開傳送的。

tcp報文格式圖:

上圖中有幾個字段需要重點介紹下:

(1)序號:seq序號,佔32位,用來標識從tcp源端向目的端傳送的位元組流,發起方傳送資料時對此進行標記。

(2)確認序號:ack序號,佔32位,只有ack標誌位為1時,確認序號欄位才有效,ack=seq+1。

(3)標誌位:共6個,即urg、ack、psh、rst、syn、fin等,具體含義如下:

(a)urg:緊急指標(urgent pointer)有效。

(b)ack:確認序號有效。

(c)psh:接收方應該盡快將這個報文交給應用層。

(d)rst:重置連線。

(e)syn:發起乙個新連線。

(f)fin:釋放乙個連線。

需要注意的是:

(a)不要將確認序號ack與標誌位中的ack搞混了。

(b)確認方ack=發起方req+1,兩端配對。

理解tcp/ip三次握手與四次揮手的正確姿勢

tcp建立連線為什麼是三次握手,為什麼不是兩次或四次?

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...