当前位置: 首页 > news >正文

UDP的可靠性传输

UDP系列文章目录

第一章 UDP的可靠性传输-理论篇(一)
第二章 UDP的可靠性传输-理论篇(二)


文章目录

  • UDP系列文章目录
  • 前言
    • 1.TCP 和UDP格式对比
    • 2.UDP分片原理
    • 3.UDP 传输层应该注意问题
    • 4.MTU
    • 5.UDP 分片机制设计重点
  • 一、ARQ协议
    • 什么是滑动窗口
    • 模式
      • 1.停等式(stop and wait)
      • 2.回退 n 帧 (go back n)ARQ 1
        • 回退n帧详解
      • 3. 选择重传 (Selective repeat)
        • 选择重传详解
  • 二、网络中如何做到可靠性传输
  • 总结


前言

传输层协议TCP协议和UDP协议,协议的特点分析如下
TCP协议(Transmission Control Protocol,传输控制协议)为应用层提供可靠的、面向连接的和基于流(stream)的服务。使用超时重传、序
号、数据确认等方式来确保数据包被正确发送至目的地

UDP(User Datagram Protocaol 用户数据包协议) 是无连接的面向消息的数据传输协议。
缺点:
1.数据包容易丢失; 数据确认,超时重传机制;
2.数据包无序; 重排机制

必须制定上层协议,包括 流控机制、超时机制、重排机制、重传机制

选项TCPUDP
是否连接无连接面向连接
是否可靠不可靠传输,不使用流量控制和拥塞控制可靠传输,使用流量控制和拥塞控制
连接对象个数支持一对一,一对多,多对一和多对多交互通信只能是一对一通信
传输方式面向报文面向字节流
首部开销首部开销小,仅8 字节首部最小20 字节,最大 60 字节
适用场景适用于实时应用(IP 电话、视频会议、直播等)游戏行业、物联网行业适用于要求可靠传输的应用,例如文件传输

1.TCP 和UDP格式对比

在这里插入图片描述
网络特点: 在网络中,我们认为传输是不可靠的,而在很多场景下我们需要的是可靠的数据,
所谓的可靠,指的是数据能够正常收到,且能够顺序收到,于是就有了 ARQ 协议,TCP 之所以可靠就是基于此。

UDP 使用场景
1.传输效率: 传输实时性比较高
2. 资源考虑 消耗资源比较少 (DNS)

UDP 没有粘包的情况,UDP 用户数据报文,在收取报文的时候一次性收取一个完整的用户数据报,否则如果收取部分报文,剩下的报文就丢弃了。

2.UDP分片原理

UDP分片原理

  1. 对应用层的数据进行分片,以满足MTU传输的要求
  2. 在发送端给分片编号,在接收端重组分片,解决乱序数据包重组的问题

3.UDP 传输层应该注意问题

1.数据包确认机制; 类比TCP的ack 机制;
2.数据包重发机制; tcp 也有重传机制
3.不发送大于路径 MTU的数据包
4.处理数据包重排 IP报文传输不一定按需到达

4.MTU

MTU:以太网(Ethernet) 数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的. 这个1500字节被称为链路层的MTU(最大传输单元)。

单个UDP传输的最大内容 1472(1500-20-8, 如果有可选字节>28)字节,但由于不同的网络中转设备设置的MTU值并不相同。Internet上的标准MTU值为576字节,建议在进行Internet的UDP编程时.最好将UDP的数据长度控制在548字节(576-20-8)以内(腾讯游戏 MTU 500+)。

推荐的MTU 设计为 500+字节,应用逻辑保证数据包大小不超过 MTU,避免拆包。
局域网:1400 公网:500+(腾讯游戏推荐), 音视频: 140

5.UDP 分片机制设计重点

在这里插入图片描述
在这里插入图片描述


一、ARQ协议

ARQ协议 (Automatic Repeat reQuest )),即 自动重传请求 ,是传输层的错误纠正协议之一,它通过使用确认和超时两个机制,在不可靠的网络上实现可靠的信息传输。

