TCP为什么需要三次握手和四次挥手
網(wǎng)上已經(jīng)有很多解釋了,就不瞎說了,Mark一些鏈接作為自己的學(xué)習(xí)筆記吧。
學(xué)習(xí)參考鏈接1
學(xué)習(xí)參考鏈接2
學(xué)習(xí)參考鏈接3
學(xué)習(xí)參考鏈接4
為什么要3次握手
防止已過期的連接請求報(bào)文突然又傳送到服務(wù)器,因而產(chǎn)生錯(cuò)誤。
Client發(fā)生一個(gè)請求連接報(bào)文可能因?yàn)榫W(wǎng)絡(luò)延遲等原因,沒有送達(dá)到server中。但是當(dāng)這個(gè)client的請求報(bào)文送達(dá)到server時(shí),如果沒有三次握手的話,server就會(huì)直接發(fā)數(shù)據(jù)可client,這樣會(huì)導(dǎo)致server資源的浪費(fèi)。
這個(gè)問題的本質(zhì)是, 信道不可靠。
信道不可靠,但是通信雙發(fā)需要就某個(gè)問題達(dá)成一致. 而要解決這個(gè)問題, 無論你在消息中包含什么信息, 三次通信是理論上的最小值. 所以三次握手不是TCP本身的要求, 而是為了滿足”在不可靠信道上可靠地傳輸信息”這一需求所導(dǎo)致的. 請注意這里的本質(zhì)需求,信道不可靠, 數(shù)據(jù)傳輸要可靠. 三次達(dá)到了, 那后面你想接著握手也好, 發(fā)數(shù)據(jù)也好, 跟進(jìn)行可靠信息傳輸?shù)男枨缶蜎]關(guān)系了. 因此,如果信道是可靠的, 即無論什么時(shí)候發(fā)出消息, 對方一定能收到, 或者你不關(guān)心是否要保證對方收到你的消息, 那就能像UDP那樣直接發(fā)送消息就可以了.”。
為什么要4次揮手?
確保數(shù)據(jù)能夠完成傳輸。
關(guān)閉連接時(shí),當(dāng)收到對方的FIN報(bào)文通知時(shí),它僅僅表示對方?jīng)]有數(shù)據(jù)發(fā)送給你了;但未必你所有的數(shù)據(jù)都全部發(fā)送給對方了,所以你可以未必會(huì)馬上會(huì)關(guān)閉SOCKET,也即你可能還需要發(fā)送一些數(shù)據(jù)給對方之后,再發(fā)送FIN報(bào)文給對方來表示你同意現(xiàn)在可以關(guān)閉連接了,所以它這里的ACK報(bào)文和FIN報(bào)文多數(shù)情況下都是分開發(fā)送的。
總結(jié)
以上是生活随笔為你收集整理的TCP为什么需要三次握手和四次挥手的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 让python脚本像普通程序一样运行
- 下一篇: NewCode----给定两个数R和n,