【探索Linux】P.37(傳輸層 —— TCP協議通信機制 | 確認應答(ACK)機制 | 超時重傳機制)

在這里插入圖片描述

閱讀導航

  • 引言
  • 一、確認應答(ACK)機制
    • 1. 成功接收
    • 2. 過程中存在丟包
    • 3. 引入序列號
      • (1)序列號的定義
      • (2)序列號的作用
      • (3)序列號的工作原理
      • (4)序列號和確認應答號
  • 二、超時重傳機制
    • 1. 超時重傳機制的作用
    • 2. 超時重傳機制的工作原理
    • 3. 超時重傳機制的優化
    • 4. 超時重傳機制的影響
  • 溫馨提示

引言

在上一篇文章中,我們深入探討了TCP協議的傳輸層,詳細解析了TCP協議段的格式,包括它的頭部結構和各字段的功能。通過這一過程,我們對TCP如何確保數據的可靠傳輸有了初步的了解。現在,讓我們繼續我們的探索之旅,進一步揭開TCP協議的神秘面紗,深入了解其通信機制。讓我們一起走進TCP協議的通信世界,探索其背后的技術細節和實現原理。

一、確認應答(ACK)機制

TCP(傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。在TCP中,確認應答(ACK)機制是確保數據可靠性的核心組成部分。

1. 成功接收

在這里插入圖片描述
?當主機A向主機B發送數據時,一旦數據到達主機B,主機B將向主機A發送一個確認應答,以表明數據已被成功接收。下面是這一過程的詳細步驟:

  1. 數據發送:主機A將數據分割成TCP段,每個段都包含一個序列號,表示數據的順序。

  2. 發送數據段:主機A將這些TCP段發送到主機B。

  3. 接收數據段:主機B接收到來自主機A的TCP段。

  4. 生成ACK:主機B生成一個ACK段,其中包含一個確認應答號。這個確認應答號通常等于主機B期望接收的下一個TCP段的序列號。

  5. 發送ACK:主機B將ACK段發送回主機A。

  6. 確認接收:主機A接收到來自主機B的ACK后,知道之前發送的數據已經被成功接收。

2. 過程中存在丟包

在TCP協議中,數據的可靠傳輸依賴于接收端發送的確認應答(ACK)。發送端在數據發出后,會進入等待狀態,以期收到接收端的確認信號。一旦接收到確認,即表示數據已安全到達目的地。相反,如果在指定的等待時間內未收到任何確認,發送端將推斷數據可能未被成功接收,從而觸發重發機制
在這里插入圖片描述
如果主機A發送的數據因網絡擁堵等原因未能成功傳輸至主機B,導致數據丟失,主機A將無法接收到主機B的確認信號。在這種情況下,主機A會在設定的時間間隔內等待確認應答。若在這段時間內仍未收到任何確認,主機A將采取行動,重新發送丟失的數據

即使發送端未收到確認應答,這并不一定表示數據包丟失。有時數據可能已經到達接收端,但確認信號在返回過程中丟失。這會導致發送端在未收到及時的ACK時,誤判數據未成功傳輸,并因此重新發送數據。

在這里插入圖片描述
當主機B向主機A發送的確認應答因網絡問題在途中丟失,主機A將無法收到這一信號。主機A會設定一個等待期,如果在這段時間內沒有收到確認應答,它將認為數據未被成功接收,并重新發送數據。與此同時,主機B在實際接收到數據后,如果再次收到相同的數據包,它將識別出這是一次重復傳輸,并不會再發送確認應答,以避免不必要的通信

3. 引入序列號

為了解決上面的問題,確認應答(ACK)機制引入了序列號,它用于確保數據的有序傳輸和完整性。
在這里插入圖片描述

(1)序列號的定義

序列號是TCP段中的一個重要字段,用于標識該段數據在字節流中的位置。每個TCP段的序列號都是唯一的,它從0開始,并且隨著數據的發送而遞增。

(2)序列號的作用

  1. 確保有序傳輸:序列號確保數據按照發送的順序被接收方接收。接收方可以根據序列號將數據重新組裝成原始的字節流。
  2. 允許數據重排:如果數據在傳輸過程中出現亂序,接收方可以根據序列號對數據進行重新排序。
  3. 檢測丟失的數據:如果接收方收到的序列號不是期望的下一個序列號,它知道數據在傳輸過程中丟失了。
  4. 觸發重傳機制:發送方可以根據接收方的ACK報文中的確認號來確定哪些數據需要重傳。

(3)序列號的工作原理

  1. 初始化序列號(ISN):當TCP連接建立時,發送方隨機生成一個初始序列號(ISN),用于第一個數據段的序列號。
  2. 序列號遞增:隨著數據的發送,序列號會遞增。例如,如果發送方發送了100字節的數據,那么下一個數據段的序列號將是100+1。
  3. 序列號回繞:序列號是一個32位的無符號整數,當序列號達到最大值(2^32-1)時,它會回繞到0,重新開始計數。
  4. 序列號與確認號的關系:接收方在發送ACK報文時,會將期望接收的下一個數據段的序列號作為確認號發送給發送方。

(4)序列號和確認應答號

在這里插入圖片描述

序列號是TCP協議中確保數據有序傳輸和完整性的關鍵機制之一。通過序列號,TCP能夠實現可靠的數據傳輸,即使在網絡條件不理想的情況下也能保持數據的完整性。

二、超時重傳機制

超時重傳是指當TCP發送方在發送數據后,在預期的時間內沒有收到接收方的確認應答(ACK),則會認為該數據段在傳輸過程中丟失或損壞,從而觸發重新發送該數據段的過程。

1. 超時重傳機制的作用

  1. 確保數據完整性:通過重傳丟失或未被確認的數據,確保所有數據都能被接收方正確接收。
  2. 適應網絡狀況:網絡狀況可能隨時變化,超時重傳機制允許TCP根據當前的網絡狀況調整重傳策略。

2. 超時重傳機制的工作原理

  1. 設置超時時間(RTO, Retransmission Timeout):發送方為每個未被確認的數據段設置一個超時計時器。超時時間的確定通常基于往返時間(RTT, Round-Trip Time)的估計。
  2. 監控ACK:發送方持續監控接收方發回的ACK。如果收到的ACK確認了數據段,超時計時器會重置;如果沒有收到預期的ACK,計時器繼續倒計時。
  3. 超時觸發重傳:當超時計時器到達0時,如果相應的數據段仍未被確認,發送方會認為該數據段丟失,并重新發送該數據段。
  4. 調整超時時間:TCP會根據網絡狀況動態調整超時時間。例如,如果連續發生超時,TCP可能會增加超時時間,以減少不必要的重傳。

3. 超時重傳機制的優化

  1. 快速重傳(Fast Retransmit):除了超時重傳外,TCP還實現了快速重傳機制。如果接收方收到一個數據段,但后續的數據段丟失,它會發送重復的ACK來指示發送方。發送方收到三個相同的ACK時,會立即重傳丟失的數據段,而不必等待超時。
  2. 有限重傳為了防止無限重傳,TCP通常會限制重傳次數。如果數據段在多次重傳后仍未被確認,TCP可能會放棄重傳,并報告錯誤給應用層
  3. 擁塞控制:超時重傳是擁塞控制算法的一部分。當發生超時時,TCP可能會認為網絡擁塞,并采取措施減少發送速率,以減輕網絡負擔。

4. 超時重傳機制的影響

  • 性能:超時重傳可能會影響TCP連接的性能,特別是在網絡狀況不佳時。重傳會增加延遲和額外的網絡負載。
  • 可靠性:盡管超時重傳可能會影響性能,但它確保了數據的可靠傳輸,即使在網絡條件不理想的情況下。

溫馨提示

感謝您對博主文章的關注與支持!如果您喜歡這篇文章,可以點贊、評論和分享給您的同學,這將對我提供巨大的鼓勵和支持。另外,我計劃在未來的更新中持續探討與本文相關的內容。我會為您帶來更多關于Linux以及C++編程技術問題的深入解析、應用案例和趣味玩法等。如果感興趣的話可以關注博主的更新,不要錯過任何精彩內容!

再次感謝您的支持和關注。我們期待與您建立更緊密的互動,共同探索Linux、C++、算法和編程的奧秘。祝您生活愉快,排便順暢!

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

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

相關文章

基于Java的壁紙網站設計與實現

💗博主介紹💗:?在職Java研發工程師、專注于程序設計、源碼分享、技術交流、專注于Java技術領域和畢業設計? 溫馨提示:文末有 CSDN 平臺官方提供的老師 Wechat / QQ 名片 :) Java精品實戰案例《700套》 2025最新畢業設計選題推薦…

