Wireshark Tcp三次握手

 
TCP三次握手Three-way Handshake 
 
一個虛擬鏈接的創建是經過三次握手來實現的 
1. (B) --> [SYN] --> (A) 
 
假如服務器A和客戶機B通信. 當A要和B通訊時,B首先向A發一個SYN (Synchronize) 標記的包,告訴A請求創建鏈接. 
 
注意: 一個 SYN包就是僅SYN標記設爲1的TCP包(參見TCP包頭Resources). 認識到這點很重要,只有當A受到B發來的SYN包,纔可創建鏈接,除此以外別無他法。所以,若是你的防火牆丟棄全部的發往外網接口的SYN包,那麼你將不 能讓外部任何主機主動創建鏈接。
在wireshark抓包分析中,Seq表示數據段的序號,一個Seq號的大小是根據上一個數據段的Seq號和長度len相加而來的。根據Seq序號和len,能夠判斷哪些包丟失。

 

2. (B) <-- [SYN/ACK] <--(A) 
 
接着,A收到後會發一個對SYN包的確認包(SYN/ACK)回去,表示對第一個SYN包的確認,並繼續握手操做. 
 
注意: SYN/ACK包是僅SYN 和 ACK 標記爲1的包. 

3. (B) --> [ACK] --> (A) 
 
B收到SYN/ACK 包,B發一個確認包(ACK),通知A鏈接已創建。至此,三次握手完成,一個TCP鏈接完成 
 
Note: ACK包就是僅ACK 標記設爲1的TCP包. 須要注意的是當三此握手完成、鏈接創建之後,TCP鏈接的每一個包都會設置ACK位

 

這就是爲什麼鏈接跟蹤很重要的緣由了. 沒有鏈接跟蹤,防火牆將沒法判斷收到的ACK包是否屬於一個已經創建的鏈接.通常的包過濾(Ipchains)收到ACK包時,會讓它經過(這絕對不是個 好主意). 而當狀態型防火牆收到此種包時,它會先在鏈接表中查找是否屬於哪一個已建鏈接,不然丟棄該包 服務器

 

在TCP層,有個FLAGS字段,這個字段有如下幾個標識:SYN, FIN, ACK, PSH, RST, URG.
其中,對於咱們平常的分析有用的就是前面的五個字段。spa

它們的含義是:指針

URG:Urget pointer is valid (緊急指針字段值有效)接口

SYN: 表示創建鏈接,攜帶此標誌位的包表示正在發起鏈接請求get

FIN: 表示關閉鏈接,攜帶此標誌位的包表示正在請求終止鏈接服務器端

ACK: 表示響應,確認號請求

PSH: 表示有 DATA數據傳輸防火牆

RST: 表示鏈接重置,或者拒絕一個無效的請求總結


其中,ACK是可能與SYN,FIN等同時使用的,好比SYN和ACK可能同時爲1,它表示的就是創建鏈接以後的響應,若是隻是單個的一個SYN,它表示的只是創建鏈接。TCP的幾回握手就是經過這樣的ACK表現出來的。但SYN與FIN是不會同時爲1的,由於前者表示的是創建鏈接,然後者表示的是斷開鏈接。RST通常是在FIN以後纔會出現爲1的狀況,表示的是鏈接重置。通常地,當出現FIN包或RST包時,咱們便認爲客戶端與服務器端斷開了鏈接;而當出現SYN和SYN+ACK包時,咱們認爲客戶端與服務器創建了一個鏈接。PSH爲1的狀況,通常只出如今 DATA內容不爲0的包中,也就是說PSH爲1表示的是有真正的TCP數據包內容被傳遞。通信

 

三次握手(總結)

    Client --> 置SYN標誌 序列號 = J,確認號 = 0 ----> Server

    Client <-- 置SYN標誌 置ACK標誌 序列號 = K, 確認號 = J + 1 <-- Server

    Clinet --> 置ACK標誌 序列號 = J + 1,確認號 = K + 1 --> Server
 
連接創建後,接下來Client端發送的數據包將從J + 1開始,Server端發送的數據包將從K + 1開始,這裏要說明的是:創建連接時,Client端宣稱本身的初始序列號是J,Server端宣稱本身的初始序列號是K,可是創建鏈接後的數據包卻各自中初始序列號+1開始,這是由於SYN請求自己須要佔用一個序列號 
 
 
數據傳輸(總結)

     Client --> 置PSH標誌,置ACK標誌 序列號 = 55555, 確認號 = 22222,數據包長度 = 11 ---> Server

     Client <-- 置ACK標誌,序列號 = 22222, 確認號 = 55566 (=55555 + 11),數據包長度 = 0 <--- Server

     Client <-- 置PSH標誌,置ACK標誌 序列號 = 22223, 確認號 = 55566,數據包長度 = 22 <--- Server

     Client --> 置ACK標誌,序列號 = 55566, 確認號 = 22244(=22222+22),數據包長度 = 0 ---> Server
相關文章
相關標籤/搜索