【計算機網絡】第3章:傳輸層—可靠數據傳輸的原理

目錄

一、PPT

二、總結

(一)可靠數據傳輸原理

關鍵機制

1. 序號機制 (Sequence Numbers)

2. 確認機制 (Acknowledgements - ACKs)

3. 重傳機制 (Retransmission)

4. 校驗和 (Checksum)

5. 流量控制 (Flow Control)

協議實現的核心:滑動窗口協議 (Sliding Window Protocol)

兩種主要變體

(二)可靠數據傳輸協議(Rdt)演進詳解

核心目標

Rdt 1.0:理想信道模型

假設條件

工作機制

缺陷

Rdt 2.0:引入差錯檢測與確認機制

解決核心問題

關鍵技術

有限狀態機(FSM)

缺陷

Rdt 2.1:解決確認信號受損

核心改進

關鍵行為

優勢

Rdt 2.2:無NAK確認協議

核心改進

接收方行為

優勢

Rdt 3.0:解決丟包與超時重傳

解決核心問題

關鍵技術

有限狀態機(FSM)關鍵流程

性能問題

協議演進總結對比

后續演進方向


一、PPT

?

二、總結

(一)可靠數據傳輸原理

核心目標:確保數據在不可靠信道(可能發生比特差錯、分組丟失、亂序、重復)上完整、有序、無重復地交付給接收方。

關鍵機制

1. 序號機制 (Sequence Numbers)

  • 作用:標識每個發送的數據段。

  • 原理

    • 發送方為每個數據段分配一個唯一的序號(通常是字節流中的偏移量或分組編號)。

    • 接收方利用序號:

      • 檢測丟失分組:發現序號間隙。

      • 檢測重復分組:收到相同序號的分組。

      • 按序重組:將亂序到達的分組按序號排序后交付上層。

  • 序號空間:序號需足夠大(模運算處理回繞),常見32位(TCP)。

2. 確認機制 (Acknowledgements - ACKs)

  • 作用:接收方通知發送方已成功接收數據。

  • 原理

    • 累積確認 (Cumulative ACK)

      • 接收方發送?ACK n,表示已正確接收序號?n?之前(包括?n)的所有數據。

      • 優點:簡單,ACK丟失容忍度較高(后續ACK能確認前面的數據)。

      • 缺點:不能精確告知哪些分組丟失(只能知道n+1丟失)。

    • 選擇確認 (Selective ACK - SACK)

      • 接收方顯式告知已正確接收的非連續數據塊范圍。

      • 優點:更高效地指明丟失分組,減少不必要的重傳。

      • 缺點:實現更復雜,需要額外選項字段(TCP SACK)。

    • 否定確認 (Negative ACK - NAK)

      • 接收方顯式通知發送方某個特定分組丟失或損壞(較少使用)。

      • 優點:快速通知丟失。

      • 缺點:需要額外機制處理NAK丟失。

3. 重傳機制 (Retransmission)

  • 作用:在檢測到數據丟失或損壞時重新發送數據。

  • 觸發條件

    • 超時重傳 (Timeout-based)

      • 發送方為每個已發送但未確認的分組啟動一個重傳定時器 (Retransmission Timer)

      • 如果在超時時間間隔 (Timeout Interval)?內未收到該分組的ACK,則重傳該分組。

    • 快速重傳 (Fast Retransmit)

      • 發送方收到3個重復ACK (Duplicate ACKs)?時,認為該重復ACK指示的分組已丟失(即使超時未到),立即重傳該分組。

      • 顯著減少因等待超時而導致的延遲。

  • 超時時間計算

    • 基于對往返時間 (Round-Trip Time - RTT)?的估計。

    • 常用算法:EstimatedRTT = (1-α) * EstimatedRTT + α * SampleRTT?(α 常取 0.125)。

    • DevRTT?估計RTT的偏差。

    • TimeoutInterval = EstimatedRTT + 4 * DevRTT?(TCP推薦公式)。

    • 關鍵點:動態適應網絡變化,避免過早或過晚重傳。

