UDP的可靠性传输

简介: UDP的可靠性传输

UDP系列文章目录


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

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


前言


传输层协议TCP协议和UDP协议,协议的特点分析如下

TCP协议(Transmission Control Protocol,传输控制协议)为应用层提供可靠的、面向连接的和基于流(stream)的服务。使用超时重传、序

号、数据确认等方式来确保数据包被正确发送至目的地


UDP(User Datagram Protocaol 用户数据包协议) 是无连接的面向消息的数据传输协议。

缺点:

1.数据包容易丢失; 数据确认,超时重传机制;

2.数据包无序; 重排机制


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

选项 TCP UDP
是否连接 无连接 面向连接
是否可靠 不可靠传输,不使用流量控制和拥塞控制 可靠传输,使用流量控制和拥塞控制
连接对象个数 支持一对一,一对多,多对一和多对多交互通信 只能是一对一通信
传输方式 面向报文 面向字节流
首部开销 首部开销小,仅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 采用累积确认是一个很自然的选择。发送方在发完一个窗口里的所有分组后,会检查最大的有效确认,然后从最大有效确认的后一个分组开始重传。

ea72cbd69136c61d35c14a291d8bbf6b_deab9945b1624ed0838dbb35e92f097d.png

如上图所示序号为 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给发送方 。 失序的分组将被缓存 直到所有丢失的分组都被收到 这时才可以将一批分组按序交付给上层 。

bb73b8b976ece9b6f8c37afaef7c090b_202406d6a3734ef387eb10060c2e594a.png


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


常用机制如下:

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

总结


提示:这里对文章进行总结:

UDP 基础理论总结: UDP的特性; UDP如何实现可靠性传输

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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
7月前
|
缓存 网络协议 网络性能优化
UDP实现可靠传输
UDP实现可靠传输
|
3月前
|
网络协议 网络安全 Python
Python 通过UDP传输超过64k的信息
Python 通过UDP传输超过64k的信息
46 0
|
3月前
|
网络协议 网络安全 Python
Python 通过UDP传输超过64k的信息
Python 通过UDP传输超过64k的信息 原创
77 0
|
5月前
|
网络协议 网络性能优化
用udp协议传输文件
【7月更文挑战第18天】使用 UDP 协议传输文件 UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠的传输协议。尽管它不像 TCP 那样提供可靠的传输和拥塞控制,但在某些特定场景下,例如对实时性要求较高、能容忍一定数据丢失的情况,也可以用于文件传输。
|
7月前
|
缓存 网络协议 NoSQL
基于UDP的可靠性传输协议-KCP简介
基于UDP的可靠性传输协议-KCP简介
239 0
|
7月前
|
缓存 网络协议 网络性能优化
UDP的可靠传输/KCP是怎样练成的
UDP的可靠传输/KCP是怎样练成的
188 0
|
7月前
|
缓存 网络协议 算法
UDP的可靠性传输2
UDP的可靠性传输2
91 0
|
7月前
|
缓存 网络协议 算法
UDP如何实现可靠传输
UDP如何实现可靠传输
145 0
|
3天前
|
存储 网络协议 安全
用于 syslog 收集的协议:TCP、UDP、RELP
系统日志是从Linux/Unix设备及网络设备生成的日志,可通过syslog服务器集中管理。日志传输支持UDP、TCP和RELP协议。UDP无连接且不可靠,不推荐使用;TCP可靠,常用于rsyslog和syslog-ng;RELP提供可靠传输和反向确认。集中管理日志有助于故障排除和安全审计,EventLog Analyzer等工具可自动收集、解析和分析日志。
|
18天前
|
网络协议 网络性能优化 数据处理
深入解析:TCP与UDP的核心技术差异
在网络通信的世界里,TCP(传输控制协议)和UDP(用户数据报协议)是两种核心的传输层协议,它们在确保数据传输的可靠性、效率和实时性方面扮演着不同的角色。本文将深入探讨这两种协议的技术差异,并探讨它们在不同应用场景下的适用性。
54 4