【计网】SW、GBN、SR、TCP

目录

三种可靠传输机制(数据链路层)

停止-等待(Stop and Wait,SW)协议

回退N帧(Go-back-N,GBN)协议

选择重传(Selective Repeat,SR)协议

传输控制协议 (Transmission Control Protocol, TCP)


滑动窗口 (Sliding Window)

所有这些协议都基于滑动窗口机制,用于在不可靠的、但能检测错误的信道(如 IP) 上实现可靠、有序的数据传输

窗口机制的核心思想是:

  1. 发送窗口 (Sending Window): 允许发送方连续发送多个数据包(帧)而无需等待每个包的确认 (ACK)。窗口大小定义了当前可以发送的最大未确认包数。

  2. 接收窗口 (Receiving Window): 定义了接收方愿意接收并缓存的数据包范围。接收方维护一个按序接收的期望序列号。

  3. 滑动: 当发送方收到对窗口内最老(最早发送)的数据包的 ACK 时,发送窗口向前“滑动”,允许发送新的数据包。接收窗口在成功按序交付数据后也向前滑动。

特性停止等待 (SW)回退 N 帧 (GBN)选择重传 (SR)TCP (核心机制)
发送窗口大小1N (N > 1)N (N > 1)动态可变 (cwnd + rwnd)
接收窗口大小11N (N > 1)动态可变 (rwnd)
确认机制单独确认 (Individual ACK)累积确认 (Cumulative ACK)选择确认 (Selective ACK / SACK)累积确认 (ACK) + 选择确认扩展 (SACK)
重传策略仅重传超时或出错的那个包重传所有未确认的包 (从出错包开始到窗口末尾)仅重传超时或明确未收到的包超时重传 (GBN式) / 快速重传 (SR式,基于重复ACK)
接收方处理乱序包丢弃丢弃缓存 (直到可以按序交付)缓存 (直到可以按序交付)
接收方确认策略收到一个有效包,发一个ACK仅对按序到达的最高序列号包发累积ACK对任何按序或乱序但有效的包都发ACK (通常是SACK)发送期望接收序列号的累积ACK,SACK选项报告收到的乱序块
主要优点实现极其简单比SW吞吐量高,实现相对简单带宽利用率最高 (只重传丢失包),适合高误码率可靠、有序、流量控制、拥塞控制、广泛应用
主要缺点信道利用率极低 (尤其高延迟链路)乱序或丢包导致大量不必要重传 (尤其大窗口/高误码)发送方和接收方逻辑更复杂,需要更大的缓存协议复杂,实现复杂,开销相对大
适用场景理论模型,极少实际使用链路延迟低、误码率低的简单环境 (如旧式链路)链路延迟高、误码率较高的环境互联网主流传输层协议,处理各种复杂网络环境
本质滑动窗口大小为1的特例发送方滑动窗口 >1,接收方窗口=1发送方和接收方滑动窗口 >1结合了GBN(累积ACK)和SR(SACK/缓存)思想的混合协议,并加入拥塞控制

【计算机网络】第四章 数据链路层-CSDN博客

三种可靠传输机制(数据链路层)

停止-等待(Stop and Wait,SW)协议

分组重复--分组加上序号(1bit,0/1)

丢失重复的书分组,再发送一个确认ACK(补发)

回退N帧(Go-back-N,GBN)协议

发送窗口W_{T}(一口气发出的量)

𝟏< W_{T} ≤ (2^{n}−𝟏)               n比特(n> 1

W_{T}\neq 1W_{T}=1为停-等协议)

接收窗口W_{R}=1

超时重传

失序(序号不匹配)                补发ACK(上一次最后收到的正确ACK)

                                                                重复确认---重发

                                                                超时---自动重传

接收方采用累计确认ACK_{n}

选择重传(Selective Repeat,SR)协议

n个比特给分组编号(n>1)

1< W_{R}\leq W_{T} \\ W_{T}+W_{R}\leq 2^{n}

1< W_{R}=W_{T}\leq 2^{(n-1)}

传输控制协议 (Transmission Control Protocol, TCP)