什么是滑动窗口

发送方和接收方都会维护一个数据帧的序列,这个序列被称作窗口。 发送方的窗口大小由接收方确定 ,目的在于控制发送速度,以免接收方的缓存不够大,而导致溢出,同时控制流量也可以避免网络拥塞。协议中规定,对于窗口内未经确认的分组需要重传。

模式

ARQ协议 主要有 3 种模式:
1.即停等式(stop and wait)ARQ
2.回退n 帧 (go back n)ARQ
3.选择性重传(selective repeat)ARQ

1.停等式(stop and wait)

停等协议的工作原理如下:

  1. 发送方对接收方发送数据包,然后等待接收方回复 ACK 并且开始计时。
  2. 在等待过程中,发送方停止发送新的数据包。
  3. 当数据包没有成功被接收方接收,接收方不会发送 ACK. 这样发送方在等待一 定时间后,重新发送数据包。
  4. 反复以上步骤直到收到从接收方发送的 ACK.

缺点:较长的等待时间导致低的数据传输速度
在这里插入图片描述

2.回退 n 帧 (go back n)ARQ 1

为了克服停等协议长时间等待ACK 的缺陷,连续 ARQ 协议会连续发送一组数据包,然后再等待这些数据包的 ACK.

回退N 步 (Go Back N,GBN) GBN): 回退 N 步协议允许发送方在等待超时的间歇 可以继续发送分组 。 所有发送的分组 都带有序号 。 在 GBN 协议中 发送方需响应以下三种事件:

  1. 上层的调用 。 上层调用相应 send() 时 发送方首先要检查发送窗口是否已满
  2. 接收 ACK 。 在该协议中 对序号为 n 的分组的确认采取累积确认的方式 表明接收方已正确接收到序号 n 以前 包括 n) 的所有分组 。
  3. 超时 。 若出现超时 发送方将重传所有已发出但还未被确认的分组

所有分组共用一个计时器

回退n帧详解

TCP 协议栈采用此种机制

对于接收方来说,若一个序号为n 的分组被正确接收,并且按序,则接收方会为该分组返回一个 ACK 给发送方,并将该分组中的数据交付给上层。在其他情况下,接收方都会丢弃分组。若分组 n 已接收并交付,那么所有序号比 n 小的分组也已完成了交付。因此 GBN 采用累积确认是一个很自然的选择。发送方在发完一个窗口里的所有分组后,会检查最大的有效确认,然后从最大有效确认的后一个分组开始重传。
在这里插入图片描述
如上图所示序号为 2 的分组丢失 因此 分组 2 及之后的分组都将被重传
总结:
GBN 采用的技术包括序号 、 累积确认 、 检验和以及计时 重传

缺点:
1.重传的数目比较多,重传率较高;
2.受到窗口大小影响,当窗口长度很大的时候 会使效率大大降低。

3. 选择重传 (Selective repeat)

虽然GBN 改善了停等协议中时间等待较长的缺陷 但它依旧存在着性能问题 。 特别是当窗口长度很大的时候 会使效率大大降低 。 而 SR 协议通过让发送方仅重传在接收方丢失或损坏了的分组 从而避免了不必要的重传 提高了效率 。

在SR 协议下 发送方需响应以下三种事件:
1、 从上层收到数据 。 当从上层收到数据后 发送方需检查下一个可用于该分组的序号 。 若序号在窗口中则将数据发送 。
2、 接收 ACK 。 若收到 ACK 且该分组在窗口内 则发送方将那个被确认的分组标记为已接收 。 若该分组序号等于基序号 则窗口序号向前移动到具有最小序号的未确认分组处 。 若窗口移动后并且有序号落在窗口内的未发送分组 则发送这些分组 。
3、 超时 。 若出现超时 发送方将重传已发出但还未确认的分组 。 与 GBN 不同的是SR 协议中的每个分组都有 独立的计时器

选择重传详解

