核心機制:確認應答和超時重傳

核心機制一:確認應答

實現讓發送方知道接受方是否收到數據

發送方發送了數據之后,接受方,一旦接收到了,就會給發送方返回一個"應答報文"告訴發送方"我已經收到了數據"

網絡上會出現"后發先至"的情況

為了解決上述問題,就引入了"序號和確認序號"對于數據的傳輸進行標識

TCP 是字節流傳輸的

序號和確認序號是針對"字節"進行編號的

一個 TCP 數據報,包含多個字節,如何體現所有編號呢?

編號是連續遞增的,要知道 TCP 載荷的第一個字節的編號是多少,后面的每一個字節的編號就都知道了

32 位序號和數據:填寫數據報部分的第一個字節編號幾就行了

同一個 TCP 連接,序號會連續累加,下一個數據報的序號在上一個數據報的最后一個的序號基礎上繼續遞增

確認序號只在應答報文中生效

確認序號根據收到的數據的最后一個字節的序號進行加一來進行填充

這一位為 1 ,確認序號字段就會有效負責是屬于"無效字段"

確認序號的含義:

1.所有 < 確認序號的數據,接收方已經收到了

2.發送方接下來應該是從確認序號的位置開始,繼續發送數據

這樣的規則,非常有用,會在后面的特性中,有所體會

確認應答,就是 TCP 實現可靠傳輸的,最關鍵機制之一

這個地方的長度有多少,就看你代碼是怎么寫的

確認應答,關鍵是,數據順利到達,通過 ack 告知發送方

實際傳輸中,很有可能丟包的

TCP 核心機制二:超時從傳

確認應答的重要補充,針對丟包的場景的

超時:發送方,判定是否出現丟包的條件

重傳:發現數據丟包,就在發一次(概率性問題)

假設一個數據包,傳輸過程中,丟包的概率大概是 10%(相當大的數字)

連續傳輸兩次,數據包至少一次到達對方的概率是多少?

1 - 10% * 10% => 99%

傳輸次數的增加,數據報到達對方的概率概率大幅度增加

計算機中,一般不喜歡"無限的等",最大等待時間"超時時間"

沒有收到 ack 有兩種情況~~

這種情況丟包之后重傳,理所當然的

B 已經收到過一份數據了接下來又重傳一次,B 這邊同樣的數據收到了兩份~~

TCP 協議已經處理上述情況

TCP 在接受到數據的時候,會在操作系統內核中維護一個"接受緩沖區"(內存空間)

如果又收到了同一個數據,此時就可以根據數據的序號來在接受緩沖器中進行"去重"

確保應用程序,在進行 read 操作的時候,讀到的數據不會出現重復

TCP 也會針對對收到的數據在接受緩沖器中進行從重新排序,數據傳輸可能出現"后發先至"

1 - 1000 先發的, 1001 - 2000 后發的

接受方先收到了 1001 - 2000,后收到了 1 - 1000

TCP 的處理方式是在 接受緩沖區里,針對收到的數據進行排序

應用程序讀到數據的時候,讀到的仍然是有效的數據

超時重傳的超時時間不是固定的,動態變化的

隨著超時重傳的進行,如果還是沒有收到 ack 仍然要繼續重傳,但是等待的超時時間會逐漸變長

通過重傳之后,大幅度提升數據到達對方的概率,但是重傳之后,還是沒有收到 ack,只能說明,當前網絡的丟包概率,遠遠不止 10%了,此時,網絡大概率出現了非常嚴重的故障了,再次頻繁重傳,非但不會解決問題,甚至可能會加重網絡的故障程度~~

沒指望重傳能成功,死馬當活馬醫

重傳次數 / 總的重傳時間是有上限的,到達上限,重傳還沒成功, tcp 連接就會被"重置"(重置涉及到"復位報文") => 單方面的斷開連接了.

RST 觸發了一個復位報文,意味著這個鏈接就不要了

單方面通知

"釋放鏈接"就相當于是刪除掉之前保存的對方的信息

超時重傳,TCP中,進行可靠傳輸的重要機制之一

是確認應答的補充

確認應答處理傳輸順利的情況,超時重傳處理丟包的情況

網絡上很多資料關于這里討論的是有問題的

"TCP 的可靠性是通過 三次握手 實現的"

實際上不是這樣的

