TCP为何采用三次握手来建立连接,若采用二次握手可以吗
?TCP(Transmission Control Protocol?傳輸控制協(xié)議)是一種面向連接(連接導(dǎo)向)的、可靠的、基于IP的傳輸層協(xié)議,采用三次握手確認(rèn)建立一個(gè)連接。
TCP為了保證報(bào)文傳輸?shù)目煽縖1],就給每個(gè)包一個(gè)序號(hào),同時(shí)序號(hào)也保證了傳送到接收端實(shí)體的包的按序接收。然后接收端實(shí)體對(duì)已成功收到的字節(jié)發(fā)回一個(gè)相應(yīng)的確認(rèn)(ACK);如果發(fā)送端實(shí)體在合理的往返時(shí)延(RTT)內(nèi)未收到確認(rèn),那么對(duì)應(yīng)的數(shù)據(jù)(假設(shè)丟失了)將會(huì)被重傳。
2. TCP協(xié)議三次握手過(guò)程分析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開始傳送數(shù)據(jù)。
3. TCP連接建立在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ù)器開始傳送數(shù)據(jù).
4. 通俗理解
通俗理解
第一次對(duì)話:
前方敵軍火力很猛,團(tuán)長(zhǎng)叫通訊員小張打電話請(qǐng)求總部支援。
小張拿起電話,說(shuō):“呼叫總部,這里是獨(dú)立團(tuán)”。不巧電話線被炸斷了,總部接收不到小張傳來(lái)的信息的情況下,溝通失敗。
如果總部聽到小張的呼叫,那么第一次對(duì)話成功,接下來(lái)進(jìn)行第二次對(duì)話。
第二次對(duì)話:
總部聽到了小張的話,但是不巧,總部接電話的只有一個(gè)外國(guó)友軍,來(lái)了句"Hello, balabal"。小張農(nóng)民出身,一句聽不懂,多次嘗試,溝通失敗。說(shuō)明總部無(wú)法做出正確的應(yīng)答情況下溝通失敗。
如果總部聽到小張的話,并做出正確應(yīng)答,并且進(jìn)行反問(wèn),:”小張同志,詳細(xì)說(shuō)一下具體情況。 那么第二次握手成功。
通過(guò)前兩次對(duì)話,說(shuō)明總部聽懂了小張的話,并且做出正確應(yīng)答,接下來(lái)進(jìn)行第3次對(duì)話。
第三次對(duì)話:
小張剛說(shuō)完話,來(lái)了一個(gè)子彈,小張同志犧牲了??偛康攘嗽S久,沒(méi)聽到小張回話,通話結(jié)束。說(shuō)明小張?jiān)跓o(wú)法應(yīng)答的情況下溝通失敗。
如果小張剛好穿了防彈衣,做出應(yīng)答:"敵人的火力很猛,請(qǐng)求支援。兩人第3次對(duì)話成功,兩人建立起順暢的溝通渠道,接下來(lái)開始持續(xù)通話。
聽過(guò)第二次和第三次對(duì)話,證明了總部能聽懂小張的話,并且做出正確應(yīng)答。
可見,小張要和總部溝通,3次通話過(guò)程是必須的。TCP采用三次握手來(lái)建立連接,也可以理解了。
5. 為什么要建立3次握手,一次連接為了保證服務(wù)端能收接受到客戶端的信息并能做出正確的應(yīng)答而進(jìn)行前兩次(第一次和第二次)握手。
為了保證客戶端能夠接收到服務(wù)端的信息并能做出正確的應(yīng)答而進(jìn)行后兩次(第二次和第三次)握手。
如果只是兩次,就不能客戶端是否收到服務(wù)器端的應(yīng)答。
6. 引用http://baike.baidu.com/subview/32754/8048820.htm?from_id=8988699&type=syn&fromtitle=TCP%E5%8D%8F%E8%AE%AE&fr=aladdin?
http://www.cnblogs.com/CBDoctor/archive/2012/10/17/2727073.html
轉(zhuǎn)載于:https://www.cnblogs.com/qianwen/p/3936054.html
總結(jié)
以上是生活随笔為你收集整理的TCP为何采用三次握手来建立连接,若采用二次握手可以吗的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python类相关
- 下一篇: oracle中md5加密解密_Oracl