在TCP層,有個FLAGS字段,這個字段有如下幾個標識:SYN, FIN, ACK, PSH, RST, URG.html
其中,對咱們平常分析有用的就是前五個字段。
它們的含義分別是:
SYN標識創建鏈接
FIN表示響應
ACK表示響應
PSH表示有DATA數據傳輸
RST表示鏈接重置
其中,ACK是可能與SYN,FIN同時使用的,好比SYN和ACK可能同時爲1,它表示的就是創建鏈接以後的響應,
若是隻是單個的一個SYN,它表示的只是創建鏈接。
TCP的幾回握手就是經過這樣的ACK表現出來的。
但SYN與FIN是不會同時爲1的,由於SYN表示創建鏈接而FIN表示斷開鏈接。服務器
RST通常是在FIN以後纔會出現爲1的狀況,表示的是鏈接重置。spa
通常地,當出現FIN包或RST包時,咱們便認爲客戶端與服務器端斷開了鏈接;而當出現SYN和SYN+ACK包時,咱們認爲客戶端與服務器創建了一個鏈接。htm
PSH爲1的狀況,通常只出如今 DATA內容不爲0的包中,也就是說PSH爲1表示的是有真正的TCP數據包內容被傳遞。blog
TCP的鏈接創建和鏈接關閉,都是經過請求-響應的模式完成的。three
三次握手協議get
三次握手(three times handshake;three-way handshake)所謂的「三次握手」即對每次發送的數據量是怎樣跟蹤進行協商使數據段的發送和接收同步,根據所接收到的數據量而肯定的數據確認數及數據發送、接收完畢後什麼時候撤消聯繫,並創建虛鏈接。爲了提供可靠的傳送,TCP在發送新的數據以前,以特定的順序將數據包的序號,並須要這些包傳送給目標機以後的確認消息。TCP老是用來發送大批量的數據。當應用程序在收到數據後要作出確認時也要用到TCP。同步
第一次class
第一次握手:創建鏈接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SENT狀態,等待服務器確認;SYN:同步序列編號(Synchronize Sequence Numbers)。服務器端
第二次
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時本身也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。