【计算机网络】第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#
) 及之后可以按序接收的序号范围。 -
随着按序交付数据向前“滑动”。
-
两种主要变体
-
回退N步 (Go-Back-N - GBN):
-
接收方只接受按序到达的分组,丢弃所有乱序分组。
-
发送方收到ACK
n
表示n
及之前所有分组都已被确认。 -
超时或收到NAK时,重传所有已发送但未确认的分组(从序号
n+1
开始)。 -
优点:接收方实现简单(只需维护
expectedseqnum
)。 -
缺点:效率低,一个分组丢失可能导致大量正确分组被重传。
-
-
选择重传 (Selective Repeat - SR):
-
接收方缓存所有正确接收但乱序的分组。
-
发送方为每个分组维护独立的定时器。
-
超时或收到NAK/SACK时,只重传特定丢失的分组。
-
优点:效率高,只重传丢失分组。
-
缺点:发送方和接收方实现更复杂(需要更大的缓冲区管理乱序分组和独立的定时器管理)。
-
特性 | Go-Back-N (GBN) | Selective Repeat (SR) |
---|---|---|
接收处理 | 只收按序,丢弃乱序 | 缓存所有正确接收的分组 (乱序也存) |
确认机制 | 累积确认 | 选择确认 (SACK/NAK) |
重传触发 | 超时或重复ACK触发重传 所有 未确认分组 | 超时或SACK/NAK触发重传 单个 丢失分组 |
发送窗口 | 需要管理 | 需要管理 (更复杂) |
接收窗口 | 大小为1 | 大于1 |
效率 | 较低 (一个丢包引发大量重传) | 较高 (只重传丢失包) |
复杂度 | 较低 | 较高 |
(二)可靠数据传输协议(Rdt)演进详解
核心目标
在不可靠信道上实现无差错、无丢失、无重复、按序交付的数据传输。
Rdt 1.0:理想信道模型
假设条件
- 底层信道完全可靠(无比特差错、无丢包)
工作机制
- 发送方
- 将应用层数据打包成分组(Packet)直接发送。
- 接收方
- 直接解包数据交付给应用层。
缺陷
- 不切实际:真实网络存在比特差错和丢包。
Rdt 2.0:引入差错检测与确认机制
解决核心问题
- 比特级差错(如传输中比特翻转)
关键技术
- 校验和(Checksum)
- 检测分组内比特错误。
- 确认与重传
- ACK:接收方显式确认正确接收。
- NAK:接收方显式报告错误,触发发送方重传。
- 停等协议(Stop-and-Wait)
- 发送方每发送一个分组后等待ACK/NAK。
有限状态机(FSM)
缺陷
-
ACK/NAK受损问题:确认信号本身可能出错,导致发送方无法判断接收方状态。
Rdt 2.1:解决确认信号受损
核心改进
-
添加序列号(Sequence Number)
-
使用 1-bit 序号(0 或 1)标识分组。
-
-
冗余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丢失
关键技术
-
倒计时定时器(Countdown Timer)
-
发送方每发一个分组即启动定时器。
-
-
超时重传(Timeout Retransmission)
-
定时器到期未收到ACK → 重传分组。
-
-
序号机制扩展
-
仍使用1-bit序号,但需处理延迟ACK和重复分组。
-
有限状态机(FSM)关键流程
性能问题
-
信道利用率低:
-
链路传播延迟(RTT)期间信道空闲(停等机制限制)。
-
公式:
Utilization = (L/R) / (RTT + L/R)
(L
=分组大小,R
=带宽,RTT
=往返时延)
-
协议演进总结对比
版本 | 解决的核心问题 | 关键技术 | 主要缺陷 |
---|---|---|---|
1.0 | 无(理想信道) | 直接发送 | 不适用于真实网络 |
2.0 | 比特差错 | 校验和、ACK/NAK、停等协议 | ACK/NAK受损问题 |
2.1 | ACK/NAK受损 | 1-bit序号、冗余ACK处理 | 仍依赖NAK |
2.2 | 取消NAK | ACK携带期望序号(隐式确认) | 未解决丢包问题 |
3.0 | 分组丢失 & ACK丢失 | 超时重传、定时器机制 | 信道利用率低(停等瓶颈) |
后续演进方向
-
流水线协议(Pipelining):
-
允许连续发送多个分组(滑动窗口:GBN、SR协议)。
-
-
动态调整窗口:
-
TCP拥塞控制(AIMD、慢启动、快速重传等)。
-
-
选择重传(SR):
-
仅重传丢失分组,提升效率。
-
相关文章:

