TCP三次握手,四次揮手

2022-05-08 14:27:10 字數 2389 閱讀 2216

一、tcp包結構:

乙個tcp包結構如下:

乙個tcp包主要由tcp包頭和資料部分組成,包頭固定部分為20位元組,選項和資料部分根據實際情況設定為4n(n可以為0)位元組。

1.16bit源埠和目的埠號,它可以確認資料的傳輸方向(暫不考慮更底層的包)

2.32bit序號,它是為tcp包中資料部分進行編號的部分。假設要傳送的資料有100m,由於受mss( maximum segment size 最大報文段長度)限制,乙個tcp包是不可能傳輸完這100m的資料,於是需要將資料拆分,為了確保拆分傳輸後的資料能在接收端正確的拼接,就需要對每個拆分的資料報進行編號來傳輸。這樣,這個32位的序號指的就是本包資料部分第乙個位元組是這個100m資料中的第多少個位元組。例如:假設傳送第乙個包時,先取出這100m資料的前面1024個位元組傳送,這時這個包中32位序號就是1,然後取下乙個1024位元組傳輸,這個時候的資料部分的第乙個位元組是這100m資料的第1025個位元組,所以這第二tcp包中32位的序列號就應該為1025。當序號超過2^32時,進行乙個輪迴,重新從0開始計數。

3.32bit確認序號,和上面的32位序號類似,只不過它指的是期望收到的下乙個包的資料部分的編號。

4.4bit首部長度,單位為4位元組,指的是乙個tcp包中除去資料部分的長度,也就是包頭固定部分+選項部分的長度,2^4 -1 = 15, 15*4位元組=60位元組,即包頭固定部分為20位元組,選項最多可以為40位元組。

5.標識位:

urg:.........

ack:tcp包的acknowledgement number有效位,1時表明acknowledgement number有效,0表示acknowledgement number無效,忽略acknowledgement number欄位。自tcp連線建立後,ack必須為1。

psh:tcp包中有資料需要盡快傳遞給應用層使用,而不是將資料進行緩衝,等到緩衝區滿了再投遞給應用層。

rst:..........

syn:tcp包的同步位

fin:表示這個方向的帶資料的包傳輸已經完成,即傳送fin包的端沒有帶資料的包過來了,需要釋放這個方向的連線。

二、tcp三次握手

抓包結果如下:

第一次握手:

第二次握手:

第三次握手:

三、為什麼要三次握手

結合網上搜尋,我覺得這是由於tcp是可靠的全雙工的傳輸協議。首先,為什麼要握手?因為需要確保可靠。為什麼要3次,因為3次是理論上確保全雙工握手成功的最少次數。對於單工,確保一次通訊可以需要:1傳送方把資料傳送出去(syn),2接收方回應傳送方接收成功(ack),這樣形成了乙個閉環。看看三次握手怎麼做的:

第一次:client----syn----->server

第二次:server----ack,syn---->client

第三次:client----ack----->server

這樣,從client---->server, server---->client各自通過一次syn,ack形成閉環,理論上形成了乙個近似可靠的通訊。為什麼說是近似可靠?因為完全可靠的通訊是不存在的,見謝希仁《計算機網路》裡面講的紅團藍團問題。

四、tcp的四次揮手

按照理論來說,是要有四次揮手,但是實際抓包,只能抓到前2個包,不知道為什麼?

第一次揮手:

第二次揮手:

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