4. 校驗和 (Checksum)

  • 作用:檢測傳輸過程中數據(頭部+載荷)是否發生比特差錯。

  • 原理

    • 發送方:計算待發送數據的校驗和,放入分組頭部。

    • 接收方:對接收到的數據(包括校驗和字段)重新計算校驗和。

    • 如果接收方計算的校驗和與頭部攜帶的校驗和不匹配(通常為0),則認為數據出錯

    • 處理:丟棄出錯分組(隱式通知丟失),等待重傳。校驗和本身無法糾正錯誤

5. 流量控制 (Flow Control)

  • 作用:防止發送方發送速率過快導致接收方緩沖區溢出

  • 原理?(TCP滑動窗口):

    • 接收方在ACK中通告其接收窗口大小 (Receive Window Size - rwnd),表示當前可用緩沖區空間。

    • 發送方維護一個發送窗口 (Send Window),其大小不超過?min(擁塞窗口cwnd, 接收窗口rwnd)

    • 發送方只能發送落在發送窗口內的數據。

    • 接收方處理數據并釋放緩沖區后,通過后續ACK更新?rwnd,允許發送方發送更多數據。

  • 關鍵點:匹配發送速率與接收方的處理能力。

協議實現的核心:滑動窗口協議 (Sliding Window Protocol)

