計算機網絡學習筆記:TCP可靠傳輸實現、超時重傳時間選擇

文章目錄

  • 一、TCP可靠傳輸實現
  • 二、TCP超時重傳時間選擇


一、TCP可靠傳輸實現

??TCP可靠傳輸的實現,主要基于發送方和接收方的滑動窗口,以及確認機制:

  • 發送方在未收到確認(ACK)前,可以將序號落在發送窗口內的數據段連續發送,但這些數據段必須保留在緩存中,不能釋放,以便在超時或接收到重復 ACK 時進行重傳。發送方的 滑動窗口表示 “允許發送但未確認” 的數據范圍;TCP 不會等待一個 ACK 才發送下一個段,而是可以 “流水線” 式發送多個段;
  • 接收方在接收到發送方發送的報文后,要及時發送確認報文,如果接收到的報文段是不連續的,則會對連續報文段的最大序號及之前的數據進行確認。可以對發送方的滑動窗口大小進行調整(流量控制)。

在這里插入圖片描述

??對于發送方和接收方的滑動窗口,都有前沿后沿的概念:

  • 發送方:
    • 后沿:已發送并且接收到確認報文的數據,可以刪除。
    • 前沿:在滑動窗口的最大范圍之外,不允許發送。
  • 接收方:
    • 后沿:已發送確認報文給發送方,并且這部分內容交付了應用進程,可以刪除。
    • 前沿:在滑動窗口的最大范圍之外,不允許接收。

在這里插入圖片描述

??為了維護發送窗口的狀態,可以使用P1,P2,P3三個指針:

  • P1:指向的是發送窗口內已發送,但是還未收到確認的部分的第一個數據的序號。
  • P2:指向的是發送窗口內還未發送的部分的第一個數據的序號。
  • P3:指向的是發送窗口外的部分的第一個數據的序號。

在這里插入圖片描述
??假設下圖的場景:

  • 發送方已經成功發送了 4、5、6 三個報文段;
  • 接收方只成功收到了 5、6,但沒有收到 4;
  • TCP 默認使用 累計確認(ACK) 策略 —— 只能確認連續收到的數據段。

??此時接收方收到的ACK應該為4,同時對5,6進行緩存。這種情況并不會引起發送方的快重傳,因為是第一次重復確認
在這里插入圖片描述
??此時接收方收到了4的報文段,則反饋給發送方7的ack,表示已經接受到了4~6的報文段,現在要接受7的報文段,同時窗口向前滑動:
在這里插入圖片描述
??假設此時發送方向接收方發送了7~10號報文段,但是接收方一直都沒有ack,因為窗口內的序號已經用完了,發送方在接收到接收方的確認之前,不能發送新的數據,而如果一直接收不到接收方的確認,就會觸發超時重傳(慢開始 + 擁塞避免算法)
在這里插入圖片描述

二、TCP超時重傳時間選擇

??RTT = 請求的往返時間 = 請求開始時間 - 接收到請求確認的時間。RTO則是超時重傳的時間。RTO不能小于RTT,也不能遠大于RTT的值,應設置為略大于RTT的值。
??然而上述只是理想情況下的設置,實際網絡通信中,每次消息往返的時間都是不固定的,需要動態進行調整。在這里插入圖片描述
??RTT的計算也是非常復雜的,當發送方發生超時重傳的時候,無法知道接收方發出的確認報文段是針對原報文段的確認,還是重傳報文段的確認。(應是對于重傳報文段的確認)如果發送方將該報文段當做是對于原有報文段的確認,那么算出的RTT往返時間就會大于應有的值。
在這里插入圖片描述
??同理,接收方在發送確認報文段發生了超時,導致發送方觸發了超時重傳。發送方無法知道接收方的確認報文段,是針對發送方第一次發送的報文的確認,還是超時重傳報文的確認(應該是對于發送方第一次報文的確認。)那么算出的RTT往返時間就會小于應有的值。
在這里插入圖片描述
??針對上述的問題,提出了一種karn算法。Karn 算法是用于 計算 TCP 中的往返時間(RTT)和重傳超時時間(RTO) 的一個改進方法,專門用來避免因重傳而導致的 RTT 估算不準確問題。其核心思想在于不要用重傳報文段的 ACK 來更新 RTT 估算值。

  • 當發生重傳時,不更新 RTT 估計值。
  • 只用未發生重傳的報文段的 ACK 來估計 RTT。
  • 啟用指數退避策略,即每次重傳失敗后,將 RTO 值加倍。

