【計算機網絡】TCP如何保障傳輸可靠性_筆記

文章目錄

  • 一、傳輸可靠性的6方面保障
  • 二、分段機制
  • 三、超時重傳機制
  • 四、流量控制
  • 五、擁塞控制


提示:以下是本篇文章正文內容,下面案例可供參考 源網站
按TCP/IP 4層體系,TCP位于傳輸層,為應用層提供服務

一、傳輸可靠性的6方面保障

  1. 基于數據塊的傳輸:待傳輸的數據被分割成TCP認為合適的數據塊(報文段或段),再向下傳給網絡層
  2. 基于序號的數據包去重和重排:每個包有一個序列號,通過這個序列號進行排序和去重
  3. 校驗和:保持頭部和數據的校驗和,防止數據中傳輸過程中發生變化。基于偽頭部+反碼計算。
  4. 超時重傳機制:丟包或延遲的情況下重發數據包,直到接收到對方的ACK。重傳機制主要有:基于計時器的重傳、快速重傳、選擇性重傳SACK和重復選擇性重傳D-SACK
  5. 流量控制:利用滑動窗口實現流量控制
  6. 擁塞控制:當網絡擁塞時減少數據發送。TCP在發送數據時主要考慮1.接收方的接收能力;2.網絡的擁塞程度。接收能力由滑動窗口表示,量化了接收方的剩余緩沖區的大小;擁塞程度由擁塞窗口表示,量化了發送方認為可以在網絡中傳輸的數據量

三次握手和四次揮手機制也是保障可靠性的基礎機制,有這個機制才能有上面的6個方面。

TCP報文頭部:
在這里插入圖片描述


二、分段機制

分段機制是將應用層數據分割成適合網絡傳輸的報文段,分割邏輯是基于Maximum Segment Size(MSS,單個TCP報文段能攜帶的應用層數據最大長度)和滑動窗口動態調整的。

MSS的典型值:以太網(MTU=1500字節)下,MSS=MTU-IP(20)-TCP(20)=1460字節

MSS的作用:避免IP層分片,減小傳輸開銷和丟包風險;確保報文段能適配路徑上的最小MTU,避免在傳輸的時候被IP協議分片

分段的具體流程如下:

  1. 應用層程序調用send將數據存入發送緩沖區
  2. 按MSS分割數據:假設MSS=1460字節,應用層存入數據是3000字節,報文段1=1460字節,seq=1;報文段2=1460字節,seq=1461;報文段3=80字節,seq=2921;
  3. 給上面的報文段123添加TCP頭部(如序列號、ACK號、窗口大小)
  4. 滑動窗口發送:在窗口內的報文段立即發送,窗口外的存在緩沖區內等待發送

影響分段的動態因素: 路徑MTU發現;擁塞窗口;接收窗口;

TCP分段是必要的機制,但是IP層分片則是需要盡可能避免的

三、超時重傳機制

超時重傳觸發條件:發送方發送一個數據段后啟動重傳計時器RTO Timer,如果在RTO時間內沒有收到對應的ACK就重傳這個數據段。

重傳的關鍵組件和流程:

  1. RTO Timer組件:每個已發送但未確認(未收到ACK)的報文段都會關聯一個獨立的RTO計時器。計時器到期后出發重傳,重置計時器并將超時時間設置為上一次RTO的2倍。其中RTO最小在Linux系統里是1秒。
  2. 動態RTO計算:使用Jacobson/Karels算法,基于往返時間RTT動態調整RTO

常見重傳場景:

  1. 首次超時重傳:重傳丟失報文段,并重置 RTO 計時器,將超時時間設置為上一次RTO的2倍。
  2. 快速重傳:收到3個重復ACK時,立即重傳丟失報文(不用等待RTO超時)
    發送方發送 Seq=1,2,3,4,5
    接收方收到 Seq=1,3,4,5(Seq=2 丟失)
    接收方連續回復 3 個 ACK=2
    發送方立即重傳 Seq=2
  3. 選擇性重傳SACK:通過 SACK 選項明確通知發送方哪些數據已接收,哪些缺失。ACK=5001, SACK=6001-7000 (表示5000之前的數據已收到,但5001-6000丟失,6001-7000已接收)
  4. 重復選擇性重傳D-SACK:在 SACK 的基礎上,額外攜帶信息,告知發送方有哪些數據包自己重復接收了

四、流量控制