【计算机网络】第3章:传输层—可靠数据传输的原理
目录 一、PPT 二、总结 (一)可靠数据传输原理 关键机制 1. 序号机制 (Sequence Numbers) 2. 确认机制 (Acknowledgements - ACKs) 3. 重传机制 (Retransmission) 4. 校验和 (Checksum) 5. 流量控制 (Flow Control) 协议实现的核心:滑…...
rv1126b sdk移植
DDR rkbin bin/rv11/rv1126bp_ddr_v1.00.bin v1.00 板子2 reboot异常 [ 90.334976] reboot:Restarting system DDR 950804cb85 wesley.yao 25/04/02-15:54:40,fwver: v1.00In Derate1 tREFI1x SR93 PD13 R ddrconf 4 rgef0 rgcsb0 1 ERR: Read gate CS0 err error ERR …...
第6节 Node.js 回调函数
Node.js 异步编程的直接体现就是回调。 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数。 例如,我们可以一边读取文…...

OpenCV CUDA模块直方图计算------在 GPU上执行直方图均衡化(Histogram Equalization)函数equalizeHist
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::equalizeHist 用于增强图像的对比度,通过将图像的灰度直方图重新分布,使得图像整体对比度更加明显。 这在医学…...

构建系统maven
1 前言 说真的,我是真的不想看构建了,因为真的太多了。又多又乱。Maven、Gradle、Make、CMake、Meson、Ninja,Android BP。。。感觉学不完,根本学不完。。。 但是没办法最近又要用一下Maven,所以咬着牙再简单整理一下…...

day13 leetcode-hot100-23(链表2)
206. 反转链表 - 力扣(LeetCode) 1.迭代 思路 这个题目很简单,最主要的就是了解链表的数据结构。 链表由多个节点构成,每个节点包括值与指针,其中指针指向下一个节点(单链表)。 方法就是将指…...
Java面试八股(Java基础,Spring,SpringBoot篇)
java基础 JDK,JRE,JVMJava语言的特点Java常见的运行时异常Java为什么要封装自增自减的隐式转换移位运算符1. 左移运算符(<<)2. 带符号右移运算符(>>)3. 无符号右移运算符(>>>) 可变…...
Python编程基础(二)| 列表简介
引言:很久没有写 Python 了,有一点生疏。这是学习《Python 编程:从入门到实践(第3版)》的课后练习记录,主要目的是快速回顾基础知识。 练习1: 姓名 将一些朋友的姓名存储在一个列表中…...
支持向量机(SVM):解锁数据分类与回归的强大工具
在机器学习的世界中,支持向量机(Support Vector Machine,简称 SVM)一直以其强大的分类和回归能力而备受关注。本文将深入探讨 SVM 的核心功能,以及它如何在各种实际问题中发挥作用。 一、SVM 是什么? 支持…...

