美國(guó)服務(wù)器用戶有咨詢美聯(lián)科技小編有關(guān)TCP協(xié)議的內(nèi)容,所以今天小編就來(lái)介紹下TCP協(xié)議。TCP傳輸控制協(xié)議是一種面向連接的、基于IP的可靠的傳輸層協(xié)議。美國(guó)服務(wù)器TCP協(xié)議有6種標(biāo)示:SYN/建立聯(lián)機(jī)、ACK/確認(rèn)、PSH/傳送、FIN/結(jié)束、RST/重置、以及URG/緊急。
美國(guó)服務(wù)器TCP協(xié)議的三次握手:
第一次握手:客戶端向服務(wù)器發(fā)送請(qǐng)求報(bào)文,這時(shí)報(bào)文首部中的同部位SYN=1,并生成一個(gè)隨機(jī)序列值seq=n??蛻舳诉M(jìn)入syn-sent同步已發(fā)送狀態(tài),等待服務(wù)器確認(rèn)。
第二次握手:TCP服務(wù)器收到請(qǐng)求報(bào)文后,如果同意連接,則發(fā)出確認(rèn)報(bào)文。確認(rèn)報(bào)文中應(yīng)該 ACK=1,SYN=1,確認(rèn)號(hào)ACK=n+1,同時(shí)也隨機(jī)生成一個(gè)seq=m,此時(shí)美國(guó)服務(wù)器主機(jī)進(jìn)入SYN-RCVD同步收到狀態(tài)。
第三次握手:TCP客戶端進(jìn)程收到確認(rèn)后,還要向美國(guó)服務(wù)器主機(jī)給出確認(rèn)。確認(rèn)報(bào)文的ACK=1,ack=m+1。
三次握手的原因:
如果端口client發(fā)送了一個(gè)請(qǐng)求連接的報(bào)文,但是網(wǎng)絡(luò)不好,這個(gè)請(qǐng)求沒(méi)有立即達(dá)到服務(wù)端,客戶端沒(méi)有收到美國(guó)服務(wù)器主機(jī)的確認(rèn)消息后,任務(wù)該請(qǐng)求報(bào)文已失效了,但是過(guò)了一會(huì)之后server收到報(bào)文,還是會(huì)像client發(fā)送確認(rèn)的報(bào)文,表示同意連接。如果這里不用三次握手,那么只要server發(fā)出確認(rèn)報(bào)文,新的連接就建立了,但其實(shí)這個(gè)請(qǐng)求client已經(jīng)任務(wù)失效了,不會(huì)理睬server的確認(rèn)信息,也不會(huì)向美國(guó)服務(wù)器主機(jī)發(fā)出確認(rèn)的請(qǐng)求,但是server的請(qǐng)求已經(jīng)建立了,并一直等待client的數(shù)據(jù),這樣會(huì)浪費(fèi)server的資源,采用三次握手就是為了防止這種情況的發(fā)生,server會(huì)因?yàn)槭詹坏酱_認(rèn)的報(bào)文,而不會(huì)建立連接。
美國(guó)服務(wù)器TCP協(xié)議的三次握手抓包:
1)使用nc -l localhost 8088監(jiān)聽(tīng)8088端口;
2)客戶端使用nc -v localhost 8088連接8088端口;
3)再開(kāi)個(gè)終端使用 tcpdump -i lo -vv -nnn tcp port 8088 抓包8088端口tcp連接。
美國(guó)服務(wù)器TCP協(xié)議的四次揮手:
第一次揮手:TCP client發(fā)送一個(gè)FIN ,用來(lái)關(guān)閉到服務(wù)端的連接,client進(jìn)入FIN_WAIT_1狀態(tài)。client進(jìn)程發(fā)出連接釋放報(bào)文,并且停止發(fā)送數(shù)據(jù)。釋放報(bào)文首部,FIN=1,其序列號(hào)為seq=x。
第二次揮手:TCP server 收到FIN 后,發(fā)送一個(gè)ACK 確認(rèn),server進(jìn)入CLOSE_WAIT狀態(tài),客戶端收到ACK后會(huì)進(jìn)入FIN_WAIT_2狀態(tài),這時(shí)候處于半關(guān)閉狀態(tài),即客戶端已經(jīng)沒(méi)有數(shù)據(jù)要發(fā)送了,但是美國(guó)服務(wù)器主機(jī)若發(fā)送數(shù)據(jù),客戶端依然要接受。
第三次揮手:TCP server 發(fā)送一個(gè)FIN,用來(lái)關(guān)閉server到client的連接,server進(jìn)入LAST_ACK狀態(tài)。美國(guó)服務(wù)器主機(jī)將最后的數(shù)據(jù)發(fā)送完畢。
第四次揮手:TCP client收到FIN后,client進(jìn)入TIME_WAIT狀態(tài),接著發(fā)送一個(gè)ACK給server,server進(jìn)入CLOSED狀態(tài)TCP連接還沒(méi)有釋放,必須經(jīng)過(guò)2∗∗MSL(最長(zhǎng)報(bào)文段壽命)的時(shí)間后,當(dāng)客戶端撤銷相應(yīng)的TCB后,才進(jìn)入CLOSED狀態(tài)。
四次揮手的原因:
終端為了確保數(shù)據(jù)能夠完全輸出,關(guān)閉連接時(shí),當(dāng)收到主動(dòng)方的FIN報(bào)文通知時(shí),它僅僅表示主動(dòng)方是沒(méi)有數(shù)據(jù)需要發(fā)送了,但是被動(dòng)方可能還需要發(fā)送數(shù)據(jù),所以不會(huì)馬上關(guān)閉SOCKET。于是被動(dòng)方只發(fā)送ACK確認(rèn)報(bào)文,繼續(xù)發(fā)送一些數(shù)據(jù)給主動(dòng)方,然后再發(fā)送FIN報(bào)文,此時(shí)就可以關(guān)閉連接了。
關(guān)注美聯(lián)科技,了解更多IDC資訊!