TCP为什么是四次挥手
TCP 3次握手
客戶端向服務(wù)器發(fā)送一個(gè)SYN(包含了SYN,SEQ)。
當(dāng)服務(wù)器接收到客戶端發(fā)過(guò)來(lái)的SYN時(shí),會(huì)向客戶端發(fā)送一個(gè)SYN+ACK的數(shù)據(jù)包,其實(shí)ACK的ack等于上一次發(fā)送SYN數(shù)據(jù)包的(SYN+SEQ)。
當(dāng)客戶端接收到服務(wù)器發(fā)送過(guò)來(lái)的SYN+ACK數(shù)據(jù)包時(shí),當(dāng)接收到后向服務(wù)器發(fā)送ACK的數(shù)據(jù)包,此時(shí)ACK數(shù)據(jù)包中的ack值等于上一次SYN中的seq+syn。
當(dāng)服務(wù)器收到了客戶端的發(fā)送過(guò)來(lái)的ACK數(shù)據(jù)包時(shí),確認(rèn)無(wú)誤后,向客戶端發(fā)送數(shù)據(jù)。
為什么要3次握手
防止已過(guò)期的連接請(qǐng)求報(bào)文突然又傳送到服務(wù)器,因而產(chǎn)生錯(cuò)誤。
Client發(fā)生一個(gè)請(qǐng)求連接報(bào)文可能因?yàn)榫W(wǎng)絡(luò)延遲等原因,沒(méi)有送達(dá)到server中。但是當(dāng)這個(gè)client的請(qǐng)求報(bào)文送達(dá)到server時(shí),如果沒(méi)有三次握手的話,server就會(huì)直接發(fā)數(shù)據(jù)可client,這樣會(huì)導(dǎo)致server資源的浪費(fèi)。
解決“網(wǎng)絡(luò)中存在延遲的重復(fù)分組”的問(wèn)題
在不可靠信道上可靠地傳輸信息
因?yàn)門(mén)CP是一個(gè)可靠的協(xié)議,但是IP是一個(gè)不可靠的協(xié)議,利用TCP使IP傳輸過(guò)程變得可靠。這樣的話,如果發(fā)生丟包,傳輸順序出錯(cuò)等問(wèn)題,TCP協(xié)議都可以解決。為了滿足不可靠信息在可靠的傳輸信息。
那就是可以這樣說(shuō),確認(rèn)c/s是不是相應(yīng)的服務(wù)都準(zhǔn)備好了,只有通過(guò)了3次握手才能直接傳輸數(shù)據(jù)并且滿足了數(shù)據(jù)可靠性的傳輸。
http://www.cnblogs.com/xpress/
?
?
TCP 4次揮手
先由客戶端向服務(wù)器端發(fā)送一個(gè)FIN,請(qǐng)求關(guān)閉數(shù)據(jù)傳輸。
當(dāng)服務(wù)器接收到客戶端的FIN時(shí),向客戶端發(fā)送一個(gè)ACK,其中ack的值等于FIN+SEQ
然后服務(wù)器向客戶端發(fā)送一個(gè)FIN,告訴客戶端應(yīng)用程序關(guān)閉。
當(dāng)客戶端收到服務(wù)器端的FIN是,回復(fù)一個(gè)ACK給服務(wù)器端。其中ack的值等于FIN+SEQ
為什么要4次揮手?
確保數(shù)據(jù)能夠完成傳輸。
但關(guān)閉連接時(shí),當(dāng)收到對(duì)方的FIN報(bào)文通知時(shí),它僅僅表示對(duì)方?jīng)]有數(shù)據(jù)發(fā)送給你了;但未必你所有的數(shù)據(jù)都全部發(fā)送給對(duì)方了,所以你可以未必會(huì)馬上會(huì)關(guān)閉SOCKET,也即你可能還需要發(fā)送一些數(shù)據(jù)給對(duì)方之后,再發(fā)送FIN報(bào)文給對(duì)方來(lái)表示你同意現(xiàn)在可以關(guān)閉連接了,所以它這里的ACK報(bào)文和FIN報(bào)文多數(shù)情況下都是分開(kāi)發(fā)送的。
總結(jié)
以上是生活随笔為你收集整理的TCP为什么是四次挥手的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 有限状态机/FSM
- 下一篇: HUE Load Balancer 启动