三次握手和四次挥手图解_三次握手和四次挥手简单理解
TCP三次握手
- TCP標(biāo)志位
TCP在其協(xié)議頭中使用大量的標(biāo)志位或者說1位(bit)布爾域來控制連接狀態(tài),一個包中有可以設(shè)置多個標(biāo)志位。
TCP是主機對主機層的傳輸控制協(xié)議,提供可靠的連接服務(wù),采用三次握手確認(rèn)建立一個連接:
- TCP標(biāo)志位,有6種標(biāo)示:
SYN表示建立連接,
FIN表示關(guān)閉連接,
ACK表示響應(yīng),
PSH表示有 DATA數(shù)據(jù)傳輸,
RST表示連接重置。
URG(緊急)
我們常用的是以下三個標(biāo)志位
序號:表示發(fā)送的數(shù)據(jù)字節(jié)流,確保TCP傳輸有序,對每個字節(jié)編號
確認(rèn)序號:發(fā)送方期待接收的下一序列號,接收成功后的數(shù)據(jù)字節(jié)序列號加 1。只有ACK=1時才有效。
- 三次握手
所謂三次握手是指建立一個TCP連接時,需要客戶端和服務(wù)器總共發(fā)送3個包。
第一次握手:主機客戶端發(fā)送位碼為 syn=1,隨機產(chǎn)生seq number=1234567的數(shù)據(jù)包到服務(wù)器,主機服務(wù)器由syn=1知道,客戶端要求建立聯(lián)機;
第二次握手:主機服務(wù)器收到請求后要確認(rèn)聯(lián)機信息,向客戶端發(fā)送ack number=(主機客戶端的seq+1),syn=1,ack=1,隨機產(chǎn)生seq=7654321的包
第三次握手:主機客戶端收到后檢查ack number是否正確,即第一次發(fā)送的seq number+1,以及位碼ack是否為1,若正確,主機A會再發(fā)送ack number=(主機B的seq+1),ack=1,主機服務(wù)器收到后確認(rèn)seq值與ack=1則連接建立成功。
完成三次握手,主機客戶端與主機服務(wù)器開始傳送數(shù)據(jù)。
- 四次揮手
第一次揮手:客戶端發(fā)送了一個FIN報文,報文中會指定一個序列號,此時客戶端狀態(tài)為FIN_WAIT1狀態(tài)
第二次揮手:服務(wù)端收到FIN之后,會發(fā)送ACK報文,并且把客戶端的序列號+1作為ACK報文的序列號值,表明已經(jīng)收到客戶端的報文了,此時服務(wù)端處于CLOSE_Wait狀態(tài)
第三次揮手:如果服務(wù)端也想斷開連接了,和客戶端的第一次揮手一樣,發(fā)給FIN報文,且指定一個序列號,此時服務(wù)端處于LAST_ACK狀態(tài)。
第四次揮手:客戶端收到FIN之后,一樣發(fā)送一份ACK報文作為應(yīng)答,并且把服務(wù)器的序列號+1作為自己的ACK報文的序列號值,此時客戶端處于TIME_wait狀態(tài),注意此時TCP連接還沒有釋放,必須經(jīng)過2??MSL(最長報文段壽命)的時間后,才進(jìn)入CLOSED狀態(tài)。服務(wù)器只要收到了客戶端發(fā)出的確認(rèn),立即進(jìn)入CLOSED狀態(tài)。
總結(jié)
以上是生活随笔為你收集整理的三次握手和四次挥手图解_三次握手和四次挥手简单理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 100例经典炒菜_Python3经典10
- 下一篇: android飞翔的小鸟游戏素材包_开心