在TCP層,有個(gè)FLAGS字段,這個(gè)字段有以下幾個(gè)標(biāo)識(shí):SYN, FIN, ACK, PSH, RST, URG.

其中,對(duì)于我們?nèi)粘5姆治鲇杏玫木褪乔懊娴奈鍌€(gè)字段。

它們的含義是:

SYN表示建立連接,
FIN表示關(guān)閉連接,
ACK表示響應(yīng),
PSH表示有 DATA數(shù)據(jù)傳輸,
RST表示連接重置。

其中,ACK是可能與SYN,F(xiàn)IN等同時(shí)使用的,比如SYN和ACK可能同時(shí)為1,它表示的就是建立連接之后的響應(yīng),

如果只是單個(gè)的一個(gè)SYN,它表示的只是建立連接。

TCP的幾次握手就是通過(guò)這樣的ACK表現(xiàn)出來(lái)的。

但SYN與FIN是不會(huì)同時(shí)為1的,因?yàn)榍罢弑硎镜氖墙⑦B接,而后者表示的是斷開(kāi)連接。

RST一般是在FIN之后才會(huì)出現(xiàn)為1的情況,表示的是連接重置。

一般地,當(dāng)出現(xiàn)FIN包或RST包時(shí),我們便認(rèn)為客戶端與服務(wù)器端斷開(kāi)了連接;而當(dāng)出現(xiàn)SYN和SYN+ACK包時(shí),我們認(rèn)為客戶端與服務(wù)器建立了一個(gè)連接。

PSH為1的情況,一般只出現(xiàn)在 DATA內(nèi)容不為0的包中,也就是說(shuō)PSH為1表示的是有真正的TCP數(shù)據(jù)包內(nèi)容被傳遞。

TCP的連接建立和連接關(guān)閉,都是通過(guò)請(qǐng)求-響應(yīng)的模式完成的。

概念補(bǔ)充-TCP三次握手:

TCP(Transmission Control Protocol)傳輸控制協(xié)議
TCP是主機(jī)對(duì)主機(jī)層的傳輸控制協(xié)議,提供可靠的連接服務(wù),采用三次握手確認(rèn)建立一個(gè)連接:

位碼即tcp標(biāo)志位,有6種標(biāo)示:SYN(synchronous建立聯(lián)機(jī)) ACK(acknowledgement 確認(rèn)) PSH(push傳送) FIN(finish結(jié)束) RST(reset重置) URG(urgent緊急)Sequence number(順序號(hào)碼) Acknowledge number(確認(rèn)號(hào)碼)

第一次握手:主機(jī)A發(fā)送位碼為syn=1,隨機(jī)產(chǎn)生seq number=1234567的數(shù)據(jù)包到服務(wù)器,主機(jī)B由SYN=1知道,A要求建立聯(lián)機(jī);
第二次握手:主機(jī)B收到請(qǐng)求后要確認(rèn)聯(lián)機(jī)信息,向A發(fā)送ack number=(主機(jī)A的seq+1),syn=1,ack=1,隨機(jī)產(chǎn)生seq=7654321的包;
第三次握手:主機(jī)A收到后檢查ack number是否正確,即第一次發(fā)送的seq number+1,以及位碼ack是否為1,若正確,主機(jī)A會(huì)再發(fā)送ack number=(主機(jī)B的seq+1),ack=1,主機(jī)B收到后確認(rèn)seq值與ack=1則連接建立成功。

完成三次握手,主機(jī)A與主機(jī)B開(kāi)始傳送數(shù)據(jù)。



在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù),采用三次握手建立一個(gè)連接。
第一次握手:建立連接時(shí),客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);
第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);
第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。完成三次握手,客戶端與服務(wù)器開(kāi)始傳送數(shù)據(jù).