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