TCP三次握手及TCP連線狀態 TCP報文首部格式

2022-05-29 23:54:18 字數 2056 閱讀 6877

建立tcp連線時的tcp三次握手和斷開tcp連線時的4次揮手整體過程如下圖:

開個玩笑

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

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

ack=1因此,syn置1表示這是乙個連線請求或連線接受報文

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

tcp三次握手過程:

1. 首先由client發出請求連線即syn=1,宣告自己的序號seq=x

2. 然後server進行回覆確認,即syn=1 宣告自己的序號seq=y,並設定ack=x+1

3 .最後client再進行一次確認,設定seq=x+1 ack+y+1

注:seq 序列號範圍:2^32-1 如果超過最大值,再從0開始

seq 序列號作用:依據這個序列號來組資料,如果發n個資料報,服務端會按序列號來重新組裝資料

使用tcpdump抓取tcp三次握手

tcpdump 常用引數:

-c 指定包個數

-n ip,埠用數字方式顯示

port 指定埠

使用client ssh server

檢視server端

flag[s]中的s表示為syn包為1 。client主機返回ack=1 這個值為相對序號,如果想檢視完整序號可以命令後面加-s

tcp連線狀態 :

伺服器端:listen:偵聽來自遠方的tcp埠的連線請求

客戶端:syn-sent:再傳送連線請求後等待匹配的連線請求

伺服器端:syn-received:再收到和傳送乙個連線請求後等待對方對連線請求的確認

客戶端/伺服器端:established:代表乙個開啟的連線

客戶端:fin-wait-1:等待遠端tcp連線中斷請求,或先前的連線中斷請求的確認

伺服器端:close-wait:等待從本地使用者發來的連線中斷請求

客戶端:fin-wait-2:從遠端tcp等待連線中斷請求

伺服器端:last-ack:等待原來的發向遠端tcp的連線中斷請求的確認

客戶端:time-wait:等待足夠的時間以確保遠端tcp接收到連線中斷請求的確認

伺服器端:closed:沒有任何連線狀態

在服務端返回乙個確認的syn-ack包的時候有個潛在的弊端,如果發起的客戶是乙個不存在的客戶端,那麼服務端就不會接到客戶端回應的ack包

這時服務端需要耗費一定的數量的系統記憶體來等待這個未決的連線,直到等待超關閉時間,才能施放記憶體

如果惡意者通過通過ip欺騙,傳送大量syn包給受害者系統,導致服務端存在大量未決的連線並占用大量記憶體和tcp連線,從而導致正常客戶端無法訪問服務端,這就是syn洪水攻擊的過程

TCP協議埠狀態及TCP「三次握手」

tcp 三次握手 了解tcp協議埠的連線狀態,對排除和定位網路或系統故障會有很大幫助。一 listening 偵聽遠方tcp埠的連線請求,當提供的服務沒有被連線時,處於listening狀態,埠等待被連線。二 syn sent 客戶端狀態 客戶端呼叫connect,傳送乙個syn請求建立乙個連線,在...

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 狀態以及三次握手

在tcp層,有個flags欄位,這個欄位有以下幾個標識 syn,fin,ack,psh,rst,urg.其中,對於我們日常的分析有用的就是前面的五個字段。它們的含義是 syn表示建立連線,fin表示關閉連線,ack表示響應,psh表示有 data資料傳輸,rst表示連線重置。其中,ack是可能與sy...