在這里插入圖片描述

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

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

相關文章

Perl 正則表達式

Perl 正則表達式 引言 Perl 正則表達式(Regular Expressions)是Perl編程語言中一個強大且靈活的工具,用于字符串處理和模式匹配。正則表達式在文本處理、數據驗證、搜索和替換等任務中發揮著至關重要的作用。本文將深入探討Perl正則表達式的…

Security: RSA: 1024 bit 長度已經變得不安全了

文章目錄 參考推薦限制RHEL相關配置man crypto-policies包含的應用使用方法是配置文件include參考 https://csrc.nist.gov/pubs/sp/800/57/pt1/r2/final https://www.linuxquestions.org/questions/linux-security-4/1024-bit-dsa-vs-2048-bit-rsa-4175439131/ https://csrc.n…

第一課:大白話中的機器學習

各位看官好啊!今天咱們來聊一個聽起來高大上但實際上特別接地氣的玩意兒——機器學習。別被這名字嚇到,它其實就是教電腦像人類一樣學習知識的一套方法。想象一下你教你家狗子坐下、握手的過程,機器學習差不多就是這么回事,只不過"學生"換成了電腦。 一、啥是機…

實現 el-table 中鍵盤方向鍵導航功能vue2+vue3(類似 Excel)

實現 el-table 中鍵盤方向鍵導航功能vue2vue3(類似 Excel) 功能需求 在 Element UI 的 el-table 表格中實現以下功能: 使用鍵盤上下左右鍵在可編輯的 el-input/el-select 之間移動焦點焦點移動時自動定位到對應單元格支持光標位置自動調整…

MyBatis:從入門到進階

📌 摘要 在 Java 后端開發中,MyBatis 是一個非常流行且靈活的持久層框架。它不像 Hibernate 那樣完全封裝 SQL,而是提供了對 SQL 的精細控制能力,同時又具備 ORM(對象關系映射)的功能。 本文將帶你從 MyB…

leetcode51.N皇后:回溯算法與沖突檢測的核心邏輯

一、題目深度解析與N皇后問題本質 題目描述 n皇后問題研究的是如何將n個皇后放置在nn的棋盤上,并且使皇后彼此之間不能相互攻擊。給定一個整數n,返回所有不同的n皇后問題的解決方案。每一種解法包含一個明確的n皇后問題的棋子放置方案,該方…

算法-每日一題(DAY9)楊輝三角

1.題目鏈接: 118. 楊輝三角 - 力扣(LeetCode) 2.題目描述: 給定一個非負整數 numRows,生成「楊輝三角」的前 numRows 行。 在「楊輝三角」中,每個數是它左上方和右上方的數的和。 示例 1: 輸入: numRo…

【MATLAB代碼】制導方法介紹與例程——追蹤法,適用于二維平面,目標是移動的|附完整源代碼

追蹤法(追蹤導引法)是一種常見的導彈導引方式,其基本原理是保持導彈的速度矢量始終指向目標。在追蹤法中,導彈的加速度可以表示為指向目標的加速度。 本文給出二維平面下,移動目標的追蹤法導引的介紹、公式與matlab例程 訂閱專欄后,可以直接查看完整源代碼 文章目錄 運行…

小白的進階之路系列之十八----人工智能從初步到精通pytorch綜合運用的講解第十一部分

從零開始的NLP:使用序列到序列網絡和注意力機制進行翻譯 我們將編寫自己的類和函數來預處理數據以完成我們的 NLP 建模任務。 在這個項目中,我們將訓練一個神經網絡將法語翻譯成英語。 [KEY: > input, = target, < output]> il est en train de peindre un table…

SSL安全證書:數字時代的網絡安全基石

