TCP的三次握手連線和TCP四次揮手

2021-08-26 08:49:21 字數 1859 閱讀 6524

1.tcp建立連線,三次握手

建立的tcp連線可靠的連線,必須經過三次握手建立連線才能正式通訊彼此傳輸數資料。

客戶端請求服務端建立連線

第一次握手:客戶給服務傳送乙個請求報文syn, 客戶端的狀態置syn_sent狀態

第二次握手:服務端在收到客戶端發過來的syn請求報文後,開始給客戶端傳送ack報文和syn報文,狀態置為syn_rece

第三次握手:客戶端口收到服務埠過來的syn報文和ack報文後,狀態由原來的syn_sent狀態變為established;並且給服務傳送乙個ack報文告知對方已經送到服務端傳送的syn報文,服務端收到報文後,由原來的syn_rece變為established

至此客戶到服務端,服務端到客戶端的雙向連線建立好了並且處理established。雙方可以進行資料交換了。

2.tcp斷開連線,四次揮手。

當客戶端把所有資料傳送完畢的時候,給服務埠送乙個fin報文,告知服務端:我這邊沒有資料可傳,希望關閉客戶端到服務端方向的連線。之後其狀態由原來的

established 變為fin_wait_1,;

服務端收到客戶的fin報文後,送乙個ack報文給客戶端,告知「我服務端知道你客戶端口已經沒有資料可傳,但是我這邊什麼關閉連線,還需要等我的資料傳完;如果我這裡資料也傳送完了,我也會給傳送乙個fin報文。」。此時服務端傳送ack報文後,狀態由之前的established 變為close_wait

客戶端端收到服務的ack報文,將fin_wait_1置fin_wait_2,同時,繼續等來的服務傳送fin報文。

當服務端資料傳送也完畢的後,開始給客戶端傳送fin包,傳送fin包後,其狀態close_wait置為last_ack

客戶端口收到了服務的發過來的fin包後,又給服務端傳送ack。傳送ack後,狀態由原來的fin_wait_2置為time_wait,客戶在經過2msl 時間進入close狀態

服務埠收到客戶端傳送的ack後,由last_ack也進入close

3.tcp遷移狀態:

listen:服務端已經啟動乙個socket,其狀態處於監聽狀態,等待客戶發起請求連線。

established:客戶端和服務端經過三次握手建立,兩個方向上連線狀態都建立,狀態置為established

客戶端狀態變遷:(主動端)

fin_wait_1: 傳送fin給服務埠。

fin_wait_2:收到服務端的ack報文

time_wait :收到服務端發過來的fin報文,傳送ack報文給服務埠。主動關閉連線端,接收到服務(time_wait是主動端關閉)之後進入2msl時間的等待

close:2msl過後,關閉進入初始化狀態。

服務端狀態變遷:(服務端)

close_wait:收到客戶端fin報文,給客戶端傳送ack狀態後,表示知道客戶端要關閉連線請求,服務端可能資料還沒有傳送完,所以處於等待關閉狀態。(close_wait是被動端關閉)

last_ack:服務端資料傳輸完畢,傳送fin報文給客戶端,同時等待客戶端發ack報文狀態

close:收到客戶端ack報文後,進入初始化狀態

連線是雙方建立的。傳送資料的端客戶也轉變為接受資料的服務埠,服務端和客戶角色是相互轉換的

msl就是maximum segment lifetime(最大分節生命期),這是乙個ip資料報能在網際網路上生存的最長時間,超過這個時間ip資料報將在網路中消失 。msl在rfc 1122上建議是2分鐘,而源自berkeley的tcp實現傳統上使用30秒

time_wait狀態維持時間

time_wait狀態維持時間是兩個msl時間長度,也就是在1-4分鐘。windows作業系統就是4分鐘。

tcp三次握手 TCP 三次握手總結

tcp特點概述 tcp segment structure 段結構 step2 server host receives syn,replie with syn ack segment 答覆syn ack報文段 step3 client receives synack,replies with ac...

TCP連線的三次握手

第一次握手 客戶端傳送 同步序列編號 syn syn j 到伺服器 並進入 傳送 syn send 狀態,等待伺服器確認 第二次握手 伺服器收到 同步序列編號 syn包,確認客戶的syn ack j 1 同時自己也傳送乙個 確認標誌 syn包 syn k 即syn ack包,此時伺服器進入 接收 s...

tcp 三次握手連線,四次握手斷開

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