gbn,sr和tcp的区别
这是关于三种不同协议(GBN、SR、TCP)处理传输时序和丢包的行为比较。我们可以分别填充并解释它们的处理机制:
GBN(Go-Back-N)协议:
类型 | 发送方的计时器保存的是啥 | 接收方收到失序的分组怎么办 | 超时的时候发送的超时的那个分组还是已经发送但是没有收到确认的分组 |
---|---|---|---|
GBN | 发送窗口中最早未被确认的分组 | 丢弃失序的分组,继续等待期望的分组 | 重发所有从超时分组开始的分组(包括超时的分组) |
解释:
- 计时器保存的内容:在GBN中,发送方使用单个计时器来监控发送窗口中最早的未被确认的分组。如果该计时器超时,发送方将重发从该分组开始的所有分组。
- 接收方处理失序分组:GBN的接收方只会接受按顺序到达的分组,对于失序到达的分组将直接丢弃,不会缓存。
- 超时处理:当发送方的计时器超时时,发送方会重发从超时的那个分组开始的所有分组,即便有些分组已经成功到达接收方但未确认。
SR(Selective Repeat)协议:
类型 | 发送方的计时器保存的是啥 | 接收方收到失序的分组怎么办 | 超时的时候发送的超时的那个分组还是已经发送但是没有收到确认的分组 |
---|---|---|---|
SR | 每个未确认的分组都有一个独立的计时器 | 缓存失序的分组,等待缺失分组到达后进行处理 | 只重发超时的那个分组 |
解释:
- 计时器保存的内容:在SR中,每个未被确认的分组都有一个独立的计时器,因此每个分组可以独立超时和重传。
- 接收方处理失序分组:SR的接收方会缓存失序到达的分组,不会丢弃。当接收方收到期望的分组后,它会按照顺序交付缓存的分组。
- 超时处理:如果某个分组超时,发送方只会重发这个超时的分组,而不会重发其他已经发送的分组。
TCP(Transmission Control Protocol):
类型 | 发送方的计时器保存的是啥 | 接收方收到失序的分组怎么办 | 超时的时候发送的超时的那个分组还是已经发送但是没有收到确认的分组 |
---|---|---|---|
TCP | 发送窗口中最早未被确认的字节(而非分组) | 丢弃 或者 缓存失序的分组,等待期望的分组后再按序交付 | 重发从超时的字节开始的段,具体根据不同的拥塞控制算法决定重发策略 |
解释:
- 计时器保存的内容:TCP使用字节流控制而不是基于分组,计时器通常用于监控发送窗口中最早未被确认的字节。
- 接收方处理失序分组:TCP接收方会缓存失序到达的分组,等待期望的字节块到达后再按顺序交付数据。
- 超时处理:TCP的超时重传机制依赖于拥塞控制算法。如果一个分组(段)超时,TCP将重传从超时的字节开始的段,根据算法(如快速重传、慢启动等)决定具体的重传范围。
这样填充和解释的表格有助于理解不同协议在数据传输中的错误处理和重传机制。
不同协议对发送窗口和接收窗口的大小有不同的规定,下面我们详细讨论 GBN、SR(Selective Repeat) 和 TCP 协议中窗口的管理。
1. GBN(Go-Back-N)协议:
- 发送窗口:大小为 ( 2 n − 1 ) (2^n - 1) (2n−1),即最多可以有 ( 2 n − 1 ) (2^n - 1) (2n−1)个未被确认的分组在网络中传输。这里 (n) 是用于序列号的比特数。例如,如果 (n = 3),那么发送窗口的大小最大为 7。
- 接收窗口:固定为1。也就是说,接收方只能按顺序接收分组,无法接受和缓存失序的分组。如果接收到一个失序的分组,接收方会丢弃该分组并发回最后正确接收的分组的ACK。
2. SR(Selective Repeat)协议:
- 发送窗口:大小为 (W \leq 2^{n-1})。SR协议的发送窗口的最大值为 (2^{n-1}),与GBN相比略小一半。原因是SR需要在接收方缓存失序的分组,因此为了确保序列号不会出现混淆,发送窗口最大为 (2^{n-1})。如果窗口太大,接收方可能无法区分一个分组是重传的旧分组还是新的分组。
- 接收窗口:接收窗口的大小等于发送窗口的大小,也就是 (W \leq 2^{n-1})。在SR协议中,接收方可以缓存失序的分组,因此它可以同时处理多个未按顺序到达的分组。接收方在收到某个丢失的分组后,会根据顺序依次交付缓存的分组。
3. TCP(Transmission Control Protocol):
-
发送窗口:TCP中的发送窗口大小是动态调整的,取决于接收方的接收能力和网络的拥塞状况。TCP使用两个机制来调整发送窗口:
- 接收方的接收窗口(Receive Window, rwnd):这是接收方通告给发送方的可用缓冲区大小,限制了发送方最多可以发送多少未被确认的数据。
- 拥塞窗口(Congestion Window, cwnd):这是根据网络拥塞状况动态调整的一个窗口,发送方基于这个窗口控制发送速率,避免网络过载。
TCP的发送窗口为接收窗口和拥塞窗口中的较小值:
发送窗口 = min(rwnd, cwnd)
。因此,TCP的发送窗口可以根据网络状况和接收方的反馈实时变化。 -
接收窗口:TCP的接收窗口同样是动态的,由接收方根据自身的缓冲区容量来通告。接收窗口的大小(rwnd)决定了接收方能够同时处理的未确认数据量,确保发送方不会发送超过接收方缓冲区容量的数据。
4. 总结对比:
协议类型 | 发送窗口大小 | 接收窗口大小 |
---|---|---|
GBN | 2 n − 1 2^n - 1 2n−1 | 固定为 1 |
SR | 2 n − 1 2^{n-1} 2n−1 | 2 n − 1 2^{n-1} 2n−1,与发送窗口相同 |
TCP | 动态调整: m i n ( r w n d , c w n d ) min(rwnd, cwnd) min(rwnd,cwnd) | 动态调整,取决于接收方缓冲区容量(rwnd) |
补充:
- GBN 和 SR 都基于序列号的位数 (n) 来确定窗口大小,GBN最大窗口是 2 n − 1 2^n - 1 2n−1,而SR由于需要处理失序分组,窗口大小限制为 2 n − 1 2^{n-1} 2n−1。
- TCP 不使用固定的窗口大小,窗口根据网络拥塞状况和接收方的能力动态变化,因此更加灵活,适合互联网等复杂的网络环境。
相关文章:
gbn,sr和tcp的区别
这是关于三种不同协议(GBN、SR、TCP)处理传输时序和丢包的行为比较。我们可以分别填充并解释它们的处理机制: GBN(Go-Back-N)协议: 类型发送方的计时器保存的是啥接收方收到失序的分组怎么办超时的时候发…...