三次握手只是在建立連接之初,涉及到的環節.一旦連接建立好了,后續就沒有 握手的事情了

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

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

相關文章

spring openfeign

pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http…

從零到一選擇AI自動化平臺:深度解析n8n、Dify與Coze

隨著人工智能&#xff08;AI&#xff09;技術的快速發展&#xff0c;越來越多的企業和開發者開始探索AI驅動的自動化解決方案。面對市場上琳瑯滿目的平臺&#xff0c;如何選擇適合自己的AI自動化工具成為了一個重要的問題。在這篇文章中&#xff0c;我們將從功能、應用場景、易…

“以光惠算”走進校園,湖北大學用F5G-A全光網賦能智慧校園

SUN的聯合創始人約翰蓋奇&#xff0c;曾在1984年提出過一個大膽的猜想——“網絡就是計算機”。 到了大模型時代&#xff0c;40多年前的猜想被賦予了新的內涵。大模型訓練和推理所需的資源&#xff0c;遠超單臺計算機的承載能力&#xff0c;涌現出了新的網絡范式&#xff1a;大…

飛牛fnNAS的Docker應用之迅雷篇

目錄 一、“迅雷”應用安裝 二、啟動迅雷 三、迅雷賬號登錄 四、修改“迅雷”下載保存路徑 1、下載路徑準備 2、停止“迅雷”Docker容器 3、修改存儲位置 4、重新啟動Docker容器 5、再次“啟用”迅雷 五、測試 1、在PC上添加下載任務 2、手機上管理 3、手機添加下…

編程技能:格式化打印01,vsprintf 函數族簡介

專欄導航 本節文章分別屬于《Win32 學習筆記》和《MFC 學習筆記》兩個專欄&#xff0c;故劃分為兩個專欄導航。讀者可以自行選擇前往哪個專欄。 &#xff08;一&#xff09;WIn32 專欄導航 上一篇&#xff1a;編程技能&#xff1a;字符串函數14&#xff0c;memset 回到目錄…

PECVD 生成 SiO? 的反應方程式

在PECVD工藝中&#xff0c;沉積氧化硅薄膜以SiH?基與TEOS基兩種工藝路線為主。 IMD Oxide&#xff08;USG&#xff09; 這部分主要沉積未摻雜的SiO?&#xff0c;也叫USG&#xff08;Undoped Silicate Glass&#xff09;&#xff0c;常用于IMD&#xff08;Inter-Metal Diele…

[IMX] 10.串行外圍設備接口 - SPI

代碼鏈接&#xff1a;GitHub - maoxiaoxian/imx 參考資料&#xff1a; https://zhuanlan.zhihu.com/p/290620901 SPI協議詳解 - bujidao1128 - 博客園 SPI總線協議及SPI時序圖詳解 - Ady Lee - 博客園 目錄 1.SPI 簡介 2.I.MX6U ECSPI 簡介 2.1.控制寄存器 1 - ECSPIx_CO…

基于Docker和YARN的大數據環境部署實踐最新版

基于Docker和YARN的大數據環境部署實踐 目的 本操作手冊旨在指導用戶通過Docker容器技術&#xff0c;快速搭建一個完整的大數據環境。該環境包含以下核心組件&#xff1a; Hadoop HDFS/YARN&#xff08;分布式存儲與資源調度&#xff09;Spark on YARN&#xff08;分布式計算…

Java設計模式之中介者模式詳解

Java設計模式之中介者模式詳解 一、中介者模式核心思想 核心目標&#xff1a;通過中介對象封裝一組對象間的交互&#xff0c;將網狀的對象關系轉變為星型結構。如同機場控制塔協調所有飛機的起降&#xff0c;避免飛機之間直接通信導致的混亂。 二、中介者模式類圖&#xff08;…

ArcGIS應用指南:基于網格與OD成本矩陣的交通可達性分析

隨著城市化進程的加速,交通系統的效率和公平性日益成為影響居民生活質量的關鍵因素之一。在這一背景下,如何科學評估城市區域內的交通可達性,成為了城市規劃、交通管理和公共政策制定中的重要議題。作為中國東南沿海的重要港口城市,廈門以其獨特的地理優勢和快速的城市發展…

基于NXP例程學習CAN UDS刷寫流程

