從另一個視角理解TCP握手、揮手與可靠傳輸

本文將深入探討 TCP 協議中三次握手、四次揮手的原理,以及其保證可靠傳輸的機制。

一、三次握手:為何是三次,而非兩次?

建立 TCP 連接的過程猶如一場嚴謹的 “對話”,需要經過三次握手才能確保通信雙方的可靠連接。

三次握手的具體流程

第一次握手:客戶端率先向服務端發送帶有 SYN(SEQ=x)標志的數據包,隨后進入 SYN_SEND 狀態,此時客戶端如同一位等待回應的信使,它不清楚服務端的任何狀況。而服務端接收到該數據包后,確認了客戶端具備發送能力,同時也確認自身接收功能正常。

第二次握手:服務端回應客戶端,發送帶有 SYN + ACK (SEQ=y, ACK=x + 1) 標志的數據包,進入 SYN_RECV 狀態。客戶端接收到此數據包后,不僅確認自己的發送和接收功能正常,還確認了服務端的發送和接收同樣正常。

第三次握手:客戶端再次向服務端發送帶有 ACK (ACK=y + 1) 標志的數據包,隨后客戶端和服務端雙雙進入 ESTABLISHED 狀態,至此三次握手完成,雙方可以開啟數據傳輸之旅。此時,雙方都明確彼此的發送和接收功能均處于正常狀態。

兩次握手的缺陷

網絡環境復雜多變,丟包問題時有發生。若僅進行兩次握手,當第二次握手時服務端發給客戶端的確認報文丟失,就會出現嚴重問題。此時,服務端認為連接已建立并準備接收和處理數據,而客戶端由于未收到確認報文,不會發送數據,并且會忽略服務端后續的數據。然而,若采用三次握手,即便客戶端發送的確認報文丟失,服務端在一段時間內未接收到,就會重新發起第二次握手,從而保障連接建立的可靠性。

二、四次揮手:為什么斷開連接需要4次?

當數據傳輸任務完成,TCP 連接的斷開同樣需要遵循嚴謹的流程,即四次揮手。

四次揮手的詳細步驟

第一次揮手:客戶端向服務端發送帶有 FIN(SEQ=x)標志的數據包,表明客戶端到服務端的數據傳送即將結束,隨后客戶端進入 FIN - WAIT - 1 狀態。這就像是客戶端告知服務端:“我這邊的數據已經發送完畢啦”。

第二次揮手:服務端收到客戶端的 FIN 數據包后,向客戶端發送 ACK (ACK=x + 1)標志的數據包,確認收到客戶端的斷開請求,服務端進入 CLOSE - WAIT 狀態,客戶端則進入 FIN - WAIT - 2 狀態。此時,服務端可能還有數據需要繼續發送。

第三次揮手:當服務端完成剩余數據的發送后,向客戶端發送 FIN (SEQ=y) 標志的數據包,請求關閉連接,自身進入 LAST - ACK 狀態。這一步相當于服務端回應客戶端:“我這邊的數據也發完了,我們可以斷開連接了”。

第四次揮手:客戶端收到服務端的 FIN 數據包后,發送 ACK (ACK=y + 1) 標志的數據包給服務端,然后進入 TIME - WAIT 狀態。服務端收到 ACK 數據包后進入 CLOSE 狀態。客戶端在 TIME - WAIT 狀態等待 2MSL(最長報文段壽命)后,如果沒有收到其他回復,就可以確認服務端已正常關閉,隨后客戶端也關閉連接。在四次揮手未完成之前,客戶端和服務端仍可繼續傳輸數據。

為什么一定四次揮手

TCP 采用全雙工通信模式,允許數據在兩個方向上同時傳輸。因此,任何一方都可以在數據傳送結束后發起連接釋放的通知,待對方確認后進入半關閉狀態。只有當雙方都完成數據傳輸并確認后,才能完全關閉 TCP 連接。至于為何不能將服務端發送的 ACK 和 FIN 合并為一次,變成三次揮手,原因在于服務端收到客戶端斷開連接的請求時,可能還有一些數據尚未發送完畢。此時先回復 ACK,表示已接收到斷開連接的請求,等到數據發送完成后再發送 FIN,以斷開服務端到客戶端的數據傳送。

三、TCP 如何確保可靠傳輸?

為了保障數據在網絡中的可靠傳輸,TCP 采用了一系列精妙的機制。

基于數據塊傳輸

TCP 會將應用數據分割成其認為最適宜發送的數據塊(報文),再傳遞給網絡層。這就好比將一大箱貨物合理地分裝成多個小包裹,以便在復雜的網絡道路上高效運輸,提高傳輸效率。

數據包的排序與去重

TCP 為每個數據包分配一個唯一的序列號,如同給每個小包裹貼上特定的標簽。接收端依據這些序列號對接收到的數據進行排序,并去除重復序列號的數據,從而確保數據的準確性和有序性。

