【计算机网络】第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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…