文章目錄 前言1.概述1.1 診斷報文 2.協議數據單元(N_PDU)2.1 尋址信息&#xff08;N_AI&#xff09;2.1.1 物理尋址2.1.2 功能尋址2.1.3 常規尋址&#xff08;Normal addressing&#xff09;2.1.4 常規固定尋址&#xff08;Normal fixed addressing&#xff09;2.1.5 擴展尋址&…

近期手上的一個基于Function Grap(類AWS的Lambda)小項目的改造引發的思考

函數式Function是云計算里最近幾年流行起來的新的架構和模式&#xff0c;因為它不依賴云主機&#xff0c;非常輕量&#xff0c;按需使用&#xff0c;甚至是免費使用&#xff0c;特別適合哪種數據同步&#xff0c;數據轉發&#xff0c;本身不需要保存數據的業務場景&#xff0c;…

什么是 SQL 注入?如何防范?

什么是 SQL 注入?如何防范? 1. SQL 注入概述 1.1 基本定義 SQL 注入(SQL Injection)是一種通過將惡意SQL 語句插入到應用程序的輸入參數中,從而欺騙服務器執行非預期SQL命令的攻擊技術。攻擊者可以利用此漏洞繞過認證、竊取數據甚至破壞數據庫。 關鍵結論:SQL 注入是O…

高德地圖應用OceanBase單元化構建下一代在線地圖服務

IEEE International Conference on Data Engineering (ICDE) 是數據庫和數據工程領域的頂級學術會議之一&#xff08;與SIGMOD、VLDB并成為數據庫三大頂會&#xff09;&#xff0c;自1984年首次舉辦以來&#xff0c;每年舉辦一次。ICDE涵蓋廣泛的主題&#xff0c;包括數據庫系統…

Vue3中Element-Plus中el-input及el-select 邊框樣式

如果不需要顯示下邊框&#xff0c;純無邊框直接將 【border-bottom: 1px solid #C0C4CC; 】注掉或去掉即可。 正常引用組件使用即可&#xff0c;無須自定義樣式&#xff0c;最終效果CSS樣式。 <style scoped> /* 輸入框的樣式 */ :deep(.el-input__wrapper) { box-sha…

如何做好一份技術文檔:從信息孤島到知識圖譜的進階之路

如何做好一份技術文檔&#xff1a;從信息孤島到知識圖譜的進階之路 在軟件開發的漫長征程中&#xff0c;技術文檔如同隱藏在代碼叢林中的路標&#xff0c;不僅指引著開發團隊的前行方向&#xff0c;更在產品迭代的歲月里構筑起知識傳承的橋梁。一份優質的技術文檔&#xff0c;既…

Docker Compose使用自定義用戶名密碼啟動Redis

通常我們使用下面的命令來啟動 redis 容器&#xff0c;此時連接 Redis 的時候是不需要用戶認證的 sudo docker run -d --name my-redis -p 6379:6379 redis此時我們可以使用 redis-server --requirepass "mypassword" 來指定默認用戶&#xff08;default&#xff09…

1.什么是node.js、npm、vue

一、Node.js 是什么&#xff1f; &#x1f63a; 定義&#xff1a; Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行時環境&#xff0c;讓你可以在瀏覽器之外運行 JavaScript 代碼&#xff0c;主要用于服務端開發。 &#x1f63a;從計算機底層說&#xff1a;什么是“運…

如何在 Vue.js 中集成 Three.js —— 創建一個旋轉的 3D 立方體

在這篇文章中&#xff0c;我將向大家展示如何將 Three.js 與 Vue.js 結合&#xff0c;創建一個簡單的 3D 場景&#xff0c;并展示一個旋轉的立方體。通過這個簡單的示例&#xff0c;你將學習到如何在 Vue 項目中集成 Three.js&#xff0c;以及如何創建動態的 3D 內容。 1. 安裝…

DeepSeek?R1-0528 重磅升級:螞蟻百寶箱免費、無限量調用

DeepSeek?R1-0528 重磅升級&#xff1a;螞蟻百寶箱免費、無限量調用 端午假期前一天&#xff0c;DeepSeek?R1 更新到了 0528 版本&#xff01; 官方說明&#xff1a;0528 版本在深度思考與推理能力方面顯著增強——在數學、編程與通用邏輯等多項基準測評中&#xff0c;表現已…