天天看點

TCP需要三次握手才能建立,而斷開連接配接則需要四次握手

建立TCP需要三次握手才能建立,而斷開連接配接則需要四次握手。整個過程如下圖所示:

TCP需要三次握手才能建立,而斷開連接配接則需要四次握手

首先Client端發送連接配接請求封包,Server段接受連接配接後回複ACK封包,并為這次連接配接配置設定資源。Client端接收到ACK封包後也向Server段發生ACK封包,并配置設定資源,這樣TCP連接配接就建立了。

TCP需要三次握手才能建立,而斷開連接配接則需要四次握手

斷開連接配接端可以是Client端,也可以是Server端。假設Client端發起中斷連接配接請求,就先發送FIN封包。Server端接到FIN封包後,但是如果還有資料沒有發送完成,則不必急着關閉Socket,可以繼續發送資料。是以伺服器端先發送ACK,告訴Client端:請求已經收到了,但是我還沒準備好,請繼續等待停止的消息。這個時候Client端就進入FIN_WAIT狀态,繼續等待Server端的FIN封包。當Server端确定資料已發送完成,則向Client端發送FIN封包,告訴Client端:伺服器這邊資料發完了,準備好關閉連接配接了。Client端收到FIN封包後,就知道可以關閉連接配接了,但是他還是不相信網絡,是以發送ACK後進入TIME_WAIT狀态, Server端收到ACK後,就知道可以斷開連接配接了。Client端等待了2MSL後依然沒有收到回複,則證明Server端已正常關閉,最後,Client端也可以關閉連接配接了至此,TCP連接配接就已經完全關閉了!關閉連接配接的過程如下圖所示:

TCP需要三次握手才能建立,而斷開連接配接則需要四次握手

TCP協定為什麼會采用三次握手,若采用二次握手可以嗎?

如題,關于這個問題,網絡上争論的比較多,比較靠譜的合了解釋如下介紹:

(1)TCP 的三次握手過程:主機A向B發送連接配接請求;主機B對收到的主機A的封包段進行确認;主A再次對主機B的确認進行确認。

(2)采用三次握手是為了防止失效的連接配接請求封包段突然又傳送到主機B,因而産生錯誤。失效的連接配接請求封包段是指:主機A發出的連接配接請求沒有收到主機B的确認,于是經過一段時間後,主機A又重新向主機B發送連接配接請求,且建立成功,順序完成資料傳輸。考慮這樣一種特殊情況,主機A第一次發送的連接配接請求并沒有丢失,而是因為網絡節點導緻延遲達到主機B,主機B以為是主機A。

繼續閱讀