在SR 协议下 接收方需响应以下三种事件:(假设接收窗口的基序号为 4 分组长度也为 4)
1、 序号在 4 7 内的分组被正确接收 。 该情况下 收到的分组落在接收方的窗口内 一个 ACK将发送给发送方 。 若该分组是以前没收到的分组 则被缓存 。 若该分组的序号等于基序号 4则该分组以及以前缓存的序号连续的分组都交付给上层 然后 接收窗口将向前移动 。
2、 序号在 0 3 内的分组被正确接收 。 在该情况下 必须产生一个 ACK 尽管该分组是接收方以前已确认过的分组 。 若接收方不确认该分组 发送方窗口将不能向前移动 。
3、 其他情况 。 忽略该分组对于接收方来说若一个分组正确接收而不管其是否按序 则接收方会为该分组返回一个 ACK给发送方 。 失序的分组将被缓存 直到所有丢失的分组都被收到 这时才可以将一批分组按序交付给上层 。
在这里插入图片描述

二、网络中如何做到可靠性传输

常用机制如下:

  1. ACK机制;
  2. 重传机制,重传策略(UDP 可以定制自己的重传策略);
  3. 序号机制;
  4. 重排机制;
  5. 窗口机制;

总结

提示:这里对文章进行总结:
UDP 基础理论总结: UDP的特性; UDP如何实现可靠性传输

在这里插入图片描述

推荐一个不错的学习地址体验:体验入口

相关文章:

UDP的可靠性传输

UDP系列文章目录 第一章 UDP的可靠性传输-理论篇(一) 第二章 UDP的可靠性传输-理论篇(二) 文章目录 UDP系列文章目录前言1.TCP 和UDP格式对比2.UDP分片原理3.UDP 传输层应该注意问题4.MTU5.UDP 分片机制设计重点 一、ARQ协议什么…...

科研笔记:TPAMI submission guideline

1 author information Author Information - IEEE Transactions on Pattern Analysis and Machine Intelligence | IEEE Computer Society Digital Library 1.1 会议期刊extension 当一个TPAMI的提交基于之前的会议论文时,IEEE要求期刊论文是之前出版物的“实质…...

Python文件操作(02):打开文件、读文件、关闭文件