校驗和機制

TCP 會計算并維護首部和數據的檢驗和,這就像是給每個包裹貼上一個質量檢測標簽。若接收到的報文段檢驗和出現差錯,TCP 會果斷丟棄該報文段,并且不確認收到此報文段,以此保證數據的完整性。

重傳機制

基于計時器的重傳(超時重傳):數據包發送出去后,TCP 會啟動一個計時器。若在規定時間內未收到對方的確認應答(ACK),就如同包裹寄出后長時間沒有收到收件人的確認,TCP 會重新發送該數據包。

快速重傳:當接收端發現數據包失序時,會立即向發送端發送重復的 ACK 報文。發送端在收到多個重復的 ACK 后,無需等待計時器超時,就會迅速重傳丟失的數據包,大大提高了重傳的效率。

SACK(選擇性確認):在快速重傳的基礎上,接收端會返回最近收到的報文段的序列號范圍,這樣發送端就能清楚地知道哪些數據包已經成功到達服務器,從而精準地重傳丟失的數據。

D - SACK(重復 SACK):D - SACK 在 SACK 的基礎上更進一步,額外攜帶信息告知發送方哪些數據包被重復接收了,幫助發送方更全面地了解網絡狀況,優化重傳策略。

流量控制

TCP 連接的雙方都設有固定大小的緩沖空間。接收端通過滑動窗口協議,如同調節一扇窗戶的開合程度,只允許發送端發送接收端緩沖區能夠接納的數據量,以此防止數據擁堵,避免數據包丟失。

擁塞控制

TCP 在發送數據時,會充分考慮兩個關鍵因素:接收方的接收能力和網絡的擁塞程度。接收方的接收能力通過滑動窗口來體現,表示接收方還有多少緩沖區可用于接收數據;網絡的擁塞程度則由擁塞窗口表示,這是發送方根據網絡狀況自行維護的一個值,反映了發送方認為可以在網絡中順利傳輸的數據量。發送方發送數據的大小取滑動窗口和擁塞窗口的最小值,這樣既能確保不超過接收方的接收能力,又能避免對網絡造成過度擁塞。

資料:計算機網絡面試必備知識點詳解-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905954.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905954.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905954.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

將Docker compose 部署的夜鶯V6版本升到V7版本的詳細步驟、常見問題解答及相關鏡像下載地址

環境說明 夜鶯官網:首頁 - 快貓星云Flashcat 夜鶯安裝程序下載地址:快貓星云下載中心 夜鶯v7.7.2鏡像(X86架構): https://download.csdn.net/download/jjk_02027/90851161 夜鶯ibex v1.2.0鏡像(X86架構…

JavaScript【4】數組和其他內置對象(API)

1.數組: 1.概述: js中數組可理解為一個存儲數據的容器,但與java中的數組不太一樣;js中的數組更像java中的集合,因為此集合在創建的時候,不需要定義數組長度,它可以實現動態擴容;js中的數組存儲元素時,可以存儲任意類型的元素,而java中的數組一旦創建后,就只能存儲定義類型的元…

永久免費!專為 Apache Doris 打造的可視化數據管理工具 SelectDB Studio V1.1.0 重磅發布!

作為全球領先的開源實時數據倉庫, Apache Doris Github Stars 已超過 13.6k,并在 5000 余家中大型企業生產環境得到廣泛應用,支撐業務核心場景,成為眾多企業數據分析基礎設施不可或缺的重要基座。過去,Apache Doris 用…

數字萬用表與指針萬用表使用方法及注意事項

