TCP 協議連線與關閉的握手

2022-01-23 05:45:11 字數 1451 閱讀 8616

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會傳送探測資訊, 以決定是否釋放連線

TCP 連線與關閉

一.tcp 協議 傳輸控制協議 transmission control protocol,tcp 是種面向連線 確保資料在端到端間可靠傳輸的協議。面向連線是插在傳送資料前,需要先建立一條虛擬的鏈路,然後讓資料在這條鏈路上 流動 完成傳輸。1 tcp 協議的報文頭 2 協議六個狀態位 連線協議相關的...

TCP握手協議

tcp握手協議 在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack j 1 同時自己也傳送乙個syn包...

TCP握手協議

在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack j 1 同時自己也傳送乙個syn包 syn k 即...