【计算机网络】第七章 运输层-CSDN博客

  1. 停止等待 (Stop-and-Wait, SW):

    • 核心: 最简单的形式,发送窗口大小=1,接收窗口大小=1。

    • 过程:

      • 发送方发送一个数据包 (Seq Num = x)。

      • 等待接收方对该包 (x) 的确认 (ACK x)。

      • 收到 ACK x 后,发送下一个包 (Seq Num = x+1)。

      • 如果超时未收到 ACK x,则重发包 x。

    • 优点: 概念简单,实现容易。

    • 缺点: 信道利用率极低。发送方大部分时间在等待 ACK,尤其在链路延迟 (RTT) 大或带宽高时。公式:利用率 ≈ (Packet Size / Bandwidth) / RTT。RTT 越大,利用率越低。

    • 定位: 主要是理解可靠传输的基础概念,实际网络几乎不用。

  2. 回退 N 帧 (Go-Back-N, GBN):

    • 核心: 发送方有一个大小为 N 的发送窗口,可以连续发送最多 N 个未确认的包。接收方窗口大小固定为 1。

    • 过程:

      • 发送方连续发送窗口内的包 (Seq Num 从 base 到 base+N-1)。

      • 接收方只接收按序到达且序列号等于期望值 (next expected) 的包。

        • 如果收到期望的包 (Seq Num = next expected):交付给上层,发送一个累积 ACK (ACK next expected),该 ACK 表示所有小于 next expected 的包都已正确接收。next expected++

        • 如果收到乱序的包 (Seq Num > next expected):直接丢弃! 但仍会为最近按序接收的包发送一个重复的累积 ACK (ACK next expected - 1)。(这是触发重传的关键)。

        • 如果收到损坏的包:丢弃,不发送任何 ACK。

      • 发送方:

        • 如果收到对包 n 的累积 ACK (ACK n):这表示所有序号 <= n 的包都已被正确接收。发送窗口滑动到 n+1 (base = n+1)。

        • 如果发生超时:发送方重传所有已发送但未确认的包 (即整个发送窗口 base 到 base+N-1 的包)。

        • 如果收到重复的累积 ACK (例如连续收到 3 个相同的 ACK):在基础 GBN 中,通常只依赖超时触发重传。但在 TCP 中,重复 ACK 是触发快速重传的关键信号。

    • 优点: 比 SW 吞吐量高很多,尤其在低延迟链路中。实现比 SR 简单(接收方逻辑简单)。

    • 缺点:

      • 效率低下: 任何单个包丢失或乱序都会导致发送方重传该包及其之后窗口内所有已发送但未确认的包,即使这些包可能已经被接收方正确接收(只是由于前面的包丢失/乱序而被接收方丢弃了)。这在误码率高或窗口大时尤其浪费带宽。

      • 接收方缓存要求低: 只需要缓存一个包(等待按序交付)。

    • 定位: 比 SW 更高效,但重传策略比较“粗暴”。适合链路质量较好、延迟较低的环境。是理解累积 ACK 和窗口滑动的基础。

  3. 选择重传 (Selective Repeat, SR):

    • 核心: 发送方和接收方窗口大小都大于 1 (通常相等为 N)。 目标是只重传真正丢失或损坏的包。

    • 过程:

      • 接收方:

        • 维护一个接收窗口,缓存所有落在窗口内的、正确接收尚未按序交付给上层的包(无论是否按序到达)。

        • 当一个包按序到达 (Seq Num = next expected):

          • 交付该包给上层。

          • next expected++

          • 检查缓存中是否有连续的包可以接着交付(滑动接收窗口)。

        • 当一个包乱序但落在窗口内且正确接收:

          • 缓存该包。

          • 立即发送一个针对该特定包的 ACK (选择确认 SACK)。即使它是乱序的!

        • 发送 ACK (通常是 SACK 形式) 给任何正确接收的包(按序或乱序)。

      • 发送方:

        • 为发送窗口内的每个包维护一个独立的定时器

        • 收到一个 ACK (SACK):

          • 如果该 ACK 确认的包在发送窗口内,标记该包为已确认。

          • 如果该包是发送窗口的起始位置 (base):

            • 将窗口滑动到最小未确认序列号处 (base 移动到新的位置)。

        • 超时: 如果某个包的定时器超时,仅重传那个超时的包

        • (可选优化) 收到一定次数的重复 ACK (表明某个特定包可能丢失) 也可以触发对该包的快速重传(类似 TCP)。

    • 优点:

      • 带宽效率最高: 只重传丢失或损坏的包,避免了 GBN 的不必要重传。在高误码率或高延迟网络中优势明显。

      • 接收方缓存允许接收和处理乱序包。

    • 缺点:

      • 实现最复杂: 发送方需要为每个包管理独立定时器;接收方需要更大的缓存来存储乱序包,并管理更复杂的确认 (SACK) 逻辑。

      • 序列号空间要求: 为了避免歧义(新旧包的序列号重叠),序列号空间大小通常需要至少是窗口大小的两倍 (2N)。

    • 定位: 理论效率最高的滑动窗口协议,但实现复杂度高。是理解选择性重传和缓存的基础。许多可靠传输协议借鉴了其思想(如 TCP 的 SACK)。

  4. 传输控制协议 (TCP - Transmission Control Protocol):

    • 核心: TCP 是一个极其复杂的、面向连接的、提供可靠字节流传输服务的实际协议。它融合了 GBN 和 SR 的思想,并加入了关键的拥塞控制机制

    • 关键机制与对比:

      • 字节流 & 序列号: TCP 传输的是字节流,序列号基于字节编号。这与 SW/GBN/SR 基于“包”或“帧”的序列号不同。

      • 累积确认 (GBN 思想): TCP 接收方发送的 ACK 号是期望收到的下一个字节的序列号。这隐含地确认了所有在该序列号之前的字节都已正确按序接收。这是累积确认的核心思想(来自 GBN)。

      • 选择确认扩展 - SACK (SR 思想): 标准的 TCP ACK 是累积的。但是,TCP 有一个重要的可选扩展 SACK (Selective Acknowledgment)。启用 SACK 后,接收方可以在 ACK 包中携带额外的 SACK 选项,明确指出接收方已经收到的、但尚未按序交付的乱序数据块。这为发送方提供了 SR 式的选择确认信息。

      • 重传机制 - 混合策略:

        • 超时重传 (RTO - Retransmission Timeout): 类似于 GBN,当发送方检测到某个数据段(可以看作一个包)超时未确认时,它会重传那个最早未确认的数据段 (snd.una)。但是,TCP 的重传粒度是段,并且 RTO 是动态计算且复杂的(基于 RTT 测量)。注意: TCP 通常只重传超时的段,而不是整个窗口(这点更像 SR 的目标,但触发机制像 GBN的超时重传整个最早的未确认段)。

        • 快速重传 (Fast Retransmit - SR 思想): 这是 TCP 提高效率的关键机制。当发送方连续收到 3 个重复的 ACK (DupACK) 时(例如 ACK 50, ACK 50, ACK 50),它强烈暗示某个特定的数据段(序列号在 50 之后的某个段)可能丢失了,而后续的数据段已经到达接收方(触发了重复的累积 ACK)。发送方不等超时,立即重传这个被认为丢失的段。这直接借鉴了 SR 中“只重传丢失包”的思想,并利用重复累积 ACK 作为 SR 中 SACK 的一种替代信号。

      • 接收方缓存 (SR 思想): TCP 接收方有接收缓冲区 (rwnd),可以缓存乱序到达的正确数据段,等待前面的缺失部分到达后再按序交付给应用层。这是 SR 的核心思想。

      • 流量控制 (rwnd): 接收方通过 TCP 头部中的 rwnd (接收窗口) 字段动态告知发送方自己还有多少空闲缓冲区。发送方保证未确认数据量 (Flight Size) 不超过 min(cwnd, rwnd)。这是滑动窗口的直接应用。

      • 拥塞控制 (cwnd): TCP 最核心的创新之一。发送方维护一个拥塞窗口 (cwnd),它是对网络承载能力的估计。实际的发送窗口大小是 min(cwnd, rwnd)。TCP 通过复杂的算法(慢启动、拥塞避免、快速恢复等)动态调整 cwnd 来探测可用带宽、响应丢包(视为拥塞信号),避免压垮网络。这是 SW/GBN/SR 等理论协议完全没有考虑的关键部分,也是 TCP 能主导互联网的根本原因之一。

      • 窗口动态可变: cwnd 和 rwnd 都是动态变化的,导致 TCP 的实际发送窗口大小不断变化。这与 SW/GBN/SR 通常假设固定窗口大小不同。

    • 定位: 实际互联网的基石协议。它不是一个“纯”的 GBN 或 SR,而是取其精华(GBN 的累积确认简单性、SR 的选择性重传/缓存高效性),并加入了革命性的拥塞控制机制和面向字节流的抽象,以应对复杂多变的互联网环境。

