|
|
|
發(fā)新文章 |
|
|
在TCP層,有個FLAGS字段,這個字段有以下幾個標識:SYN, FIN, ACK, PSH, RST, URG.其中,對于我們?nèi)粘5姆治鲇杏玫木褪乔懊娴奈鍌€字段。它們的含義是:SYN表示建立連接,FIN表示關閉連接,ACK表示響應,PSH表示有 DATA數(shù)據(jù)傳輸,RST表示連接重置。其中,ACK是可能與SYN,F(xiàn)IN等同時使用的,比如SYN和ACK可能同時為1,它表示的就是建立連接之后的響應,如果只是單個的一個SYN,它表示的只是建立連接。TCP的幾次握手就是通過這樣的ACK表現(xiàn)出來的。但SYN與FIN是不會同時為1的,因為前者表示的是建立連接,而后者表示的是斷開連接。RST一般是在FIN之后才會出現(xiàn)為1的情況,表示的是連接重置。一般地,當出現(xiàn)FIN包或RST包時,我們便認為客戶端與服務器端斷開了連接;而當出現(xiàn)SYN和SYN+ACK包時,我們認為客戶端與服務器建立了一個連接。PSH為1的情況,一般只出現(xiàn)在 DATA內(nèi)容不為0的包中,也就是說PSH為1表示的是有真正的TCP數(shù)據(jù)包內(nèi)容被傳遞。TCP的連接建立和連接關閉,都是通過請求-響應的模式完成的。概念補充-TCP三次握手:TCP(Transmission Control Protocol)傳輸控制協(xié)議TCP是主機對主機層的傳輸控制協(xié)議,提供可靠的連接服務,采用三次握手確認建立一個連接: 位碼即tcp標志位,有6種標示:SYN(synchronous建立聯(lián)機) ACK(acknowledgement 確認) PSH(push傳送) FIN(finish結束) RST(reset重置) URG(urgent緊急)Sequence number(順序號碼) Acknowledge number(確認號碼)第一次握手:主機A發(fā)送位碼為syn=1,隨機產(chǎn)生seq number=1234567的數(shù)據(jù)包到服務器,主機B由SYN=1知道,A要求建立聯(lián)機;第二次握手:主機B收到請求后要確認聯(lián)機信息,向A發(fā)送ack number=(主機A的seq+1),syn=1,ack=1,隨機產(chǎn)生seq=7654321的包;第三次握手:主機A收到后檢查ack number是否正確,即第一次發(fā)送的seq number+1,以及位碼ack是否為1,若正確,主機A會再發(fā)送ack number=(主機B的seq+1),ack=1,主機B收到后確認seq值與ack=1則連接建立成功。完成三次握手,主機A與主機B開始傳送數(shù)據(jù)。在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務,采用三次握手建立一個連接。第一次握手:建立連接時,客戶端發(fā)送syn包(syn=j)到服務器,并進入SYN_SEND狀態(tài),等待服務器確認;第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發(fā)送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態(tài);第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發(fā)送確認包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務器進入ESTABLISHED狀態(tài),完成三次握手。完成三次握手,客戶端與服務器開始傳送數(shù)據(jù).
|