計網-TCP可靠傳輸

TCP(傳輸控制協議)的可靠傳輸是通過一系列機制保證數據準確、有序、不丟失地到達接收方。以下是TCP可靠傳輸的詳細過程及核心機制:


1. 數據分塊與序列號(Seq)

  • 分塊:應用層數據被分割成適合傳輸的TCP報文段(MSS,通常1460字節)。

  • 序列號(Seq):每個字節都被編號,Seq表示該報文段第一個字節的序號
    例如:發送一個1000字節的數據,若Seq=1,則下一個報文段的Seq=1001。


2. 確認應答(ACK)

  • ACK機制:接收方收到數據后,必須發送ACK確認報文,告知發送方已成功接收。

    • ACK號?=?期望收到的下一個字節的序號(即最后一個成功接收的字節序號 +1)。
      例如:收到Seq=1、長度=1000的數據,則返回ACK=1001。

  • 累積確認:TCP通常對按序到達的連續數據批量確認(如ACK=1001表示1000及之前的所有字節已接收)。


3. 超時重傳(Retransmission)

  • RTO(Retransmission Timeout):發送方為每個報文段啟動定時器,若超時未收到ACK,則重傳。

    • RTO動態計算:基于RTT(往返時間)自適應調整(如Karn算法、Jacobson算法)。

  • 快速重傳:如果收到3個重復ACK(如連續收到ACK=1001),說明后續數據可能丟失,立即重傳而不等待超時。


4. 滑動窗口(Flow Control)

  • 窗口大小(Window):接收方通過TCP頭部的Window字段告知可用緩沖區大小,控制發送方的速率(流量控制)。

    • 發送方只能發送窗口內未被確認的數據

    • 窗口動態滑動:隨著ACK的到達,窗口向前移動。


5. 順序控制與重排序

  • 亂序處理:接收方通過Seq號對亂序報文段排序,僅對連續數據返回ACK。

    • SACK(選擇性確認):可選機制,顯式告知發送方哪些數據塊已接收(解決非連續ACK的問題)。


6. 連接管理與狀態維護

  • 三次握手:建立連接時同步初始序列號(ISN),確保雙方準備好傳輸。

    • 過程:SYN → SYN-ACK → ACK。

  • 四次揮手:可靠釋放連接,確保數據全部傳輸完畢。

    • 過程:FIN → ACK → FIN → ACK。


7. 擁塞控制(Congestion Control)

  • 慢啟動(Slow Start):窗口從1個MSS開始,按指數增長(每RTT翻倍)。

  • 擁塞避免(AIMD):達到閾值后,窗口線性增長。

  • 快速恢復:發生擁塞時(如丟包),窗口減半并進入線性增長階段。


可靠傳輸全過程示例

假設主機A向主機B發送數據:

  1. 發送數據

    • A發送Seq=1、長度=1000的數據。

    • B收到后返回ACK=1001,窗口大小=3000。

  2. 滑動窗口

    • A收到ACK=1001后,窗口向右滑動,繼續發送Seq=1001、2001、3001的數據。

  3. 丟包處理

    • 若Seq=2001丟失,B仍返回ACK=1001(重復ACK)。

    • A收到3個ACK=1001后,快速重傳Seq=2001。

  4. 擁塞控制

    • 網絡擁塞時,A檢測到丟包,將窗口從4000減半至2000,進入擁塞避免階段。


關鍵點總結

機制作用
序列號(Seq)標識數據字節順序,解決亂序問題。
確認應答(ACK)接收方反饋成功接收的數據范圍。
超時重傳確保丟失數據被重新發送。
滑動窗口流量控制,防止接收方緩沖區溢出。
擁塞控制動態調整發送速率,避免網絡過載。
連接管理通過握手/揮手確保傳輸的可靠啟動和關閉。

為什么TCP是可靠的?

  1. 無丟失:通過ACK和重傳保證。

  2. 無重復:序列號去重。

  3. 無亂序:序列號和滑動窗口排序。

  4. 無錯誤:通過校驗和(Checksum)驗證數據完整性。

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

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