总结:

  • SW: 基础模型,效率最低,仅用于理解概念。

  • GBN: 使用累积确认和发送窗口 >1 来提高效率,但接收窗口=1 导致乱序包被丢弃和大量不必要重传。实现相对简单。

  • SR: 使用选择确认 (SACK) 和接收缓存 (接收窗口>1) 来最大化效率(只重传丢失包),但实现最复杂。

  • TCP: 实际标准协议。核心使用累积确认 (GBN 思想) 和接收缓存 (SR 思想)。通过SACK 扩展 (SR 思想) 和快速重传机制 (基于重复ACK) 实现高效的选择性重传 (SR 思想)。其超时重传行为更接近 GBN(重传最早未确认段)。最大的创新和核心是动态的拥塞控制 (cwnd)。TCP 是一个融合了 GBN 和 SR 优点,并加入拥塞控制、流量控制、面向字节流等复杂机制的混合体,专门为应对互联网的挑战而设计。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/82570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go的隐式接口机制

正确使用Interface 不要照使用C/Java等OOP语言中接口的方式去使用interface。 Go的Interface的抽象不仅可以用于dynamic-dispatch 在工程上、它最大的作用是&#xff1a;隔离实现和抽象、实现完全的dependency inversion 以及interface segregation(SOLID principle中的I和D)。…

