三報(bào)文握手的理解
三報(bào)文握手(three way handshake)以前都稱(chēng)為三次握手嚼黔,其實(shí)這是一次握手過(guò)程中交換中交換了三個(gè)報(bào)文,而并不是進(jìn)行了三次握手帆调。handshake使用的是單數(shù)并不是復(fù)數(shù)垛孔,表明只是一次握手。
三報(bào)文握手圖解
部分概念梳理
1.SYN_SENT
SYN_SENT表示請(qǐng)求連接海雪,當(dāng)你要訪問(wèn)其它的計(jì)算機(jī)的服務(wù)時(shí)首先要發(fā)個(gè)同步信號(hào)給該端口,此時(shí)狀態(tài)為SYN_SENT舱殿,如果連接成功了就變?yōu)?a target="_blank">ESTABLISHED喳魏,此時(shí)SYN_SENT狀態(tài)非常短暫。
2.ACK
ACK (Acknowledgement)即是確認(rèn)字符怀薛,在數(shù)據(jù)通信中,接收站發(fā)給發(fā)送站的一種傳輸類(lèi)控制字符迷郑。表示發(fā)來(lái)的數(shù)據(jù)已確認(rèn)接收無(wú)誤枝恋。
3.SYN_RCVD(同步收到)
4.ESTAB_LISHED(已建立連接)
5.傳輸控制模塊TCB
傳輸控制模塊TCB(Transmission Control Block)存儲(chǔ)了每一個(gè)連接中的一些重要信息。
三報(bào)文握手過(guò)程詳解
一開(kāi)始嗡害,B的PCP服務(wù)器進(jìn)程先創(chuàng)建傳輸控制模塊TCB焚碌,準(zhǔn)備接受客戶(hù)進(jìn)程的連接請(qǐng)求。然后服務(wù)器進(jìn)程就處于LISTEN(收聽(tīng))狀態(tài)霸妹,等待客戶(hù)的連接請(qǐng)求十电。
1.SYN=1,seq=x
A的TCP客戶(hù)進(jìn)程也是首先創(chuàng)建傳輸控制模塊TCB,然后叹螟,在打算建立TCP連接時(shí)鹃骂,向B發(fā)出請(qǐng)求報(bào)文段,這時(shí)首部中的同步位SYN=1
罢绽,同時(shí)選擇一個(gè)初始序號(hào)seq=x
畏线。即SYN=1,seq=x
。TCP規(guī)定良价,SYN報(bào)文段(即SYN=1的報(bào)文段)不能攜帶數(shù)據(jù)寝殴,但要消耗一個(gè)序號(hào)蒿叠。這時(shí),TCP客戶(hù)進(jìn)程進(jìn)入SYN_SENT(同步已發(fā)送)狀態(tài)蚣常。
2.SYN=1,ACK=1,seq=y,ack=x+1
B收到連接請(qǐng)求報(bào)文段后市咽,如同意建立連接,則向A發(fā)送確認(rèn)抵蚊。在確認(rèn)報(bào)文段中應(yīng)把SYN位和ACK位都置1施绎,確認(rèn)號(hào)是ack=x+1
,同時(shí)也為自己選擇一個(gè)初始號(hào)seq=y
泌射。即SYN=1,ACK=1,seq=y,ack=x+1
請(qǐng)注意:這個(gè)報(bào)文段也不能攜帶數(shù)據(jù)粘姜,但同時(shí)要消耗一個(gè)序號(hào)。這時(shí)TCP服務(wù)器進(jìn)程進(jìn)入SYN_RCVD(同步收到)狀態(tài)熔酷。
3.ACK=1,seq=x+1,ack=y+1
TCP客戶(hù)進(jìn)程收到B的確認(rèn)后孤紧,還要向B給出確認(rèn)。確認(rèn)報(bào)文段的ACK置1拒秘,確認(rèn)號(hào)ack=y+1
号显,而自己的序號(hào)seq=x+1
。即ACK=1,seq=x+1,ack=y+1
TCP的標(biāo)準(zhǔn)規(guī)定躺酒,ACK報(bào)文段可以攜帶數(shù)據(jù)押蚤。但如果不攜帶數(shù)據(jù)則不消耗序號(hào),在這中情況下羹应,下一個(gè)數(shù)據(jù)報(bào)文段仍然是seq=x+1
揽碘。這時(shí)。TCP連接已經(jīng)建立园匹,A進(jìn)入ESTAB_LISHED(已建立連接)狀態(tài)雳刺。
4.當(dāng)B收到A的確認(rèn)后,也進(jìn)入ESTAB_LISHED狀態(tài)裸违。