FastGPT本地开发 之 通过Navicat管理MongoDB、PostgreSQL数据库
1. 背景 前期已经完成FastGPT的本地化部署工作,通过Docker启动FastGPT的相关容器即可运行。(共6个容器) 2.本地化开发 2.1 前置依赖 2.2 源码拉取 git clone gitgithub.com:labring/FastGPT.git2.3 数据库管理 本地化运行的FastGPT使用…...
hardhat部署智能合约
Hardhat安装 安装node 可以使用 nvm 安装node GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions 安装Hardhat 打开命令行工具,输入: mkdir hardhat-demo cd hardhat-demo npm i…...

界面控件DevExtreme中文教程 - 如何与Amazon S3和Azure Blob存储集成?
DevExtreme拥有高性能的HTML5 / JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NET Core,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac,…...
【ERROR】ubuntu source: not found
Ubuntu 24.04.1 LTS系统设置环境变量,执行 source ~/.bashrc出现错误: source command not found 解决方案:不需要处理( echo 以下你的环境变量,发现是生效的),ubantu系统 中 /bin/sh 通常链接到 dash,这…...

聚焦IOC容器刷新环节postProcessBeanFactory(BeanFactory后置处理)专项
目录 一、IOC容器的刷新环节快速回顾 二、postProcessBeanFactory源码展示分析 (一)模版方法postProcessBeanFactory (二)AnnotationConfigServletWebServerApplicationContext 调用父类的 postProcessBeanFactory 包扫描 …...

