TCP資料包分析
TCP
序號
序號:在一個TCP連線中傳輸的位元組流中的每一個位元組都按順序編號,本欄位表示本報文段所傳送資料的第一個位元組的序號。
確認號
確認號:期望收到對方下一個報文段的第一個資料位元組的序號。若確認號為N,則證明到序號N-1為止的所有資料都已正確收到。
資料偏移(4位)
資料偏移(首部長度):TCP報文段的資料部分起始處 距離TCP首部的起始處的距離,以4B為單位,即一個數值是4B。
6個控制位(每個一位)
緊急位URG:URG=1時,表明此報文段中有緊急資料,是高優先順序的資料,應儘快傳遞,不用再緩衝中排隊,配合緊急指標欄位使用。
確認位ACK:ACK=1時,確認號有效,在連線建立後所有傳送的報文段都必須把ACK
推送位PSH:PSH=1時,接收方儘快交付接收應用程序,不再等到快取填滿再向上交付。
復位RST :RST=1時,表明TCP連接出現險種差錯,必須釋放連線,然後重新建立傳輸連結。
同步位SYN:SYN=1時,表明是一個連線請求/連線接受報文。
終止位FIN:FIN=1時,表明此報文段傳送方資料已傳送完,要釋放連線。
視窗
視窗:指的是傳送本報文段的一方的接收視窗,即現在允許對方傳送的資料量。
檢驗和
檢驗和:檢驗首部+資料,檢驗時要加上12B偽首部,第四個欄位為6.
緊急指標
緊急指標:URG = 1時才有意義,指出本報文段中緊急資料的位元組數。緊急資料在資料部分的開始。
選項
選項:
TCP的連線建立
三次握手
ROUND1:客戶端傳送連線請求報文段,無應用層資料。
SYN = 1
,seq = x
(隨機)
ROUND2:伺服器端為該TCP連線分配快取和變數,並向客戶端返回確認報文段,允許連線,無應用層資料。
SYN = 1
,ACK = 1
,seq = y
(隨機),ack = x + 1
ROUND3:客戶端為該TCP連線分配快取和變數,並向伺服器端返回確認的確認,可以攜帶資料。
SYN = 0
,ACK = 1
,seq = x + 1
,ack = y + 1
解決SYN攻擊的方法:SYN cookie
四次揮手
ROUND1:客戶端傳送連線釋放報文段,停止傳送資料,主動關閉TCP連線。
FIN = 1
,seq = u
ROUND2:伺服器端回送一個確認報文段,客戶到伺服器這個方向的連線就釋放了,就是半關閉狀態。
ACK = 1
,ack = u+1
,seq = v
SYN = 1
,ACK = 1
,seq = y
(隨機),ack = x + 1
ROUND3:伺服器端傳送完資料,就傳送連線釋放報文段,主動關閉TCP連線。
FIN = 1
,ACK = 1
,seq = w
,ack = u + 1
ROUND4:客戶端回送一個確認報文段,再等到時間等待計時器設定的2MSL(最長報文段壽命)後,連線徹底關閉。
Wireshark 抓包
frame:物理層
Ethernet:資料鏈路層
Internet:網路層
Transmission:傳輸層
抓包分析:
三次握手:
四次揮手(我這裡不知道是不是沒有抓取完畢):
參考連結:王道考研