相關文章

數智管理學(三十九)

第三章 數智化對管理理論的沖擊第三節 系統理論與生態化管理的強化系統理論作為理解企業運作與環境互動的重要框架,一直強調企業是一個由多個相互關聯子系統構成的整體,其核心要素包括整體性、開放性、動態性和反饋機制。在傳統管理視角下,這…

哈希表(c語言)

文章目錄哈希表哈希表知識點哈希表概念負載因子哈希表的優缺點哈希沖突哈希函數常見哈希函數處理哈希沖突開放定址法線性探測二次探測鏈地址法哈希表的實現哈希表的核心:HashMap核心函數:從創建到銷毀創建哈希表:hashmap_create()銷毀哈希表:hashmap_des…

【Canvas與旗幟】條紋版大明三辰旗

【成圖】【代碼】<!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>十三條紋版大明三辰旗 Draft1</title><style type"text/…

【Java】空指針(NullPointerException)異常深度攻堅:從底層原理到架構級防御,老司機的實戰經驗

寫Java代碼這些年&#xff0c;空指針異常&#xff08;NullPointerException&#xff09;就像甩不掉的影子。線上排查問題時&#xff0c;十次有八次最后定位到的都是某個對象沒處理好null值。但多數人解決問題只停留在加個if (obj ! null)的層面&#xff0c;沒從根本上想過為什么…

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 主頁-評論用戶時間占比環形餅狀圖實現

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程&#xff0c;持續更新中&#xff0c;計劃月底更新完&#xff0c;感謝支持。今天講解主頁-評論用戶時間占比環形餅狀圖實現 視頻…

Redis面試精講 Day 5:Redis內存管理與過期策略

【Redis面試精講 Day 5】Redis內存管理與過期策略 開篇 歡迎來到"Redis面試精講"系列的第5天&#xff01;今天我們將深入探討Redis內存管理與過期策略&#xff0c;這是面試中經常被問及的核心知識點。對于后端工程師而言&#xff0c;理解Redis如何高效管理內存、處…

ICMPv6報文類型詳解表

一、錯誤報文類型&#xff08;Type 1-127&#xff09;Type值名稱Code范圍觸發條件示例典型用途1Destination Unreachable0-60: 無路由到目標1: 通信被管理員禁止2: 地址不可達3: 端口不可達4: 分片需要但DF標志設置5: 源路由失敗6: 目的地址不可達網絡故障診斷2Packet Too Big0…

配置nodejs

第一步確認 node.exe 和 npm 存在 例如安裝目錄D:\nodejs檢查是否存在以下文件&#xff1a; node.exenpm.cmdnpx.cmd 第二步&#xff1a;添加環境變量 PATH 圖形化操作步驟&#xff08;Windows&#xff09;&#xff1a; 右鍵「此電腦」→「屬性」點擊左側 「高級系統設置」彈出…

MySQL的命令行客戶端

MySQL中的一些程序&#xff1a;MySQL在安裝完成的時候&#xff0c;一般都會包含如下程序&#xff1a;在Linux系統下&#xff0c;通過/usr/bin目錄下&#xff0c;可以通過命令查看&#xff1a;以下是常用的MySQL程序&#xff1a;程序名作用mysqldMySQL的守護進程即MySQL服務器&a…

C# 值類型與引用類型的儲存方式_堆棧_

目錄 值類型 引用類型 修改stu3的值 stu也被修改了 為什么? &#xff08;對象之間&#xff09; 值類型中&#xff0c;值全在棧中單獨存儲&#xff0c;變量之間不會影響 結構體中&#xff0c;結構體全在棧中&#xff0c;結構體與結構體之間也不會相互影響 靜態資源區 值類…

解鎖永久會員的白噪音軟件:睡眠助手

