TCP的三次握手與四次揮手筆記

2022-04-13 19:26:47 字數 1224 閱讀 5155

urg: 緊急指標標誌

ack:確認序號標誌

psh:push標誌

rst:重置連線標誌

syn:同步序號,用於建立連線過程

fin: finish標誌,用於釋放連線

在tcp/ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。

第一次握手:建立連線時,客戶端傳送syn包(syn=j)到伺服器,並進入syn_send狀態,等待伺服器確認;

第二次握手:伺服器收到syn包,必須確認客戶的syn(ack=j+1),同時自己也傳送乙個syn包(syn=k),即syn+ack包,此時伺服器進入syn_recv狀態;

第三次握手:客戶端收到伺服器的syn+ack包,向伺服器傳送確認包ack(ack=k+1),此包傳送完畢,客戶端和伺服器進入established狀態,完成三次握手。

為了初始化sequence number 的初始值

通訊的雙方要互相通知對方自己的初始化的sequence number,這個值要作為以後的資料通訊的序號,以保證應用層接收到的資料不會因為網路上的傳輸問題而造成亂序,即tcp會用這個序號來拼接資料,因此伺服器在回發他的sequence number之後即第二次握手之後,還需要傳送確認報文給伺服器,告知伺服器,客戶端已經收到了伺服器的初始化的sequence numbner了。

tcp採用四次揮手來釋放連線

第一次揮手:client傳送乙個fin,用來關閉client到server的資料傳送,client進入fin_wait_1狀態;

第二次揮手:server收到fin後,傳送乙個ack給client,確認序號為收到序號+1(與syn相同,乙個fin占用乙個序號),server進入close_wait狀態;

第三次揮手:server傳送乙個fin,用來關閉server到client的資料傳送,server進入last_ack狀態;

第四次揮手:client收到fin後,client進入time_wait狀態,接著傳送乙個ack到server,確認序號為收到序號+1,server進入closed狀態,完成四次揮手。

確保有足夠的時間讓對方收到ack包(如果被動關閉的那方沒有收到ack包就會觸發被動端重發fin包,一來一回剛好是2個msl時間)

避免新舊連線混淆

因為全雙工,傳送方和接收方都需要fin報文和ack報文

對方關閉socket連線,我方忙於讀或寫,沒有及時關閉連線

檢查**,特別是釋放資源的**

檢查配置,特別是處理請求的執行緒配置(可能不是很合理)

Tcp三次握手與四次揮手

tcp三次握手 四次揮手 在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 syn 同步序列編號 synchronize sequence numbers 第二次...

TCP三次握手與四次揮手

也許三次握手你會經常聽到,但你知道三次握手的真正意義嗎,為什麼需要三次握手呢?首先我們必須明白tcp是面向連線的協議,無論哪乙個方向在傳送資料之前,都必須先在雙方之間建立連線。這一點與udp協議是不一樣的,udp在傳送資料報之前是不需要建立連線的。建立tcp連線的過程中,通訊的雙方需要互相發報文進行...

tcp三次握手與四次揮手

一.tcp三次握手 簡述 a傳送乙個請求給b,b發回確認,然後a再加以確認,來回共3次 1 第一次握手 客戶端傳送syn包 syn x 到伺服器,並進入syn send狀態,等待伺服器確認。2 第二次握手 伺服器收到syn包之後,必須確認客戶的syn ack x 1 同時自己也傳送乙個syn syn...