一、读文本文件 打开文件读文件内容关闭文件 1、在读取文件内容后进行解码操作 """ 1. 打开文件- 路径:相对路径:当前项目(读文件.py)所在的目录下查找需要读取的文件绝对路径:文件--右键--Copy Pat…...

C语言访问Mysql

文章目录 C语言访问Mysql1. 环境设置2. mysql接口介绍(1) 初始化mysql_init()(2) 链接数据库mysql_real_connect(3) 下发mysql命令mysql_query()(4) 获取执行结果mysql_store_result(5) 释放结果集mysql_free_result()(6) 获取结果行数mysql_num_rows(7) 获取结果列数mysql_num…...

软件设计师(十)网络与信息安全基础知识

计算机网络是由多台计算机组成的系统,与传统的单机系统、多机系统相比有很大的区别。 一、网络概述 计算机网络是计算机技术与通信技术相结合的产物,它实现了远程通信、远程信息处理和资源共享。 1、计算机网络的概念 计算机网络的定义是利用通信设备…...

蓝桥杯官网填空题(换零钞)

题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 X 星球的钞票的面额只有:100 元,5 元,2 元,1 元,共 4 种。 小明去 X 星旅游,他手里只有 2 张…...

JavaFX之Stage

Stage(舞台),它代表了一个顶级窗口,是JavaFX应用程序的主要容器。Stage可以包含多个场景(Scene),每个场景可以包含各种用户界面元素(如按钮、文本框等)。Stage提供了许多…...

深度翻页导出导致慢SQL,mysqlCPU飙升优化方案

慢SQL原因分析: 1.深度翻页 2.多表JOIN 3. 大IN 4. id倒排序 本文针对深度翻页的优化进行探讨 方案1: 将limit offset, pageSize的方式改成 id > xx limit pageSize. 这样能走Id索引,提高速度。 缺点:不能使用多线程…...

小谈设计模式(1)—总序

小谈设计模式(1)—总序 开始操作设计模式总论设计模式是什么组成要素模式名称问题描述解决方案效果描述 设计模式有什么作用提供可重用的解决方案提高代码的可读性和可维护性促进代码的可扩展性提高代码的灵活性和可重用性促进团队合作和沟通作用总结 为…...

【c++】stringstream基础:实现数据类型转换和字符串分割

传统实现整型转换为字符串需要使用itoa或者sprintf,对于itoa和atoi的使用可以看文章: atoi和itoa极简无废话概述 但是用这两个函数进行转换时,所需要的空间事先不确定,所以可能造成程序崩溃,今天介绍的stringstream可…...

Java基础学习笔记-5

前言 Java编程语言是一门广泛应用于软件开发领域的高级编程语言。它的强大特性和跨平台性使其成为许多开发者的首选语言。本文将介绍一些Java编程的关键概念,包括函数重载、可变参数、值传递、递归等,这些概念是Java编程的基础,对于理解和掌…...

合同交付类项目如何高效管理?

美国项目管理协会(PMI)保罗格蕾斯曾说:“当今社会,一切都是项目,一切也将成为项目。”在“万事皆项目”的背景下,企业在运营过程中会产生大量的项目型业务活动,例如:举办市场活动、产品研发、进行企业内训、采购招标、工程建设等等。那么按照…...

两性养生网站源码 生活类减肥网站源码 健康网模板源码 支持QQ登录和百度主动推送

本套模板非常适合生活类,两性类,减肥类等等类型的网站,这类型网站比较好做流量,因为客户群体众多, 可以自行改内容为其他类型网站模板总体非常简洁漂亮,配色合理,视觉舒服,并且配合…...

CentOS7安装Jenkins(更改默认运行的端口号8080->16060)

第一步: 端口号为默认8080 的安装是:Jenkins安装配置 第二步:将默认运行端口8080—>16060 首先修改配置文件 修改配置文件:vi /etc/sysconfig/jenkins修改内容:# 服务监听端口JENKINS_PORT"16060"然后…...

Java开发之Mysql【面试篇 完结版】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、知识体系二、Mysql-优化1. 优化-如何定位慢查询① 问题引入② 解决方案③ 问题总结④ 实战面试 2. 优化-sql执行很慢,如何解决① 问题引入② 解…...

【实战】十二、自动化测试 —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十九)

文章目录 一、项目起航:项目初始化与配置二、React 与 Hook 应用:实现项目列表三、TS 应用:JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…...

【人月神话】重新探索人月神话:软件工程的现实与挑战

人月神话是一篇由美国软件工程师弗雷德里克布鲁克斯所写的软件工程经典之作,最早发表于1975年。这篇文章的全名是《人月神话:软件工程的神话与现实》(The Mythical Man-Month: Essays on Software Engineering),它涵盖…...

电阻和电容

目录 1、常见的电阻器 2、电容 ​编辑 1、常见的电阻器 对于电阻需要了解三个参数(查询电阻的数据手册): 1、封装:就是电阻的尺寸或者大小,看焊在你的pcb板上是否合适。 2、标称:电阻的电阻大小、精度、…...

01-Java-日志框架

1 日志技术概述 1.1 什么是日志技术 ​ 日志技术是一种记录和存储应用程序运行时信息的技术。它可以捕获应用程序的状态、事件、错误和警告等信息,并将其保存到日志文件或其他存储介质中。日志技术可以帮助开发人员和运维团队了解应用程序的运行情况,进…...

【js】map、filter、reduce、fill(待补充...)

const arr [{ id: 1, flag: true },{ id: 2, flag: true },{ id: 3, flag: false },{ id: 4, flag: true }, ]map:返回的是对每个元素进行操作后的结果数组,这个数组的长度和原数组相同 const result arr.map((item: any) > {return item.flag fa…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...