[计算机网络][总结][常见问题][TCP][三次握手][四次挥手]
TCP三次握手 四次揮手
三次握手
目的:保證傳輸?shù)目煽啃?為了防止已失效的連接請(qǐng)求報(bào)文段突然又傳送到了服務(wù)端,因而產(chǎn)生錯(cuò)誤。主要防止資源的浪費(fèi)。
具體過(guò)程:當(dāng)客戶端發(fā)出第一個(gè)連接請(qǐng)求報(bào)文段時(shí)并沒(méi)有丟失,而是在某個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)出現(xiàn)了長(zhǎng)時(shí)間的滯留,以至于延誤了連接請(qǐng)求在某個(gè)時(shí)間之后才到達(dá)服務(wù)器。這應(yīng)該是一個(gè)早已失效的報(bào)文段。但是服務(wù)器在收到此失效的連接請(qǐng)求報(bào)文段后,以為是客戶端的一個(gè)新請(qǐng)求,于是就想客戶端發(fā)出了確認(rèn)報(bào)文段,同意建立連接。假設(shè)不采用三次握手,那么只要服務(wù)器發(fā)出確認(rèn)后,新的連接就可以建立了。但是由于客戶端沒(méi)有發(fā)出建立連接的請(qǐng)求,因此不會(huì)管服務(wù)器的確認(rèn),也不會(huì)向服務(wù)器發(fā)送數(shù)據(jù),但服務(wù)器卻以為新的運(yùn)輸連接已經(jīng)建立,一直在等待,所以,服務(wù)器的資源就白白浪費(fèi)掉了。
四次揮手
由于 TCP 的半關(guān)閉造成的。因?yàn)?TCP 連接是全雙工的(即數(shù)據(jù)可在兩個(gè)方向上同時(shí)傳遞)所以進(jìn)行關(guān)閉時(shí)每個(gè)方向上都要單獨(dú)進(jìn)行關(guān)閉。這個(gè)單方向的關(guān)閉就叫半關(guān)閉。當(dāng)一方完成它的數(shù)據(jù)發(fā)送任務(wù),就發(fā)送一個(gè) FIN 來(lái)向另一方通告將要終止這個(gè)方向的連接。
常見(jiàn)問(wèn)題
為什么建立連接是三次握手,而關(guān)閉連接卻是四次揮手呢?
這是因?yàn)榉?wù)端在LISTEN狀態(tài)下,收到建立連接請(qǐng)求的SYN報(bào)文后,把ACK和SYN放在一個(gè)報(bào)文里發(fā)送給客戶端。而關(guān)閉連接時(shí),當(dāng)收到對(duì)方的FIN報(bào)文時(shí),僅僅表示對(duì)方不再發(fā)送數(shù)據(jù)了但是還能接收數(shù)據(jù),己方也未必全部數(shù)據(jù)都發(fā)送給對(duì)方了,所以己方可以立即close,也可以發(fā)送一些數(shù)據(jù)給對(duì)方后,再發(fā)送FIN報(bào)文給對(duì)方來(lái)表示同意現(xiàn)在關(guān)閉連接,因此,己方ACK和FIN一般都會(huì)分開(kāi)發(fā)送。
為什么TIME_WAIT狀態(tài)需要經(jīng)過(guò)2MSL(最大報(bào)文段生存時(shí)間)才能返回到CLOSE狀態(tài)?
雖然按道理,四個(gè)報(bào)文都發(fā)送完畢,我們可以直接進(jìn)入CLOSE狀態(tài)了,但是我們必須假象網(wǎng)絡(luò)是不可靠的,有可以最后一個(gè)ACK丟失。所以TIME_WAIT狀態(tài)就是用來(lái)重發(fā)可能丟失的ACK報(bào)文。
總結(jié)
以上是生活随笔為你收集整理的[计算机网络][总结][常见问题][TCP][三次握手][四次挥手]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [Leedcode][JAVA][第25
- 下一篇: 旅游行业春节档期的大数据营销