配置nginx服务通过ip访问多网站
过程概要 1.前提配置 关防火墙 关selinux 2.安装web服务程序nginx 3.查看nginx是否开启 4.为当前主机添加多地址(ip a) 5.自定义nginx配置文件通过多地址区分多网站 /etc/nginx/conf.d/test_ip.conf server { #标记为一个虚拟主机 } 6.根据配置…...

银河麒麟V10设置QT开发程序开机自启动
1、切换root用户: su root 2、进入/etc/xdg/autostart目录: cd /etc/xdg/autostart 3、创建一个test.desktop文件,文件名不一定命名为test,可以自己随意命名: touch test.desktop 4、完善test.desktop文件内容: …...
RabbitMQ高级特性详解
前言 RabbitMQ是一款广泛使用的开源消息队列软件,它基于AMQP(Advanced Message Queuing Protocol)标准实现。本文将带你深入了解RabbitMQ的一些高级特性,包括消息确认、死信队列、延迟队列、事务处理以及消息分发策略等ÿ…...
提升泛化能力的前沿方法:多任务学习在机器学习中的应用与实践
提升泛化能力的前沿方法:多任务学习在机器学习中的应用与实践 📋 目录 🧩 多任务学习的概念与动机🌐 多任务学习在自然语言处理中的应用案例🖼️ 多任务学习在计算机视觉中的应用案例⚙️ 项目实践:实现多…...
【小白学机器学习16】 概率论的世界观2
目录 一 从正态分布说起 1.1 正态分布是自然分布,是客观 1.2 万物不齐 1.3 中庸 1.4 动态平衡 正态分布,概率论都是一种世界观 一 从正态分布说起 1.1 正态分布是自然分布,是客观 世界是客观的,是不以人们的意志想法为转…...
洛谷 P9868 [NOIP2023] 词典
好久不写博客了,今天来水一篇 原题链接 初看此题在洛谷上的定位是黄题,实际上也并不是很简单。 其实主要就用到了贪心的思想,先说一下我在做题的时候是怎么想的吧。 先看了部分分,10分是很好拿的,再就分析题意&…...

跨浏览器免费书签管理系统
随着互联网信息的爆炸式增长,如何有效管理我们日常浏览中发现的重要网页,成为了每个重度互联网用户的需求。一个跨平台的书签管理网站能够帮助用户在不同设备之间无缝同步和管理书签。本文将分享如何使用 Python 和 SQLite 构建一个简单、易于维护的跨平…...
导出Excel的常用方法:从前端到后端的全面指南
导出Excel的常用方法:从前端到后端的全面指南 在现代Web应用中,导出数据为Excel文件是一个常见需求。无论是为了数据分析、记录保存还是简单的数据共享,Excel文件都因其广泛的兼容性和易用性而成为首选格式之一。本文将介绍几种常用的Excel导…...

uni-app中添加自定义相机(微信小程序+app)
一、微信小程序中 微信小程序中可以直接使用camera标签,这个标签不兼容app,官方文档 <cameradevice-position"back"flash"off":style"{ height: lheight px, width: lwidth px }"class"w-full"></c…...
Android中的SSL/TLS加密及其作用
Android中的SSL/TLS加密及其作用 SSL/TLS(Secure Sockets Layer/Transport Layer Security)加密技术是保护网络通信安全的关键技术之一,广泛应用于各种网络通信场景,包括Android应用开发。在Android中,SSL/TLS加密技术…...
东芝TLP176AM光耦合器:提升设计性能的关键元件
在当今快速发展的电子领域,精确性、可靠性和效率比以往任何时候都更加重要。作为工程师,我们不断寻找不仅能满足严格技术要求,还能提升整体设计性能的元件。其中,东芝的TLP176AM光耦合器正因其卓越的性能在业界备受关注。 什么是…...

MySQL数据库:基础介绍下载与安装
数据库基础知识先谈发音MySQL如何发音?在国内MySQL发音有很多种,Oracle官方文档说他们念作My sequal[si:kwəl]。 数据库基本概念 1。数据数据(Data)是指对客观事物进行描述并可以鉴别的符号,这些符号是可识别的、抽…...
原理代码解读:基于DiT结构视频生成模型的ControlNet
Diffusion Models视频生成-博客汇总 前言:相比于基于UNet结构的视频生成模型,DiT结构的模型最大的劣势在于生态不够完善,配套的ControlNet、IP-Adapter等开源权重不多,导致难以落地。最近DiT-based 5B的ControlNet开源了,相比于传统的ControlNet有不少改进点,这篇博客将从…...
【Pip】初识 Pip:Python 包管理的基本命令详解
目录 引言1. 什么是 pip?1.1 pip 的安装 2. pip 的基本命令2.1 pip install2.2 pip uninstall2.3 pip list2.4 pip show2.5 pip freeze2.6 pip search2.7 pip install -U2.8 pip install -r2.9 pip check2.10 pip cache 3. 使用示例3.1 安装多个包3.2 创建虚拟环境3…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...
机器学习的数学基础:线性模型
线性模型 线性模型的基本形式为: f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法,得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...
Java并发编程实战 Day 11:并发设计模式
【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天,今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案,它们不仅提供了优雅的设计思路,还能显著提升系统的性能…...