代谢组数据分析(二十五):代谢组与蛋白质组数据分析的异同
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍蛋白质组定义与基因的关系蛋白质组学(Proteomics)检测技术蛋白质的鉴定与定量分析蛋白质“鉴定”怎么做蛋白质“定量”怎么做蛋白质鉴定与定量对比应用领域代谢组定义代谢组学(M…...

002 flutter基础 初始文件讲解(1)
在学习flutter的时候,要有“万物皆widget”的思想,这样有利于你的学习,话不多说,开始今天的学习 1.创建文件 进入trae后,按住ctrlshiftP,输入Flutter:New Project,回车,…...
AI 让无人机跟踪更精准——从视觉感知到智能预测
AI 让无人机跟踪更精准——从视觉感知到智能预测 无人机跟踪技术正在经历一场前所未有的变革。曾经,我们只能依靠 GPS 或简单的视觉识别来跟踪无人机,但如今,人工智能(AI)结合深度学习和高级视觉算法,正让无人机的跟踪变得更加智能化、精准化。 尤其是在自动驾驶、安防监…...

Launcher3体系化之路
👋 欢迎来到Launcher 3 背景 车企对于桌面的排版布局好像没有手机那般复杂,但也有一定的需求。部分场景下,要考虑的上下文比手机要多一些,比如有如下的一些场景: 手车互联。HiCar,CarPlay,An…...

用wireshark抓了个TCP通讯的包
昨儿个整理了下怎么用wireshark抓包,链接在这里:捋捋wireshark 今天打算抓个TCP通讯的包试试,整体来说比较有收获,给大家汇报一下。 首先就是如何搞到可以用来演示TCP通讯的客户端、服务端,问了下deepseek,…...

VR/AR 显示瓶颈将破!铁电液晶技术迎来关键突破
在 VR/AR 设备逐渐走进大众生活的今天,显示效果却始终是制约其发展的一大痛点。纱窗效应、画面拖影、眩晕感…… 传统液晶技术的瓶颈让用户体验大打折扣。不过,随着铁电液晶技术的重大突破,这一局面有望得到彻底改变。 一、传统液晶技术瓶颈…...
【前端】Vue中实现pdf逐页转图片,图片再逐张提取文字
给定场景:后端无法实现pdf转文字,由前端实现“pdf先转图片再转文字”。 方法: 假设我们在< template>中有一个元素存放我们处理过的canvas集合 <div id"canvasIDpdfs" />我们给定一个按钮,编写click函数&…...
焦虑而烦躁的上午
半年了,每逢周末或者节假日都被催着去医院。 今天早上依旧,还在睡梦之中,就被喊醒“赶紧得,抢上儿童医院的票了!” 无奈,从床上爬起来,草草用过早餐之后,奔赴儿童医院!…...

Python使用
Python学习,从安装,到简单应用 前言 Python作为胶水语言在web开发,数据分析,网络爬虫等方向有着广泛的应用 一、Python入门 相关基础语法直接使用相关测试代码 Python编译器版本使用3以后,安装参考其他教程…...

分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类
分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类 目录 分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类分类效果功能概述程序设计参考资料 分类效果 功能概述 代码功能 该MATLAB代码实现了一个结合CNN、LSTM和注意力机制的高光谱数据分类模型,核心…...

【解决方案-RAGFlow】RAGFlow显示Task is queued、 Microsoft Visual C++ 14.0 or greater is required.
目录 一、长时间显示:Task is queued 二、GraphRAG消耗大量Token 三、error: Microsoft Visual C 14.0 or greater is required. Get it with “Microsoft C Build Tools“ 四、ModuleNotFoundError: No module named infinity.common; infinity is not a package 五…...

爬虫到智能数据分析:Bright Data × Kimi 智能洞察亚马逊电商产品销售潜力
前言 电商数据分析在现代商业中具有重要的战略价值,通过对消费者行为、销售趋势、商品价格、库存等数据的深入分析,企业能够获得对市场动态的精准洞察,优化运营决策,预测市场趋势、优化广告投放、提升供应链效率,并通…...

高级前端工程师必备的 JS 设计模式入门教程,常用设计模式案例分享
目录 高级前端工程师必备的 JS 设计模式入门教程,常用设计模式案例分享 一、什么是设计模式?为什么前端也要学? 1、设计模式是什么 2、设计模式的产出 二、设计模式在 JS 里的分类 三、常用设计模式实战讲解 1、单例模式(S…...
unix/linux source 命令,其发展历程详细时间线、由来、历史背景
追本溯源,探究技术的历史背景和发展脉络,能够帮助我们更深刻地理解其设计哲学和存在的意义。source 命令(或者说它的前身和等效形式)的历史,与 Unix Shell 本身的发展紧密相连。 让我们一起踏上这段追溯之旅,探索 source 命令的由来和发展历程。 早期 Unix Shell 与命令…...

2023年电赛C题——电感电容测量装置
一、赛题 二、题目分析——损耗角正切值 对于一个正常的正弦波信号,如果通过的是一个电阻或一条导线,那么它的电流信号和电压信号是一致的(有电压才有电流),没有相位差。 但是如果正弦波经过了一个电感或电容…...

pycharm打印时不换行,方便对比观察
原来: 优化: import torch torch.set_printoptions(linewidth200) 优化结果:...

因泰立科技:镭眸T51激光雷达,打造智能门控新生态
在高端门控行业,安全与效率是永恒的追求。如今,随着科技的飞速发展,激光雷达与TOF相机技术的融合,为门控系统带来了前所未有的智能感知能力,开启了精准守护的新时代。因泰立科技的镭眸T51激光雷达,作为这一…...

Microsoft Fabric - 尝试一下Data Factory一些新的特性(2025年5月)
1.简单介绍 Microsoft Fabric是微软提供的一个数据管理和分析的统一平台,感觉最近的新特性也挺多的。 Data Factory是Microsoft Fabric的一个功能模块,也是一个cloud service。Data Factory可以和多种数据源进行连接,同时提供了data movemen…...
NodeJS全栈开发面试题讲解——P10微服务架构(Node.js + 多服务协作)
✅ 10.1 单体架构和微服务的主要区别是什么? 维度单体架构微服务架构模块组织所有功能打包在一个代码仓库中拆分为多个独立服务部署方式部署一次包含全部逻辑各服务独立部署、独立扩缩容开发协作多人协作易冲突团队按服务划分,职责清晰可维护性功能多时…...

【前端】javascript和Vue面试八股
面试暂时没有遇到过考这么深的,一般还是问一些生命周期和性能相关。 Q:什么情况下“ a 1 && a 2 && a 3 ”同时成立 A:对象的valueOf与toString方法:当一个对象与一个原始值(如数字)进…...

WEB3——区块链留言板(留言上链),查看web3日志-入门项目推荐
区块链留言板(留言上链) 目标:构建一个用户可以“写入留言、读取历史留言”的 DApp。 内容: Solidity 编写留言合约,存储留言内容和发送者地址。 提供 API: GET /messages:获取留言列表 POST…...