TCP 利用滑動窗口實現流量控制。流量控制涉及到發送方和接收方的發送緩沖區和接收緩沖區,雙方都維護一個發送窗口和接收窗口。
發送窗口: TCP發送窗口可以分成4部分

  1. 已經發送并且確認的 TCP 段(已經發送并確認);
  2. 已經發送但是沒有確認的 TCP 段(已經發送未確認);
  3. 未發送但是接收方準備接收的 TCP 段(可以發送);
  4. 未發送并且接收方也并未準備接受的 TCP 段(不可發送);

TCP 接收窗口可以劃分成三個部分:

已經接收并且已經

  1. 確認的 TCP 段(已經接收并確認);
  2. 等待接收且允許發送方發送 TCP 段(可以接收未確認);
  3. 不可接收且不允許發送方發送 TCP 段(不可接收)。

五、擁塞控制

為了進行擁塞控制,TCP 發送方要維持一個 擁塞窗口(cwnd) 的狀態變量。擁塞控制窗口的大小取決于網絡的擁塞程度,并且動態變化。發送方讓自己的發送窗口取為擁塞窗口和接收方的接受窗口中較小的一個。TCP擁塞控制算法有4種:

  1. 慢開始:主機開始發送數據的時候,通過對cwnd加倍的方法從小到大增大發送窗口
  2. 擁塞避免:每經過一個往返時間 RTT, 就把發送方的cwnd加1, 讓擁塞窗口 cwnd 緩慢增大
  3. 快重傳和快恢復:當發送方連續收到3個重復的ACK時,立即重傳丟失的報文段,而不等待RTO到期;在快重傳觸發后,不立即將cwnd降為1MSS,而是通過半窗恢復策略平滑過渡,避免吞吐量斷崖式下降。
    在這里插入圖片描述

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

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

相關文章

2025年保姆級教程:Powershell命令補全、主題美化、文件夾美化及Git擴展

文章目錄 1. 美化 Powershell 緣起2. 安裝 oh-my-posh 和 posh-git3. 安裝文件夾美化主題【可選】 1. 美化 Powershell 緣起 背景:用了 N 年的 Windows 系統突然覺得命令行實在太難用了,沒有補全功能、界面也不美觀。所以,我決定改變它。但是…

基于Mongodb的分布式文件存儲實現

分布式文件存儲的方案有很多,今天分享一個基于mongodb數據庫來實現文件的存儲,mongodb支持分布式部署,以此來實現文件的分布式存儲。 基于 MongoDB GridFS 的分布式文件存儲實現:從原理到實戰 一、引言 當系統存在大量的圖片、…

【Linux】Linux安裝并配置Redis

目錄 1.安裝 2.啟動服務 3.配置 3.1.綁定地址 3.2.保護模式 3.3.持久化選項 3.3.1.RDB 持久化 3.3.2.AOF 持久化 3.3.3.如何選擇 1.安裝 Redis 可以從默認的 CentOS 軟件倉庫中安裝。運行以下命令來安裝 Redis sudo dnf install redis -y 響應如下 2.啟動服務 安裝完成后&…

python-數據可視化(大數據、數據分析、可視化圖像、HTML頁面)

通過 Python 讀取 XLS 、CSV文件中的數據,對數據進行處理,然后生成包含柱狀圖、扇形圖和折線圖的 HTML 報告。這個方案使用了 pandas 處理數據,matplotlib 生成圖表,并將圖表嵌入到 HTML 頁面中。 1.XSL文件生成可視化圖像、生成h…

黑馬點評相關知識總結

黑馬點評的項目總結 主要就黑馬點評項目里面的一些比較重要部分的一次總結,方便以后做復習。 基于Session實現短信登錄 短信驗證碼登錄 這部分使用常規的session來存儲用戶的登錄狀態,其中短信發送采取邏輯形式,并不配置云服務驗證碼功能。…

手搓四人麻將程序

一、麻將牌的表示 在麻將游戲中,總共有一百四十四張牌,這些牌被分為多個類別,每個類別又包含了不同的牌型。具體來說,麻將牌主要包括序數牌、字牌和花牌三大類。序數牌中,包含有萬子、條子和筒子,每種花色…

【Java高階面經:數據庫篇】17、分庫分表分頁查詢優化:告別慢查詢與內存爆炸

一、分庫分表基礎:策略與中間件形態 1.1 分庫分表核心策略 分庫分表是應對海量數據存儲和高并發訪問的關鍵架構設計,其核心在于將數據分散到不同的數據庫或表中,以突破單庫單表的性能限制。常見的分庫分表策略包括: 1.1.1 哈希…

貪心算法之跳躍游戲問題

