圖解TCP 三次握手四次揮手

TCP/IP:因特網整個 TCP/IP 協議族

TCP/IP(Transmission Control Protocol/Internet Protocol)傳輸控制協議/因特網互聯協議,又名網絡通訊協議。由網絡層的 IP 協議和傳輸層的 TCP 協議組成。

TCP 負責發現傳輸的問題,一有問題就發出信號,要求重新傳輸,直到所有數據安全正確地傳輸到目的地。而 IP 是給因特網的每一臺聯網設備規定一個地址。

TCP/IP 參考模型:應用層、傳輸層、網絡層、網絡接口層。但是網絡接口層並沒有嚴格的劃分。所以有時候也有人把網絡接口層拆分成兩層:數據鏈路層、物理層。

“三次握手”:建立 TCP 連接過程

目的:爲了防止已失效的連接請求報文段突然又傳送到了服務端,因而產生錯誤。————謝希仁《計算機網絡》

“已失效的連接請求報文段”的產生在這樣一種情況下:服務端 發出的第一個連接請求報文段並沒有丟失,而是在某個網絡結點長時間的滯留了,以致延誤到連接釋放以後的某個時間纔到達 服務端。本來這是一個早已失效的報文段。但 服務端 收到此失效的連接請求報文段後,就誤認爲是 服務端 再次發出的一個新的連接請求。於是就向 服務端 發出確認報文段,同意建立連接。假設不採用“三次握手”,那麼只要 服務端 發出確認,新的連接就建立了。由於現在 服務端 並沒有發出建立連接的請求,因此不會理睬 服務端 的確認,也不會向 服務端 發送數據。但 服務端 卻以爲新的運輸連接已經建立,並一直等待 服務端 發來數據。這樣,服務端 的很多資源就白白浪費掉了。採用“三次握手”的辦法可以防止上述現象發生。例如剛纔那種情況,服務端 不會向 服務端 的確認發出確認。服務端 由於收不到確認,就知道 服務端 並沒有要求建立連接。”。主要目的防止 服務端 端一直等待,浪費資源。

在這裏插入圖片描述
【動圖轉自:https://blog.csdn.net/qzcsu/article/details/72861891】

標誌位含義:
ACK:確認序號有效,表示響應。
SYN:發起一個新連接。
FIN:釋放一個連接,關閉連接。
PSH:有數據傳輸
RST:連接重置
在這裏插入圖片描述

第一次握手
Client 將標誌位 SYN 置 1,隨機產生一個值 seq=J,並將數據包發給 Server
Client 進入 SYN*SENT 狀態,等待 Server 確認
在這裏插入圖片描述
第二次握手
Server 收到數據包後標誌位 SYN=1 知道 Client 請求建立連接,Server 將標誌位 SYN 和 ACK 都置 1,隨機產生一個值,並將數據包發給 Client 確認連接請求,Server 進入 SYN_RCVD 狀態
在這裏插入圖片描述
第三次握手
Client 收到確認後若 ACK 爲 1,則將該數據包發送給 Server,Server 檢查 ACK 爲 1 則連接建立成功,Client 與 Server 進入 ESTABLISHED 狀態完成三次握手,可以傳輸數據
簡述:
在這裏插入圖片描述

服務端發送一個帶 SYN 標誌的數據包給對方。服務端收到後,回傳一個帶有 SYN/ACK 標誌的數據包以示傳達確認信息。 最後,服務端再回傳一個帶 ACK 標誌的數據包,代表“握手”結束。

爲什麼是三次不是兩次
防止已失效的請求報文段突然又傳送到了服務端而產生連接的誤判

“四次揮手”:終止 TCP 連接過程

原因:由於 TCP 連接時全雙工的,因此,每個方向都必須要單獨進行關閉,這一原則是當一方完成數據發送任務後,發送一個 FIN 來終止這一方向的連接,收到一個 FIN 只是意味着這一方向上沒有數據流動了,即不會再收到數據了,但是在這個 TCP 連接上仍然能夠發送數據,直到這一方向也發送了 FIN。

在這裏插入圖片描述
【動圖轉自:https://blog.csdn.net/qzcsu/article/details/72861891】

第一次揮手:
Client 發送一個 FIN,用來關閉 Client 到 Server 的數據傳送,Client 進入 FIN_WAIT_1 狀態。
在這裏插入圖片描述
第二次揮手:
Server 收到 FIN 後,發送一個 ACK 給 Client,Server 進入 CLOSE_WAIT 狀態。
在這裏插入圖片描述
第三次揮手:
Server 發送一個 FIN,用來關閉 Server 到 Client 的數據傳送,Server 進入 LAST_ACK 狀態。
在這裏插入圖片描述
第四次揮手:
Client 收到 FIN 後,Client 進入 TIME_WAIT 狀態,發送 ACK 給 Server,Server 進入 CLOSED 狀態,完成四次握手。
在這裏插入圖片描述
簡述:

服務端發送 FIN;服務端接收 FIN 併發送 ACK 給服務端服務端發送 FIN;服務端接收 FIN 併發送 ACK 給服務端

參考連接:
https://blog.csdn.net/yu876876/article/details/81560122
http://www.imooc.com/article/79180
https://blog.51cto.com/13871180/2162062
https://blog.csdn.net/qzcsu/article/details/72861891

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章