結合了序號、確認、重傳和流量控制機制,允許多個分組在信道上“在途飛行”。

  • 發送窗口 (Send Window)

    • 包含已發送但未確認的分組 (Sent but not ACKed) 和可以立即發送的分組 (Can Send Now)。

    • 隨著收到ACK向前“滑動”。

  • 接收窗口 (Receive Window)

    • 包含期望接收的下一個序號 (Next Expected Seq#) 及之后可以按序接收的序號范圍。

    • 隨著按序交付數據向前“滑動”。

兩種主要變體

  1. 回退N步 (Go-Back-N - GBN)

    • 接收方只接受按序到達的分組,丟棄所有亂序分組。

    • 發送方收到ACK?n?表示?n?及之前所有分組都已被確認。

    • 超時或收到NAK時,重傳所有已發送但未確認的分組(從序號?n+1?開始)。

    • 優點:接收方實現簡單(只需維護?expectedseqnum)。

    • 缺點:效率低,一個分組丟失可能導致大量正確分組被重傳。

  2. 選擇重傳 (Selective Repeat - SR)

    • 接收方緩存所有正確接收但亂序的分組。

    • 發送方為每個分組維護獨立的定時器。

    • 超時或收到NAK/SACK時,只重傳特定丟失的分組。

    • 優點:效率高,只重傳丟失分組。

    • 缺點:發送方和接收方實現更復雜(需要更大的緩沖區管理亂序分組和獨立的定時器管理)。

特性Go-Back-N (GBN)Selective Repeat (SR)
接收處理只收按序,丟棄亂序緩存所有正確接收的分組 (亂序也存)
確認機制累積確認選擇確認 (SACK/NAK)
重傳觸發超時或重復ACK觸發重傳?所有?未確認分組超時或SACK/NAK觸發重傳?單個?丟失分組
發送窗口需要管理需要管理 (更復雜)
接收窗口大小為1大于1
效率較低 (一個丟包引發大量重傳)較高 (只重傳丟失包)
復雜度較低較高

(二)可靠數據傳輸協議(Rdt)演進詳解

核心目標

不可靠信道上實現無差錯、無丟失、無重復、按序交付的數據傳輸。


Rdt 1.0:理想信道模型

假設條件

  • 底層信道完全可靠(無比特差錯、無丟包)

工作機制

  1. 發送方
    • 將應用層數據打包成分組(Packet)直接發送。
  2. 接收方
    • 直接解包數據交付給應用層。

缺陷

  • 不切實際:真實網絡存在比特差錯和丟包。

Rdt 2.0:引入差錯檢測與確認機制

解決核心問題

  • 比特級差錯(如傳輸中比特翻轉)

關鍵技術

  1. 校驗和(Checksum)
    • 檢測分組內比特錯誤。
  2. 確認與重傳
    • ACK:接收方顯式確認正確接收。
    • NAK:接收方顯式報告錯誤,觸發發送方重傳。
  3. 停等協議(Stop-and-Wait)
    • 發送方每發送一個分組后等待ACK/NAK。

有限狀態機(FSM)

缺陷

  • ACK/NAK受損問題:確認信號本身可能出錯,導致發送方無法判斷接收方狀態。

Rdt 2.1:解決確認信號受損

核心改進

  1. 添加序列號(Sequence Number)

    • 使用?1-bit 序號(0 或 1)標識分組。

  2. 冗余ACK處理

    • 接收方檢測到重復分組時,重發上一次的ACK(非NAK)。

關鍵行為

  • 發送方

    • 收到受損ACK/NAK → 重傳當前分組。

    • 收到重復ACK → 忽略(已確認接收方正確接收)。

  • 接收方

    • 收到重復分組 → 丟棄并重發ACK(避免重復交付)。

優勢

  • 明確區分新分組?vs?重傳分組


Rdt 2.2:無NAK確認協議

核心改進

  • 完全取消NAK,僅使用ACK + 序號確認。

接收方行為

  • 收到正確分組時:

    • 發送?ACK + 期望的下一序號(隱式確認當前分組)。

    • 例:發送?ACK0?表示成功接收?seq=1(期望下一分組?seq=0)。

  • 收到錯誤/非期望分組時:

    • 發送?ACK + 最后一次正確接收的序號(觸發發送方重傳)。

優勢

  • 簡化協議設計,統一反饋機制。


Rdt 3.0:解決丟包與超時重傳

解決核心問題

  • 分組丟失(發送方/接收方均可能丟失分組)

  • ACK丟失

關鍵技術

  1. 倒計時定時器(Countdown Timer)

    • 發送方每發一個分組即啟動定時器。

  2. 超時重傳(Timeout Retransmission)

    • 定時器到期未收到ACK → 重傳分組。

  3. 序號機制擴展

    • 仍使用1-bit序號,但需處理延遲ACK和重復分組。

有限狀態機(FSM)關鍵流程

性能問題

  • 信道利用率低

    • 鏈路傳播延遲(RTT)期間信道空閑(停等機制限制)。

    • 公式:Utilization = (L/R) / (RTT + L/R)
      L=分組大小,?R=帶寬,?RTT=往返時延)


協議演進總結對比

版本解決的核心問題關鍵技術主要缺陷
1.0無(理想信道)直接發送不適用于真實網絡
2.0比特差錯校驗和、ACK/NAK、停等協議ACK/NAK受損問題
2.1ACK/NAK受損1-bit序號、冗余ACK處理仍依賴NAK
2.2取消NAKACK攜帶期望序號(隱式確認)未解決丟包問題
3.0分組丟失 & ACK丟失超時重傳、定時器機制信道利用率低(停等瓶頸)

后續演進方向

  • 流水線協議(Pipelining):

    • 允許連續發送多個分組(滑動窗口:GBN、SR協議)。

  • 動態調整窗口

    • TCP擁塞控制(AIMD、慢啟動、快速重傳等)。

  • 選擇重傳(SR)

    • 僅重傳丟失分組,提升效率。

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

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

相關文章

C#實現圖片縮略圖生成:多種模式詳解與實踐

C#實現圖片縮略圖生成:多種模式詳解與實踐 在圖像處理的場景中,生成圖片縮略圖是一項常見且實用的功能。無論是搭建圖片展示網站,還是開發本地圖片管理工具,按需生成合適尺寸的縮略圖,能夠有效減少圖片傳輸和顯示所需…

