SYN, FIN, ACK, PSH, RST, URG

在TCP層,有個FLAGS字段,這個字段有如下幾個標識:SYN, FIN, ACK, PSH, RST, URG.緩存

其中,對於咱們平常的分析有用的就是前面的五個字段。服務器

 它們的含義是:tcp

SYN表示創建鏈接,spa

FIN表示關閉鏈接,指針

ACK表示響應,進程

PSH表示有 DATA數據傳輸,io

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數據包內容被傳遞。

TCP的鏈接創建和鏈接關閉,都是經過請求-響應的模式完成的。

URG(緊急位): 急指針是一個正的偏移量,和序號字段中的值相加表示緊急數據最後一個字節的序號。T C P的緊急方式是發送端向另外一端發送緊急數據的一種方式。緊急指針指向包內數據段的某個字節(數據從第一字節到指針所指字節就是緊急數據,不進入接收緩衝就直接交給上層進程,餘下的數據要進入接收緩衝的)

PSH(急迫位): 在一個交互程序中,當客戶發送一個命令給服務器時,它設置P U S H標誌並停下來等待服務器的響應。經過容許客戶應用程序通知其T C P設置P U S H標誌,客戶進程通知T C P在向服務器發送一個報文段時不要因等待額外數據而使已提交數據在緩存中滯留。相似地,當服務器的T C P接收到一個設置了P U S H標誌的報文段時,它須要當即將這些數據(包括之前存中滯留的數據)遞交給服務器進程而不能等待判斷是否還會有額外的數據到達。 PSH=1,只對接收方的接收緩衝區起做用,發送方經過使用PUSH位來通知接收方將全部收到的數據當即提交給服務器進程,而不須要等待額外數據(將緩存填滿)而讓數據在緩存中停留!這裏所說的數據包括與此PUSH包一塊兒傳輸的數據以及以前就爲該進程傳輸過來的數據(滯留在緩存中的數據)。

 

 

 概念補充-TCP三次握手:

TCP(Transmission Control Protocol)傳輸控制協議

TCP是主機對主機層的傳輸控制協議,提供可靠的鏈接服務,採用三次握手確認創建一個鏈接:

 位碼即tcp標誌位,有6種標示:SYN(synchronous創建聯機) ACK(acknowledgement 確認) PSH(push傳送) FIN(finish結束) RST(reset重置) URG(urgent緊急)Sequence number(順序號碼) Acknowledge number(確認號碼)

第一次握手:主機A發送位碼爲syn=1,隨機產生seq number=1234567的數據包到服務器,主機B由SYN=1知道,A要求創建聯機;

 第二次握手:主機B收到請求後要確認聯機信息,向A發送ack number=(主機A的seq+1),syn=1,ack=1,隨機產生seq=7654321的包;

 第三次握手:主機A收到後檢查ack number是否正確,即第一次發送的seq number+1,以及位碼ack是否爲1,若正確,主機A會再發送ack number=(主機B的seq+1),ack=1,主機B收到後確認seq值與ack=1則鏈接創建成功。

 完成三次握手,主機A與主機B開始傳送數據。

 

 在TCP/IP協議中,TCP協議提供可靠的鏈接服務,採用三次握手創建一個鏈接。  第一次握手:創建鏈接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;  第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時本身也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;

 第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。完成三次握手,客戶端與服務器開始傳送數據

相關文章
相關標籤/搜索