問題背景 本文背景是leetcode的一道經典題目:跳躍游戲,描述如下: 給定一個非負整數數組 nums,初始位于數組的第一個位置(下標0)。數組中的每個元素表示在該位置可以跳躍的最大長度。判斷是否能夠到達最后…

Label Studio:開源標注神器

目錄 一、Label Studio 是什么? 二、核心功能大揭秘 2.1 多類型數據全兼容 2.2 個性化定制隨心配 2.3 團隊協作超給力 2.4 機器學習巧集成 三、上手實操超簡單 3.1 安裝部署不頭疼 3.1.1 Docker安裝 3.1.2 pip安裝 3.1.3 Anaconda安裝 3.2 快速開啟標注…

創建信任所有證書的HttpClient:Java 實現 HTTPS 接口調用,等效于curl -k

在 Java 生態中,HttpClient 和 Feign 都是調用第三方接口的常用工具,但它們的定位、設計理念和使用場景有顯著差異。以下是詳細對比: DIFF1. 定位與抽象層級 特性HttpClientFeign層級底層 HTTP 客戶端庫(處理原始請求/響應&#…

從零基礎到最佳實踐:Vue.js 系列(7/10):《常用內置 API 與插件》

引言 Vue.js 是一款輕量且強大的前端框架,因其易用性和靈活性受到廣泛歡迎。無論是初學者還是資深開發者,都可以通過其內置 API 和插件生態快速構建高效、可維護的 Web 應用。本文將從基礎用法講起,逐步深入到進階技巧,結合大量實…

線性代數:AI大模型的數學基石

🧑 博主簡介:CSDN博客專家、CSDN平臺優質創作者,高級開發工程師,數學專業,10年以上C/C, C#, Java等多種編程語言開發經驗,擁有高級工程師證書;擅長C/C、C#等開發語言,熟悉Java常用開…

Java-System工具類深度解析

Java-System工具類深度解析 前言一、System 類概述1.1 基本定義與特點1.2 重要成員變量 二、標準輸入輸出功能2.1 標準輸入(System.in)2.2 標準輸出(System.out)2.3 標準錯誤輸出(System.err) 三、系統屬性…

刪除用戶憑證

Git 部分倉庫無法操作,部分倉庫沒問題 問題出現 我用個人電腦修改了項目,提交了git。然后第二天在公司電腦git pull的時候失敗,只有部分倉庫,git colne直接失敗,部分倉庫無問題。 解決方式 刪除git相關憑證&#xff…

19. 結合Selenium和YAML對頁面實例化PO對象改造

19. 結合Selenium和YAML對頁面實例化PO對象改造 一、架構升級核心思路 1.1 改造核心目標 # 原始PO模式:顯式定義元素定位 username (id, ctl00_MainContent_username)# 改造后PO模式:動態屬性訪問 self.username.send_keys(Tester) # 自動觸發元素定…

鴻蒙App開發學習路徑

以下是一份系統的鴻蒙(HarmonyOS)App開發學習路徑,適合從零開始逐步掌握相關技能: 1. 基礎知識儲備 1.1 理解鴻蒙系統 鴻蒙核心特性:分布式能力、一次開發多端部署、原子化服務、ArkUI框架。與Android/iOS的區別&…

spring boot啟動報錯:2002 - Can‘t connect to server on ‘192.168.10.212‘ (10061)

錯誤代碼 10061 通常表明無法建立到指定服務器的網絡連接。這個錯誤屬于 Windows Sockets 錯誤代碼,具體指的是無法建立網絡連接,通常是因為目標地址不可達。以下是一些解決此問題的步驟: 檢查 IP 地址和端口: 確保你輸入的 IP …

ARMv7的NVIC中斷優先級

1. 優先級模型 數值規則:數值越小,優先級越高(例如優先級0的異常比優先級1的異常更高);若多個異常的優先級相同,則 異常號(Exception Number) 較小的異常優先執行。固定優先級異常(不可配置):異常類型 優先級值 說明 Reset -3 最高優先級(系統復位) NMI -2 不可屏…

gitee錯誤處理總結

背景 如上圖,根據圖片中的 Git 錯誤提示,我們遇到的問題是 ?本地分支落后于遠程分支,導致 git push 被拒絕。 ?問題原因? 遠程倉庫的 master 分支有其他人推送的新提交,而您的本地 master 分支未同步這些更新(即本…

阿里云合集(不定期更新)

一、阿里云申請免費域名證書流程:https://blog.csdn.net/humors221/article/details/143266059 二、阿里云發送國內短信怎樣編程:https://blog.csdn.net/humors221/article/details/139544193 三、阿里云ECS服務器磁盤空間不足的幾個文件:h…