SSL安全證書&#xff1a;數字時代的網絡安全基石 在當今數字化浪潮中&#xff0c;網絡通信安全已成為個人、企業和組織不可忽視的核心議題。SSL&#xff08;Secure Sockets Layer&#xff0c;安全套接層&#xff09;安全證書作為保障數據傳輸安全的關鍵技術&#xff0c;通過加…

LLM-201: OpenHands與LLM交互鏈路分析

一、核心交互鏈路架構 #mermaid-svg-ZBqCSQk1PPDkIXNx {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ZBqCSQk1PPDkIXNx .error-icon{fill:#552222;}#mermaid-svg-ZBqCSQk1PPDkIXNx .error-text{fill:#552222;strok…

【項目】仿muduo庫one thread one loop式并發服務器SERVER模塊(下)

&#x1f4da; 博主的專欄 &#x1f427; Linux | &#x1f5a5;? C | &#x1f4ca; 數據結構 | &#x1f4a1;C 算法 | &#x1f152; C 語言 | &#x1f310; 計算機網絡 |&#x1f5c3;? mysql 項目文章&#xff1a; 仿muduo庫one thread one loop式并發服務器…

數據庫索引結構 B 樹、B + 樹與哈希索引在不同數據查詢場景下的適用性分析

一、數據庫索引結構B樹 樹概述 樹是一種多路平衡查找樹&#xff0c;廣泛應用于數據庫和文件系統中。B樹的節點可以存儲多個數據元素&#xff0c;并且保持樹的平衡&#xff0c;以提高查詢效率。 適用性分析 在數據量較大&#xff0c;范圍查找較多的場景下&#xff0c;B樹的查詢效…

Linux進程間通信——信號

1.信號的介紹 信號( Signal )是 Unix, 類Unix以及其他POSIX兼容的操作系統中進程間通信的一種有限制的手段。 1&#xff09;信號是在軟件層面上對中斷機制的一種模擬&#xff0c;是一種異步通信方式。2&#xff09;信號可以直接進行用戶空間進程和內核進程之間的交互&#xff…

Bytemd@Bytemd/react詳解(編輯器實現基礎AST、插件、跨框架)

ByteMD Markdown編輯器詳細解釋&修改編輯器默認樣式&#xff08;高度300px) AST樹詳解 [ByteMD 插件系統詳解(https://blog.csdn.net/m0_55049655/article/details/148811248?spm1001.2014.3001.5501) Sevelet編寫的Bytemd如何適配到React中 ??1?? 背景概述 Byte…

《Redis》事務

文章目錄 Redis中的原子性Redis的事物和MySQL事務的區別Redis實現事務什么場景下&#xff0c;會使用事務? Redis事務相關命令watch命令的實現原理 總結 Redis中的原子性 Redis的原子性不同于MySQL的原子性。 Redis的事物和MySQL事務的區別 但是注意體會Redis的事務和MySQL…

Elasticsearch Kibana (一)

一、官方文檔 elasticsearch官網&#xff1a;elasticsearch官網 elasticsearch源碼&#xff1a;elasticsearch源碼 ik分詞器&#xff1a; ik分詞器 ik分詞器下載&#xff1a;ik分詞器下載 elasticsearch 版本選擇&#xff1a;elasticsearch 版本選擇 官方推薦Elasticsearch和j…

[linux] Ubuntu 24軟件下載和安裝匯總(自用)

經常重裝系統&#xff0c;備份下&#xff0c;有用的也可以參考。 安裝圖形界面 apt install ubuntu-desktop systemctl set-default graphical.target reboot 安裝chrome wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo apt insta…

分布變化的模仿學習算法

與傳統監督學習不同,直接模仿學習在不同時刻所面臨的數據分布可能不同.試設計一個考慮不同時刻數據分布變化的模仿學習算法 import numpy as np import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, TensorDataset from…

arm-none-eabi-ld: cannot find -lm

arm-none-eabi-ld -Tuser/hc32l13x.lds -o grbl_hc32l13x.elf user/interrupts_hc32l13x.o user/system_hc32l13x.o user/main.o user/startup_hc32l13x.o -lm -Mapgrbl_hc32l13x.map arm-none-eabi-ld: cannot find -lm makefile:33: recipe for target link failed 改為在gcc…