UDP的可靠性传输

news2024/11/27 6:28:57

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如何实现可靠性传输

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

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

相关文章

华为OD机考算法题:食堂供餐

目录 题目部分 解析与思路 代码实现 题目部分 题目食堂供餐题目说明某公司员工食堂以盒饭方式供餐。为将员工取餐排队时间降低为0,食堂的供餐速度必须要足够快。现在需要根据以往员工取餐的统计信息,计算出一个刚好能达成排队时间为0的最低供餐速度。…

PPO算法

PPO算法 全称Proximal Policy Optimization,是TRPO(Trust Region Policy Optimization)算法的继承与简化,大大降低了实现难度。原论文 算法大致流程 首先,使用已有的策略采样 N N N条轨迹,使用这些轨迹上的数据估计优势函数 A ^ …

算法做题记录

一、递推 95.费解的开关 #include<iostream> #include<cstring> using namespace std;const int N 8;char a[N][N],s[N][N]; int T; int ans20,cnt; int dir[5][2]{1,0,-1,0,0,1,0,-1,0,0};void turn(int x,int y) {for(int i0;i<5;i){int xx xdir[i][0];in…

数学建模--Topsis评价方法的Python实现

目录 1.算法流程简介 2.算法核心代码 3.算法效果展示 1.算法流程简介 """ TOPSIS(综合评价方法):主要是根据根据各测评对象与理想目标的接近程度进行排序. 然后在现有研究对象中进行相对优劣评价。 其基本原理就是求解计算各评价对象与最优解和最劣解的距离…

文字验证码:简单有效的账号安全守卫!

前言 文字验证码不仅是一种简单易懂的验证方式&#xff0c;同时也是保护您的账号安全的重要工具。通过输入正确的文字组合&#xff0c;您可以有效地确认自己的身份&#xff0c;确保只有真正的用户才能访问您的账号。 HTML代码 <script src"https://cdn6.kgcaptcha.…

rust编译出错:error: failed to run custom build command for `ring v0.16.20`

安装 Visual Studio&#xff0c;确保选择 —.NET 桌面开发、使用 C 的桌面开发和通用 Windows 平台开发。显示已安装的工具链rustup show。然后通过运行更改和设置工具链rustup default stable-x86_64-pc-windows-msvc。 另外是想用clion进行调试rust 需要你按下面配置即可解…

【Spring MVC】统一功能处理

一、登录验证 登录验证通过拦截器实现&#xff0c;拦截器就是在用户访问服务器时&#xff0c;预先拦截检查一下用户的访问请求。 没有拦截器时&#xff0c;用户访问服务器的流程是&#xff1a;用户–>controller–>service–>Mapper。有拦截器时&#xff0c;用户访问…

自旋锁和读写锁

目录 一、自旋锁 1.自旋锁和挂起等待锁 2.自旋锁的接口 二、读写锁 1.读者写者模型与读写锁 2.读写锁接口 3.加锁的原理 4.读写优先级 一、自旋锁 1.自旋锁和挂起等待锁 互斥锁的类型有很多&#xff0c;我们之前使用的锁实际上是互斥锁中的挂起等待锁。互斥锁比较有代…

JMeter(三十九):selenium怪异的UI自动化测试组合

文章目录 一、背景二、JMeter+selenium使用过程三、总结一、背景 题主多年前在某社区看到有人使用jmeter+selenium做UI自动化测试的时候,感觉很是诧异、怪异,为啥?众所周知在python/java+selenium+testng/pytest这样的组合框架下,为啥要选择jmeter这个东西[本身定位是接口测…

基于微信小程序的智能垃圾分类回收系统,附源码、教程

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 1 简介 视频演示地址&#xff1a; 基于微信小程序的智能垃圾分类回收系统&#xff0c;可作为毕业设计 小…

《C++ Primer》第2章 变量(一)

参考资料&#xff1a; 《C Primer》第5版《C Primer 习题集》第5版 2.1 基本内置类型&#xff08;P30&#xff09; C 定义的基本类型包括算术类型&#xff08;arithmetic type&#xff09;和空类型&#xff08;void&#xff09;&#xff0c;其中算术类型包括字符、整型、布尔…

postgresql-类型转换函数

postgresql-类型转换函数 简介CAST 函数to_date函数to_timestampto_charto_number隐式类型转换 简介 类型转换函数用于将数据从一种类型转换为另一种类型。 CAST 函数 CAST ( expr AS data_type )函数用于将 expr 转换为 data_type 数据类型&#xff1b;PostgreSQL 类型转 换…

《86盒应用于家居中控》——实现智能家居的灵动掌控

近年来&#xff0c;智能家居产品受到越来越多消费者的关注&#xff0c;其便捷、舒适的生活方式让人们对未来生活充满期待。作为智能家居方案领域的方案商&#xff0c;启明智显生产设计的86盒凭借出色的性能和良好的用户体验&#xff0c;成功应用于家居中控系统&#xff0c;让家…

Gof23设计模式之策略模式

1.概述 该模式定义了一系列算法&#xff0c;并将每个算法封装起来&#xff0c;使它们可以相互替换&#xff0c;且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式&#xff0c;它通过对算法进行封装&#xff0c;把使用算法的责任和算法的实现分割开来&#xff0c;…

剑指 Offer 43. 1~n 整数中 1 出现的次数(困难)

题目&#xff1a; class Solution { public:int countDigitOne(int n) {// mulk 表示 10^k// 在下面的代码中&#xff0c;可以发现 k 并没有被直接使用到&#xff08;都是使用 10^k&#xff09;// 但为了让代码看起来更加直观&#xff0c;这里保留了 klong long mulk 1;int…

Text Workflow for Mac,简单易用的文本转换工具

如果你需要一个能够将文本转换成多种语言和文件格式的工具&#xff0c;那么Text Workflow for Mac将是你的不二之选。 这个软件支持多种语言翻译和多种文件格式转换&#xff0c;让你可以轻松地将文本转换成你需要的形式。而且&#xff0c;它的操作非常简单&#xff0c;只需要几…

精讲算法的时间复杂度

目录 一、算法效率 1.算法效率 1.1如何衡量一个算法的好坏 1.2算法的复杂度 二、时间复杂度 1.时间复杂度的概念 2.大O的渐进表示法 3.常见时间复杂度的计算举例 三、空间复杂度 一、算法效率 1.算法效率 1.1如何衡量一个算法的好坏 long long Fib(int N) {if(N <…

Day6:浅谈useState

「目标」: 持续输出&#xff01;每日分享关于web前端常见知识、面试题、性能优化、新技术等方面的内容。 Day6-今日话题 谈谈react hooks中的useState &#xff0c;将从以下七个角度介绍&#xff1a; 用法 参数 返回值 作用 工作原理 优缺点 注意点 用法 useState 是一个函数&a…

Hugging News #0904: 登陆 AWS Marketplace

每一周&#xff0c;我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新&#xff0c;包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等&#xff0c;我们将其称之为「Hugging News」。本期 Hugging News 有哪些有趣的消息&#xff0…

VMware虚拟机安装CentOS7设置静态ip

vim /etc/sysconfig/network-scripts/ifcfg-ens33修改BOOTPROTO的值为static 增加最后那四项&#xff0c;参数在编辑&#xff0c;虚拟网络编辑器里面看