TCP三次握手和釋放

2022-02-17 15:58:21 字數 1499 閱讀 2705

tcp頭部: 其中 ack   syn  序號  這三個部分在以下會用到,它們的介紹也在下面。

暫時需要的資訊有:

ack : tcp協議規定,只有ack=1時有效,也規定連線建立後所有傳送的報文的ack必須為1

syn(synchronization) : 在連線建立時用來同步序號。當syn=1而ack=0時,表明這是乙個連線請求報文。對方若同意建立連線,則應在響應報文中使syn=1和ack=1. 因此,  syn置1就表示這是乙個連線請求或連線接受報文。

fin (finis)即完,終結的意思, 用來釋放乙個連線。當 fin = 1 時,表明此報文段的傳送方的資料已經傳送完畢,並要求釋放連線。

三次握手的過程:

首先由client發出請求連線即 syn=1 ack=0  (請看頭欄位的介紹), tcp規定syn=1時不能攜帶資料,但要消耗乙個序號,因此宣告自己的序號是 seq=x

然後 server 進行回覆確認,即 syn=1 ack=1 seq=y, ack=x+1,

再然後 client 再進行一次確認,但不用syn 了,這時即為 ack=1, seq=x+1, ack=y+1.

然後連線建立,為什麼要進行三次握手呢(兩次確認)。

下面是釋放連線的過程:

當客戶a 沒有東西要傳送時就要釋放 a 這邊的連線,a會傳送乙個報文(沒有資料),其中 fin 設定為1,  伺服器b收到後會給應用程式乙個信,這時a那邊的連線已經關閉,即a不再傳送資訊(但仍可接收資訊)。  a收到b的確認後進入等待狀態,等待b請求釋放連線, b資料傳送完成後就向a請求連線釋放,也是用fin=1 表示, 並且用 ack = u+1(如圖), a收到後回覆乙個確認資訊,並進入 time_wait 狀態, 等待 2msl 時間。

為什麼要等待呢?

為了這種情況: b向a傳送 fin = 1 的釋放連線請求,但這個報文丟失了, a沒有接到不會傳送確認資訊, b 超時會重傳,這時a在 wait_time 還能夠接收到這個請求,這時再回覆乙個確認就行了。(a收到 fin = 1 的請求後 wait_time會重新記時)

另外伺服器b存在乙個保活狀態,即如果a突然故障宕機了,那b那邊的連線資源什麼時候能釋放呢?  就是保活時間到了後,b會傳送探測資訊, 以決定是否釋放連線。

from:

TCP鏈結(三次握手)和釋放(四次握手)

tcp報文段首部格式 序號 本報文段所傳送的資料的第乙個位元組的序號。確認號ack 期待收到 對方下乙個報文段的第乙個資料位元組的序號 確認ack 佔1位,僅當ack 1時,確認號字段才有效。ack 0時,確認號無效 同步syn 連線建立時用於同步序號。當syn 1,ack 0時表示 這是乙個連線請...

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的三次連線握手和四次釋放握手

這篇部落格講的很清楚。下面我簡單說明一下 三次連線握手,首先client傳送請求報文,然後伺服器返回,客戶端在傳送請求。為什麼要三次握手,兩次握手不就夠了嗎?三次握手是為了確保安全,client向server傳送請求,server返回了以後,server不知道client有沒有收到返回,所以無法確定...