“為什么是三次握手?”
這個問題言下之意其實(shí)在問:“為什么不是0次、1次、2次、4次甚至更多次握手”。
確保雙方的 發(fā)送能力 和 接收能力 都是好的。
該回答下的一評論:其實(shí)很簡單, 1.a->b, 這個時(shí)候沒有任何狀態(tài), 2. b->a, b給a發(fā)東西, 說明收到了a的東西, 證明了a的發(fā)送能力是沒問題的,同時(shí)證明了b的接收能力也是沒有問題的。 如果到這里就結(jié)束了, 那么a的接收能力和b的發(fā)送能力就沒辦法保證了。如果再加上3. a->b , 證明了a收到了b的發(fā)送, 那么b的發(fā)送能力也是好的, a的接收能力也是好的。這樣a和b的接收發(fā)送的能力都是好的, 就沒必要再次證明了。 而樓主說的第三個包沒有到的問題, 假設(shè)過程3里, a發(fā)出去了, 但是沒到b。對于a來說, b收到了自己的發(fā)送并給自己做了回應(yīng),就可以認(rèn)為b是正常的, a相信自己也是正常的, 所以這個時(shí)候?qū)τ赼來說, tcp握手就結(jié)束了, 但是對于b來說, 在第二個包發(fā)出去的時(shí)候, a沒有回應(yīng), 那么b就會認(rèn)為a的接收能力是有問題的, b就會一直發(fā), 直到a給了回應(yīng)。不然b就永遠(yuǎn)不會認(rèn)為tcp握手結(jié)束了。
雙方都認(rèn)為當(dāng)前信道/數(shù)據(jù)的傳輸是可靠的。
原評論:所以三次握手不是TCP本身的要求,而是為了滿足“在不可靠信道上可靠地傳輸信息”這一需求所導(dǎo)致的。請注意這里的本質(zhì)需求:信道不可靠,數(shù)據(jù)傳輸要可靠:
這個問題的本質(zhì)是, 通過一個不完全可靠的信道, 最少需要幾次消息傳輸, 信道兩邊的人能夠?qū)σ粋€問題達(dá)成一致. 對于TCP來說, 無論有沒有初始序號的要求, 想要兩邊都同意開始傳出數(shù)據(jù), 就至少需要3次消息的交換:
- 0次: 顯然不行
- 1次: A->B, A不知道B是否同意
- 2次: A->B, B->A. B不知道A是否收到自己的消息, 因?yàn)樾诺啦煌耆煽?br> 這兒A已經(jīng)可以確信信道是可靠的了,只是B不能確信而已,這兒你要是把信道當(dāng)成TCP鏈接本身,也就是全雙工,自然如此,但是像我這樣把鏈路分成兩個方向上的 信道的人來說,卻不是如此。并且TCP確實(shí)可以建立半鏈接
- 3次: A->B, B->A, A->B. 兩邊都收到了對方的ACK, 意味著各自都了解了對方的意圖, 從而可以對是否開始通信這個最簡單的問題
如果該問題細(xì)一點(diǎn):“為什么是三次握手,不是2次握手?”,即在問第3次握手的作用。
TCP 為什么是三次握手,而不是兩次或四次? - wuxinliulei的回答 - 知乎:
為了防止已失效的連接請求報(bào)文段突然又傳送到了服務(wù)端,因而產(chǎn)生錯誤。
“為什么是三次握手,卻是四次揮手?”
這個問題其實(shí)在問“四次揮手”中,服務(wù)端的ACK和FIN為什么不能同時(shí)發(fā)。因?yàn)樵凇盀槭裁词侨挝帐帧钡幕卮鹬?,看到有一個答案說的是:
- A 發(fā)送 同步信號 SYN + A’s seq
- B 確認(rèn) 收到 A’s SYN,并記錄 A’s seq,命名 B’s ACK
- B 發(fā)送 SYN + B’s seq
- A 確認(rèn) B’s SYN,并記錄 B’s seq,命名 A’s ACK
很顯然,步驟2、3可以合并,所以只需要3次握手。
但是我覺得這個回答是解釋“為什么是三次握手,卻是四次揮手?”這個問題的背景、由來,即:為什么四次揮手中,服務(wù)端的 ACK 和 SYN 要分開發(fā)?
一個比較合理的解釋是:文章來源:http://www.zghlxwxcb.cn/news/detail-499438.html
這是因?yàn)榉?wù)端在LISTEN狀態(tài)下,收到建立連接請求的 SYN 報(bào)文后,把 ACK 和 SYN 放在一個報(bào)文里發(fā)送給客戶端。而關(guān)閉連接時(shí),當(dāng)收到對方的 FIN 報(bào)文時(shí),僅僅表示對方不再發(fā)送數(shù)據(jù)了但是還能接收數(shù)據(jù),己方也未必全部數(shù)據(jù)都發(fā)送給對方了,所以己方可以立即 close,也可以發(fā)送一些數(shù)據(jù)給對方后,再發(fā)送 FIN 報(bào)文給對方來表示同意現(xiàn)在關(guān)閉連接,因此,己方 ACK 和 FIN 一般都會分開發(fā)送。文章來源地址http://www.zghlxwxcb.cn/news/detail-499438.html
到了這里,關(guān)于“為什么是三次握手”與“為什么是三次握手,卻是四次揮手”其實(shí)是不同的問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!