ERP的模塊說明

ERP的模塊:物料管理、銷售管理、生產管理)、財務管理、質量管理、人力資源管理、項目管理、倉儲管理(WMS)、供應商管理(SRM)等功能模塊 ERP流程通常涉及以下幾個關鍵步驟: 制定生產計劃:這是ERP流程的第一步,需要根據產品預測和訂…

Oracle中http的post的用法和例子

在Oracle數據庫中,直接執行HTTP POST請求并不是數據庫核心功能的一部分。但是,你可以通過Oracle的PL/SQL程序結合一些額外的工具或庫來實現這一功能。 以下是一個使用Oracle UTL_HTTP包(Oracle提供的用于HTTP通信的PL/SQL包)來發…

nftables(1)基本原理

簡介 nftables 是 Linux 內核中用于數據包分類的現代框架,用來替代舊的 iptables(包括 ip6tables, arptables, ebtables 等,統稱為 xtables)架構。nftables 提供了更強大、更靈活以及更易于管理的規則集配置方式,使得…

【java計算機畢設】辦公用品管理系統MySQL ssm JSP maven項目設計代碼源碼+文檔 前后端一體

1項目功能 【java計算機畢設】辦公用品管理系統MySQL ssm JSP maven項目設計代碼源碼文檔 前后端一體 2項目介紹 系統功能: 辦公用品管理系統包括管理員、用戶倆種角色。 管理員功能包括個人中心模塊用于修改個人信息和密碼、用戶管理、用品分類管理、用品信息管理…