Async-profiler 内存采样机制解析:从原理到实现

引言 在 Java 性能调优的工具箱中&#xff0c;async-profiler 是一款备受青睐的低开销采样分析器。它不仅能分析 CPU 热点&#xff0c;还能精确追踪内存分配情况。本文将深入探讨 async-profiler 实现内存采样的多种机制&#xff0c;结合代码示例解析其工作原理。 为什么需要内…

Android 颜色百分比对照

本文就是简单写个demo,打印下颜色百分比的数值.方便以后使用. 1: 获取透明色 具体的代码如下: /*** 获取透明色* param percent* param red* param green* param blue* return*/public static int getTransparentColor(int percent, int red, int green, int blue) {int alp…

MPLS-EVPN笔记详述

目录 EVPN简介: EVPN路由: 基本四种EVPN路由 扩展: EVPN工作流程: 1.启动阶段: 2.流量转发: 路由次序整理: 总结: EVPN基本术语: EVPN表项: EVPN支持的多种服务模式: 简介: 1.Port Based: 简介: 配置实现: 2.VLAN Based: 简介: 配置实现: 3.VLAN Bundle: 简…

SpringBoot自定义线程池详细教程

文章目录 1. 线程池基础概念1.1 什么是线程池1.2 Java线程池核心参数1.3 线程池执行流程 2. SpringBoot中的线程池2.1 SpringBoot默认线程池2.2 SpringBoot异步任务基础 3. 自定义线程池配置3.1 配置文件方式3.2 Java配置方式3.3 线程池工厂配置 4. 异步任务实际应用4.1 业务服…

智能快递地址解析接口如何用PHP调用?

一、什么是智能快递地址解析接口 随着互联网技术的普及和电子商务的迅猛发展&#xff0c;网购已成为现代人日常生活的重要组成部分。然而&#xff0c;在这个便捷的背后&#xff0c;一个看似不起眼却影响深远的问题正悄然浮现——用户填写的快递地址格式混乱、信息不全甚至错漏…

概率分布,支撑AI算法的数学基石

概率分布,是现代人工智能(AI)算法不可或缺的数学语言。它不仅描述了数据中的不确定性,更揭示了机器学习模型背后的本质运作机制。本文将带你深入了解概率分布的数学本质,以及它在监督学习、深度学习、生成模型等核心AI领域的关键作用,揭秘概率论如何成为AI理论和实践的强…

2025年Splunk的替代方案:更智能的安全选择

在安全信息和事件管理&#xff08;SIEM&#xff09;领域&#xff0c;2025年的竞争愈发激烈。Splunk凭借其强大的功能和稳定性长期占据市场主导地位&#xff0c;但其高昂的成本、复杂性和扩展性挑战促使许多企业转向其他解决方案。无论是初创公司、快速发展的中型企业&#xff0…

(10)Fiddler抓包-Fiddler如何设置捕获Firefox浏览器的Https会话

1.简介 经过上一篇对Fiddler的配置后&#xff0c;绝大多数的Https的会话&#xff0c;我们可以成功捕获抓取到&#xff0c;但是有些版本的Firefox浏览器仍然是捕获不到其的Https会话&#xff0c;需要我们更进一步的配置才能捕获到会话进行抓包。 2.环境 1.环境是Windows 10版…

simulink mask的使用技巧

1.mask界面布局 1.1如何调整控件的位置和控件大小&#xff1f; 反正2020a是调不了&#xff0c; 找了好久&#xff0c;只能是调布局&#xff0c;例如你要调成下面这样&#xff1a; 第一个控件的iTem location属性选择New row 后面跟着的几个和第一个同一行的空间属性选择Cu…

Go中MAP底层原理分析

MAP底层原理分析 参考 https://golang.design/go-questions/map/principalmap | Golang 中文学习文档 先来看一下map结构体&#xff0c;&#xff08;runtime.hmap结构体就是代表着 go 中的map&#xff0c;与切片一样map的内部实现也是结构体&#xff09; type hmap struct {/…

#开发环境篇:postMan可以正常调通,但是浏览器里面一直报403

本地header代理下面内容即可 headers: { // 添加必要的请求头 ‘Host’: ‘服务端域名’, ‘Origin’: https://服务端域名, ‘Referer’: https://服务端域名 }, devServer: {// 本地开发代理API地址proxy: {^/file: {target: https://服务端域名,changeOrigin: true, // 是否…

【论文阅读 | PR 2024 |ICAFusion:迭代交叉注意力引导的多光谱目标检测特征融合】

论文阅读 | PR 2024 |ICAFusion&#xff1a;迭代交叉注意力引导的多光谱目标检测特征融合 1.摘要&&引言2.方法2.1 架构2.2 双模态特征融合&#xff08;DMFF&#xff09;2.2.1 跨模态特征增强&#xff08;CFE&#xff09;2.2.2 空间特征压缩&#xff08;SFS&#xff09;…

效率、便捷、安全:智慧充电桩一站式解决方案如何重塑新能源充电体验?

在新能源浪潮席卷全球的背景下&#xff0c;电动汽车的普及对充电基础设施提出了更高要求。传统充电模式因效率低、操作繁琐、安全隐患等问题&#xff0c;难以满足用户需求。智慧充电桩一站式解决方案应运而生&#xff0c;通过技术创新将效率、便捷与安全融为一体&#xff0c;彻…

杰发科技AC7840——Timer修改重装载值

需要在运行过程中修改定时器的中断时间 int main(void) {SystemClock_Config(); /*时钟初始化*/GPIO_LedInit(); /*GPIO初始化*/TIMER_Init(); /*定时器初始化*/InitDebug(); …

https和http有什么区别-http各个版本有什么区别

http和 https的区别 HTTP&#xff08;超文本传输协议&#xff09;和 HTTPS&#xff08;安全超文本传输协议&#xff09;是两种用于在网络上传输数据的协议&#xff0c;它们的主要区别在于安全性&#xff1a; HTTP&#xff08;Hypertext Transfer Protocol&#xff09;&#x…

低秩矩阵、奇异值矩阵和正交矩阵

低秩矩阵 低秩矩阵&#xff08;Low-rank Matrix&#xff09;是指秩&#xff08;rank&#xff09;远小于其行数和列数的矩阵&#xff0c;即 r a n k ( M ) r ≪ min ⁡ ( m , n ) rank(M) r \ll \min(m,n) rank(M)r≪min(m,n)。其核心特点是信息冗余性&#xff0c;可通过少量…

对抗性提示:大型语言模型的安全性测试

随着大语言模型&#xff08;LLM&#xff09;在虚拟助手、企业平台等现实场景中的深度应用&#xff0c;其智能化与响应速度不断提升。然而能力增长的同时&#xff0c;风险也在加剧。对抗性提示已成为AI安全领域的核心挑战&#xff0c;它揭示了即使最先进的模型也可能被操纵生成有…

SSM 框架核心知识详解(Spring + SpringMVC + MyBatis)

&#x1f331; 第一部分&#xff1a;Spring 核心原理与使用 1. 什么是 Spring Spring 是一个开源的 Java 企业级开发框架&#xff0c;旨在简化 Java 企业应用程序开发。它核心思想是控制反转&#xff08;IoC&#xff09;和面向切面编程&#xff08;AOP&#xff09;&#xff0…

基于 Alpine 定制单功能用途(kiosk)电脑

前言 故事回到 7 年前, 在网上冲浪的时候发现了一篇介绍使用 Ubuntu 打造 kiosk 单功能用途电脑的文章, 挺好玩的, 就翻译了一下并比葫芦画瓢先后用了 CentOS 7, ArchLinux 进行了实现. 历史文章: 翻译 - 使用Ubutnu14.04和Chrome打造单功能用途电脑(大屏展示电脑) 使用CentOS…