TCP協(xié)議
TCP協(xié)議已經(jīng)是一種可靠的網(wǎng)絡(luò)傳輸協(xié)議啄刹。在創(chuàng)建TCP連接時,客戶端和服務(wù)端會先進行三次握手,確保服務(wù)端能夠收到客戶端的數(shù)據(jù)州胳。而終止一個TCP連接需要四次揮手(由于TCP的半關(guān)閉的特性導(dǎo)致的)。
三次握手
為了保證創(chuàng)建的TCP鏈接能夠正確的發(fā)送數(shù)據(jù)逸月,需要先進行一次數(shù)據(jù)交互栓撞。
SYN:連接請求/接收 報文段
seq:發(fā)送的第一個字節(jié)的序號
ACK:確認(rèn)報文段
ack:確認(rèn)號。希望收到的下一個數(shù)據(jù)的第一個字節(jié)的序號
這個流程可以符合我們打招呼的情景彻采。
客戶端:吃了沒腐缤?(發(fā)送SYN=1,seq=x)
服務(wù)端:吃過了肛响,你吃了沒岭粤?(發(fā)送SYN=1,seq=y特笋,確認(rèn)ACK=1剃浇,ack=x+1)
客戶端:我也吃過了。(確認(rèn)ACK=1,seq=x+1猎物,ack=y+1)
經(jīng)過以上三次對話虎囚,客戶端和服務(wù)端都正好都獲取到雙方的發(fā)送的信息。
四次揮手
由于 TCP 的半關(guān)閉(half-close)特性造成的蔫磨,TCP 提供了連接的一端在結(jié)束它的發(fā)送后還能接收來自另一端數(shù)據(jù)的能力淘讥。
半關(guān)閉:TCP 提供了連接的一端在結(jié)束它的發(fā)送后還能接收來自另一端數(shù)據(jù)的能力。任何一方都可以在數(shù)據(jù)傳送結(jié)束后發(fā)出連接釋放的通知堤如,待對方確認(rèn)后進入半關(guān)閉狀態(tài)蒲列。當(dāng)另一方也沒有數(shù)據(jù)再發(fā)送的時候窒朋,則發(fā)出連接釋放通知,對方確認(rèn)后就完全關(guān)閉了TCP連接蝗岖。
FIN :連接終止位
seq:發(fā)送的第一個字節(jié)的序號
ACK:確認(rèn)報文段
ack:確認(rèn)號侥猩。希望收到的下一個數(shù)據(jù)的第一個字節(jié)的序號
這個流程換成日常再見的流程。
客戶端:到點啦抵赢,俺該回家啦欺劳。(發(fā)送FIN,seq)
服務(wù)端:急啥铅鲤,這才幾點划提,再拉會呱。(發(fā)送seq,確認(rèn)ACK,ack)
服務(wù)端:(巴拉巴拉說一堆邢享,說完了)腔剂。(發(fā)送FIN,seq,確認(rèn)ACK,ack)
客戶端:俺走啦驼仪。(確認(rèn)ACK,ack,發(fā)送seq)
以上四次對話掸犬,結(jié)束本次串門。