springcloud+vue項目,controller層接口返回json數據,前端可以接收到數據,但瀏覽器“F12-->網絡-->響應“顯示為空的問題處理

1.顯示為空的場景 SharetekR(access_tokeneyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJQQzoxODA1ODA4ODc1MjUwMTIyNzUyIiwicm5TdHIiOiJrZEoxV05CV3NBSUdYb05TbktSU3kzOGNuSnk3c3FRTSIsInVzZXJJZCI6MTgwNTgwODg3NTI1MDEyMjc1MiwidXNlck5h…

grpc-go客戶端接口添加

【1】 proto相關文件同服務端,如已經生成,可以直接使用服務端的文件(包) 【2】新建一個目錄“WHG_CLIENT”,目錄下新建一個main.go文件 package mainimport ("context""log""grpc-go-maste…

Kafka系列之SpringBoot集成Kafka

本文介紹如何在springboot項目中集成kafka收發message。 pom依賴 springboot相關的依賴我們就不提了&#xff0c;和kafka相關的只依賴一個spring-kafka集成包 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka<…

STM32F1+HAL庫+FreeTOTS學習5——內核中斷管理及中斷控制函數

STM32F1HAL庫FreeTOTS學習5——中斷管理和臨界段代碼保護 中斷簡介中斷優先級寄存器拓展FreeRTOS中PendSV和Systick中斷優先級配置三個中斷屏蔽寄存器FreeRTOS中斷管理函數代碼驗證 上一期我們學習了FreeRTOS中任務掛起與恢復&#xff0c;在中斷服務程序中恢復任務過程中&#…

[Redis]哨兵機制

哨兵機制概念 在傳統主從復制機制中&#xff0c;會存在一些問題&#xff1a; 1. 主節點發生故障時&#xff0c;進行主備切換的過程是復雜的&#xff0c;需要人工參與&#xff0c;導致故障恢復時間無法保障。 2. 主節點可以將讀壓力分散出去&#xff0c;但寫壓力/存儲壓力是無法…

印章誰在管、誰用了、用在哪?契約鎖讓您打開手機一看便知

“印章都交給誰在管”、“哪些人能用”、“都有哪些業務在用”…這些既是管理者最關心的印章問題也是影響印章安全的關鍵要素。但是公司旗下分子公司那么多&#xff0c;各類公章、法人章、財務章、合同章一大堆&#xff0c;想“問”明白很難。 契約鎖電子簽及印控平臺推出“印章…

14-11 2024 年的 13 個 AI 趨勢

2024 年的 13 個 AI 趨勢 人工智能對環境的影響和平人工智能人工智能支持的問題解決和決策針對人工智能公司的訴訟2024 年美國總統大選與人工智能威脅人工智能、網絡犯罪和社會工程威脅人工智能治療孤獨與對人工智能的情感依賴人工智能影響者中國爭奪人工智能霸主地位人工智能…

一句話回答的前端面試題

該篇文章為一句話的答案&#xff0c;想看更詳細的面試題請看這篇>《前端面試題》 原型鏈&#xff1a; 實例與原型的鏈條&#xff0c;原型是prototype&#xff0c;鏈是__proto__&#xff0c;每個函數有一個原型對象&#xff0c;函數在創建時有一個默認屬性 prototype&#x…

YOLOv10全網最新創新點改進系列:融合GSConv+Slim Neck,雙改進、雙增強,替換特征融合層實現, 輕量化漲點改進策略,有效漲點神器!

YOLOv10全網最新創新點改進系列&#xff1a;融合GSConvSlim Neck&#xff0c;雙改進、雙增強&#xff0c;替換特征融合層實現&#xff0c; 輕量化漲點改進策略&#xff0c;有效漲點神器&#xff01; 所有改進代碼均經過實驗測試跑通&#xff01;截止發稿時YOLOv10已改進40&…

【數據結構】06.棧隊列

一、棧 1.1棧的概念及結構 棧&#xff1a;一種特殊的線性表&#xff0c;其只允許在固定的一端進行插入和刪除元素操作。進行數據插入和刪除操作的一端稱為棧頂&#xff0c;另一端稱為棧底。棧中的數據元素遵守后進先出LIFO&#xff08;Last In First Out)的原則。 壓棧&#…

FPGA就業方向以及主要工作

FPGA&#xff08;Field-Programmable Gate Array&#xff09;作為可編程邏輯器件&#xff0c;在多個行業和領域中都有廣泛的應用。具備FPGA技能的專業人士可以在多個方向上找到就業機會&#xff0c;以下是FPGA主要的就業方向及其對應的主要工作職責&#xff1a; 通信行業 職位…

LangChain終極內幕指南,學會langchain就看它了

1.概述 在人工智能迅速演進的時代&#xff0c;諸如Open AI的ChatGPT和Google的Bard等大型語言模型(LLMs)正徹底改變我們與技術互動的方式。這些技術巨頭和SaaS公司正在競相利用LLMs的威力&#xff0c;創造更為智能和實用的應用程序。 然而&#xff0c;真正的變革并非僅僅停留…

低壓電工精選歷年真題附答案

1.當電壓為5V時&#xff0c;導體的電阻值為5歐&#xff0c;那么當電阻兩端電壓為2V時&#xff0c;導體的電阻值為()歐。[單選題] A 、10B、5(正確答案) C、2 2.當電氣火災發生時&#xff0c;應首先切斷電源再滅火&#xff0c;但當電源無法切斷時&#xff0c;只能帶電滅火&…

Finding and exploting an unused API endpoint

Using 0$ account buy a piece of lether priced at $133 1、嘗試訪問api接口 大概率可能訪問不到,但是可以嘗試訪問下 /api/swagger/v1 /openapi.json 2、頁面功能點尋找 api send to Repeter 3、Find Supported HTTP請求 POST方法測試 通過測試得知支持GET方法和PATC…

C語言實現的人員管理系統(順序表版)

該系統具有以下主要功能&#xff1a; 添加人員信息&#xff1a;在有空間的前提下&#xff0c;用戶輸入人員的工號、姓名、性別、聯系電話和 QQ 號等信息&#xff0c;系統會自動檢查編號的唯一性&#xff0c;確保不重復。查找人員信息&#xff1a;提供按工號和姓名兩種查找方式…