如今的年輕人壓力普遍較大&#xff0c;學會解壓至關重要。這期就為大家推薦一款優秀的白噪音軟件&#xff0c;在壓力大時聽聽&#xff0c;能起到不錯的解壓效果。 睡眠助手 文末獲取 這款軟件的特別版本十分出色&#xff0c;知曉的人不多。它已解鎖永久會員&#xff0c;無需登…

uniapp使用css實現進度條帶動畫過渡效果

一、效果 二、實現原理 1.uni.createAnimation 動畫函數 2.初始化uni.createAnimation方法 3.監聽值的變化調用動畫執行方法 三、代碼 1.實現方式比較簡單&#xff0c;目前是vue3的寫法&#xff0c;vue2只需要稍微改動即可 <template><view class"layout_progre…

高級分布式系統調試:調試的科學與 USE 方法實戰

高級分布式系統調試:調試的科學與 USE 方法實戰 前言:從“救火”到“探案” 當一個復雜的分布式系統出現“灰色故障”——例如“服務有時會變慢”、“偶爾出現超時錯誤”——我們該從何處著手?隨機地查看 Grafana 儀表盤,或者漫無目的地 tail -f 日志,往往效率低下,甚至…

棧算法之【有效括號】

目錄 LeetCode-20題 LeetCode-20題 給定一個只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判斷字符串是否有效。 有效字符串需滿足&#xff1a; 左括號必須用相同類型的右括號閉合。 左括號必須以正確的順序閉合。 每…

大模型——Data Agent:超越 BI 與 AI 的邊界

Data Agent:超越 BI 與 AI 的邊界 1. 數據工具的演進路徑 在數據分析領域,技術工具經歷了多個階段的演進。這些演進不僅反映了技術的進步,也體現了用戶需求和使用場景的變化。 Excel 時代:告別手工作業,陷入“表格泥潭“,早期數據分析依賴 Excel,實現基礎數據記錄、計…

數據空間技術在智慧水庫管理平臺中的賦能

數據空間技術在智慧水庫管理平臺中的賦能&#xff1a;設備到應用的數據傳輸優化 數據空間技術為智慧水庫管理平臺提供了革命性的數據傳輸、處理和安全保障能力。以下是數據空間技術在設備到應用數據傳輸過程中的全面賦能方案&#xff1a; 數據空間賦能架構設計 #mermaid-svg-R2…

SpringBoot學習路徑二--Spring Boot自動配置原理深度解析

SpringBoot最核心的功能就是自動裝配&#xff0c;Starter作為SpringBoot的核心功能之一&#xff0c;基于自動配置代碼提供了自動配置模塊及依賴的能力&#xff0c;讓軟件集成變得簡單、易用。使用SpringBoot時&#xff0c;我們只需引I人對應的Starter&#xff0c;SpringBoot啟動…

音視頻中一些常見的知識點

1. GCC是如何進行帶寬評估的 GCC(Google Congestion Control)是一種專為實時音視頻傳輸設計的擁塞控制算法,它主要通過發送端和接收端的協同工作來進行帶寬評估。具體過程如下: 接收端處理 計算延遲梯度:接收端通過統計數據包到達時間的變化,即RTT(往返時間)波動,來計…

STM32硬件I2C的注意事項

文章目錄軟件模擬I2C硬件的實現方式最近在研究I2C的屏幕使用。有兩種使用方式&#xff0c;軟件模擬I2C、硬件HAL使用I2C。軟件模擬I2C 發送數據是通過設置引腳的高低電平實現的。 /*引腳配置*/ #define OLED_W_SCL(x) GPIO_WriteBit(GPIOB, GPIO_Pin_6, (BitAction)(x)) #de…

Python捕獲異常

Python捕獲異常主要通過try-except語句實現&#xff0c;以下是核心語法和使用場景&#xff1a;一、基礎捕獲結構try: # 可能引發異常的代碼 result 10 / 0 except ZeroDivisionError: # 處理特定異常 print("除數不能為零") 二、捕獲多種異常try: # 可能引發…