在電子測量領域,萬用表是極為常用的工具,數字萬用表和指針萬用表各具特點。熟練掌握它們的使用方法與注意事項,能確保測量的準確性與安全性。下面為您詳細介紹: 一 、數字萬用表按鈕功能 > 進入及退出手動量程模式 每 按 […

深度學習Dropout實現

深度學習中的 Dropout 技術在代碼層面上的實現通常非常直接。其核心思想是在訓練過程中,對于網絡中的每個神經元(或者更精確地說,是每個神經元的輸出),以一定的概率 p 隨機將其輸出置為 0。在反向傳播時,這…

AtCoder AT_abc406_c [ABC406C] ~

前言 除了 A 題,唯一一道一遍過的題。 題目大意 我們定義滿足以下所有條件的一個長度為 N N N 的序列 A ( A 1 , A 2 , … , A N ) A(A_1,A_2,\dots,A_N) A(A1?,A2?,…,AN?) 為波浪序列: N ≥ 4 N\ge4 N≥4(其實滿足后面就必須滿足這…

Java Web 應用安全響應頭配置全解析:從單體到微服務網關的實踐

背景:為什么安全響應頭至關重要? 在 Web 安全領域,響應頭(Response Headers)是防御 XSS、點擊劫持、跨域數據泄露等攻擊的第一道防線。通過合理配置響應頭,可強制瀏覽器遵循安全策略,限制惡意行…

如何停止終端呢?ctrl+c不管用,其他有什么方法呢?

如果你在終端中運行了一個程序(比如 Python GUI tkinter 應用),按下 Ctrl C 沒有作用,一般是因為該程序: 運行了主事件循環(例如 tkinter.mainloop()) 或 在子線程中運行,而 Ctrl …

深入解析 React 的 useEffect:從入門到實戰

文章目錄 前言一、為什么需要 useEffect?核心作用: 二、useEffect 的基礎用法1. 基本語法2. 依賴項數組的作用 三、依賴項數組演示1. 空數組 []:2.無依賴項(空)3.有依賴項 四、清理副作用函數實戰案例演示1. 清除定時器…

Ubuntu 更改 Nginx 版本

將 1.25 降為 1.18 先卸載干凈 # 1. 完全卸載當前Nginx sudo apt purge nginx nginx-common nginx-core# 2. 清理殘留配置 sudo apt autoremove sudo rm -rf /etc/apt/sources.list.d/nginx*.list修改倉庫地址 # 添加倉庫(通用穩定版倉庫) codename$(…

如何在 Windows 10 或 11 中安裝 PowerShellGet 模塊?

PowerShell 是微軟在其 Windows 操作系統上提供的強大腳本語言,可用于通過命令行界面自動化各種任務,適用于 Windows 桌面或服務器環境。而 PowerShellGet 是 PowerShell 中的一個模塊,提供了用于從各種來源發現、安裝、更新和發布模塊的 cmdlet。 本文將介紹如何在 PowerS…

NBA足球賽事直播源碼體育直播M33模板賽事源碼

源碼名稱:體育直播賽事扁平自適應M33直播模板源碼 開發環境:帝國cms7.5 空間支持:phpmysql 帶軟件采集,可以掛著自動采集發布,無需人工操作! 演示地址:NBA足球賽事直播源碼體育直播M33模板賽事…

【Python】魔法方法是真的魔法! (第二期)

還不清楚魔術方法? 可以看看本系列開篇:【Python】小子!是魔術方法!-CSDN博客 【Python】魔法方法是真的魔法! (第一期)-CSDN博客 在 Python 中,如何自定義數據結構的比較邏輯&…

Qt 強大的窗口停靠浮動

1、左邊: 示例代碼: CDockManager::setConfigFlags(CDockManager::DefaultOpaqueConfig); CDockManager::setConfigFlag(CDockManager::FocusHighlighting, true); dockManager new CDockManager(this); // Disabling the Internal Style S…

Linux進程異常退出排查指南

在 Linux 中,如果進程無法正常終止(如 kill 命令無效)或異常退出,可以按照以下步驟排查和解決: 1. 常規終止進程 嘗試普通終止(SIGTERM) kill PID # 發送 SIGTERM 信號(…

使用tensorRT10部署低光照補償模型

1.低光照補償模型的簡單介紹 作者介紹一種Zero-Reference Deep Curve Estimation (Zero-DCE)的方法用于在沒有參考圖像的情況下增強低光照圖像的效果。 具體來說,它將低光照圖像增強問題轉化為通過深度網絡進行圖像特定曲線估計的任務。訓練了一個輕量級的深度網絡…

SLAM定位常用地圖對比示例

序號 地圖類型 概述 1 格柵地圖 將現實環境柵格化,每一個柵格用 0 和 1 分別表示空閑和占據狀態,初始化為未知狀態 0.5 2 特征地圖 以點、線、面等幾何特征來描繪周圍環境,將采集的信息進行篩選和提取得到關鍵幾何特征 3 拓撲地圖 將重要部分抽象為地圖,使用簡單的圖形表示…

【圖像生成1】Latent Diffusion Models 論文學習筆記

一、背景 本文主要記錄一下使用 LDMs 之前,學習 LDMs 的過程。 二、論文解讀 Paper:[2112.10752] High-Resolution Image Synthesis with Latent Diffusion Models 1. 總體描述 LDMs 將傳統 DMs 在高維圖像像素空間(Pixel Space&#x…

通信安全堡壘:profinet轉ethernet ip主網關提升冶煉安全與連接

作為鋼鐵冶煉生產線的安全檢查員,我在此提交關于使用profinet轉ethernetip網關前后對生產線連接及安全影響的檢查報告。 使用profinet轉ethernetip網關前的情況: 在未使用profinet轉ethernetip網關之前,我們的EtherNet/IP測溫儀和流量計與PR…

TIFS2024 | CRFA | 基于關鍵區域特征攻擊提升對抗樣本遷移性

Improving Transferability of Adversarial Samples via Critical Region-Oriented Feature-Level Attack 摘要-Abstract引言-Introduction相關工作-Related Work提出的方法-Proposed Method問題分析-Problem Analysis擾動注意力感知加權-Perturbation Attention-Aware Weighti…