2025年- H57-Lc165--994.腐爛的橘子(圖論,廣搜)--Java版

1.題目描述 2.思路 3.代碼實現 import java.util.LinkedList; import java.util.Queue;public class H994 {public int orangesRotting(int[][] grid) {//1.獲取行數int rowsgrid.length;int colsgrid[0].length;//2.創建隊列用于bfsQueue<int[]> quenew LinkedList<…

005 flutter基礎,初始文件講解(4)

書接上回&#xff0c;今天繼續完成最后的講解&#xff1a; class _MyHomePageState extends State<MyHomePage> {int _counter 0;void _incrementCounter() {setState(() {_counter;});}可以看到&#xff0c;這里的_MyHomePageState是一個類&#xff0c;繼承于 State&l…

DeepSeek R1開源模型的技術突破與AI產業格局的重構

引言? 2025年&#xff0c;中國AI企業深度求索&#xff08;DeepSeek&#xff09;推出的開源模型DeepSeek-R1&#xff0c;以低成本、高性能和開放生態為核心特征&#xff0c;成為全球人工智能領域的技術焦點。這一模型不僅通過算法創新顯著降低算力依賴&#xff0c;更通過開源策…

輕量級swiper插件推薦

推薦插件列表&#xff08;按體積從小到大排序&#xff09; 1. Embla Carousel 體積&#xff1a;約 5KB (gzipped) 官網&#xff1a;A lightweight carousel library with fluid motion and great swipe precision | Embla Carousel 特點&#xff1a; 極小體積&#xff0c;高…

設計模式——訪問者設計模式(行為型)

摘要 訪問者設計模式是一種行為型設計模式&#xff0c;它將數據結構與作用于結構上的操作解耦&#xff0c;允許在不修改數據結構的前提下增加新的操作行為。該模式包含關鍵角色如元素接口、具體元素類、訪問者接口和具體訪問者類。通過訪問者模式&#xff0c;可以在不改變對象…

Vue基礎(12)_Vue.js循環語句用法:列表渲染

js補充 術語解釋 循環(loop)&#xff1a;最基礎的概念, 所有重復的行為。 遞歸(recursion)&#xff1a; 在函數內調用自身, 將復雜情況逐步轉化成基本情況。 (數學)迭代(iterate) &#xff1a;在多次循環中逐步接近結果。 (編程)迭代(iterate) &#xff1a;按順序訪問線性結構中…

Linux入門(十三)動態監控系統監控網絡狀態

top與ps 命令很相似&#xff0c;它們都是用來顯示正在執行的進程&#xff0c;top與ps大的區別是top在執行一段時間可以更新正在運行的進程。 #-d 更新秒數 如果不寫-d 那默認是3秒更新 # -i 隱藏不活躍進程 top -d 5交互操作 P 按cpu使用大小排序&#xff0c;默認此項 M 按內存…

Java 中 MySQL 索引深度解析:面試核心知識點與實戰

&#x1f91f;致敬讀者 &#x1f7e9;感謝閱讀&#x1f7e6;笑口常開&#x1f7ea;生日快樂?早點睡覺 &#x1f4d8;博主相關 &#x1f7e7;博主信息&#x1f7e8;博客首頁&#x1f7eb;專欄推薦&#x1f7e5;活動信息 文章目錄 Java 中 MySQL 索引深度解析&#xff1a;面試…

Kafka集成Flume/Spark/Flink(大數據)/SpringBoot

Kafka集成Flume Flume生產者 ③、安裝Flume&#xff0c;上傳apache-flume的壓縮包.tar.gz到Linux系統的software&#xff0c;并解壓到/opt/module目錄下&#xff0c;并修改其名稱為flume Flume消費者 Kafka集成Spark 生產者 object SparkKafkaProducer{def main(args:Array[S…

debian12.9或ubuntu,vagrant離線安裝插件vagrant-libvirt,20250601

系統盤: https://mirror.lzu.edu.cn/debian-cd/12.9.0/amd64/iso-dvd/debian-12.9.0-amd64-DVD-1.iso 需要的依賴包,無需安裝ruby( sudo apt install -y ruby-full ruby-dev rubygems,后來發現不安裝會有編譯警告,還是安裝吧 ) ,無需安裝 zlib1g-dev liblzma-dev libxml2-de…

2025年軟件測試面試八股文(含答案+文檔)

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 Part1 1、你的測試職業發展是什么&#xff1f; 測試經驗越多&#xff0c;測試能力越高。所以我的職業發展是需要時間積累的&#xff0c;一步步向著高級測試工程師…

[CSS3]響應式布局

導讀 響應式就是一套代碼, 兼容大中小不同的屏幕, 即網頁內容不變, 網頁布局隨屏幕切換而改變 媒體查詢 響應式布局的核心技術是媒體查詢 媒體查詢可以檢測屏幕尺寸, 設置差異化的css 開發中的常用寫法 使用范圍屬性, 劃定屏幕范圍 max-width 最大寬度min-width 最小寬度 …

在 Windows安裝 make 的幾種方式

在 Windows 上使用 make&#xff08;通常用于自動化構建 C/C 項目等&#xff09;有幾種方法。以下是最常見的幾種安裝和使用方法&#xff1a; 文章目錄 ? 方法一&#xff1a;使用 Chocolatey 安裝 GNU Make&#xff08;推薦&#xff09;? 方法二&#xff1a;使用 WSL&#xf…

深度學習筆記25-RNN心臟病預測(Pytorch)

&#x1f368; 本文為&#x1f517;365天深度學習訓練營中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 一、前期準備 1.數據處理 import torch.nn.functional as F import numpy as np import pandas as pd import torch from torch import nn dfpd.read_csv(r&…

Pytorch知識點2

Pytorch知識點 1、官方教程2、張量&#x1f9f1; 0、數組概念&#x1f9f1; 1. 創建張量&#x1f4d0; 2. 張量形狀與維度&#x1f522; 3. 張量數據類型? 4. 張量的數學與邏輯操作&#x1f504; 5. 張量的就地操作&#x1f4e6; 6. 復制張量&#x1f680; 7. 將張量移動到加速…

池中錦鯉的自我修養,聊聊蓄水池算法

面試如泡池&#xff0c;蓄水似人生 起初你滿懷期待跳進大廠池子&#xff0c;以為自己是天選之子&#xff0c;結果發現池子里早擠滿了和你一樣的“錦鯉候選人”。HR的漁網一撒&#xff0c;撈誰全看概率——這不就是蓄水池算法的精髓嗎&#xff1f; 初入池&#xff08;i≤k&…

Linux應用開發之網絡套接字編程

套接字&#xff08;Socket&#xff09;是計算機網絡數據通信的基本概念和編程接口&#xff0c;允許不同主機上的進程&#xff08;運行中的程序&#xff09;通過網絡進行數據交換。它為應用層軟件提供了發送和接收數據的能力&#xff0c;使得開發者可以在不用深入了解底層網絡細…

小白的進階之路系列之六----人工智能從初步到精通pytorch數據集與數據加載器

本文將介紹以下內容: 數據集與數據加載器 數據遷移 如何建立神經網絡 數據集與數據加載器 處理數據樣本的代碼可能會變得混亂且難以維護;理想情況下,我們希望我們的數據集代碼與模型訓練代碼解耦,以獲得更好的可讀性和模塊化。PyTorch提供了兩個數據原語:torch.utils…

深入理解設計模式之中介者模式

深入理解設計模式之&#xff1a;中介者模式&#xff08;Mediator Pattern&#xff09; 一、什么是中介者模式&#xff1f; 中介者模式&#xff08;Mediator Pattern&#xff09;是一種行為型設計模式。它通過引入一個中介對象&#xff0c;來封裝一組對象之間的交互&#xff0…