UDP可靠性设计

简介: UDP可靠性设计

UDP使用场景:

UDP三种性质:

1.尽力可靠:发送方和接收方的数据尽量到达(中间丢一些包不影响)   --->微信音视频通话

2.无序可靠:迅雷下载,整个文件是做了分片  --->(保证数据完整性)

3.有序可靠:(银行转账)  数据需要先转出去---才可以转给别人。

1音视频通话(udp)  接收端需要缓存(可能出现延时) 目的是对包进行排序,解决传输乱序的问题。

2游戏开发 : 棋牌游戏没必要用udp ,  王者荣耀(即使战略游戏)

3物联网: 桥梁传感器 (使用电池)十秒检测一下桥梁状态然后上报,接着休眠

4服务器状态集中监测: 手机状态集中监测,做服务器检测(100万台) udp比较省电

udp总结:           (能够使用tcp解决的场景尽量不要挑战udp,udp真的不好用

1.实时性要求  

2.节约资源。(省电)

TCP                                                 UDP                      (user自己写的协议)可靠性UDP

应答机制                                         没有                                 (user层)   应答机制

包带序号                                         没有                            (user层) 设计协议,加上序号

拥塞控制                                         没有                              1.定义窗口,设计拥塞控制

                                                                                           2.发送包的时候有间隔

send,recv                              sendto ,recvfrom  

send(10k)  ---> recv(500)        sendto(30k)(不可以,必须分片) recvfrom(500)

UDP传输原理

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

UDP分片原理

UDP和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+)。

真的是1472或者576吗?     (<=1472 , ip头是至少20字节不是至多,运营商也会在前面加PPPOE的协议   , 在发送的时候推荐用1400 )

IP协议+PPPOE协议

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

TCP是流式传输,一次收多少都是可以的,大不了多收几次。更多次数的内核态和用户态的切换。

UDP是报文传输,recvfrom每次都是需要接收一个完整的报文,如果不接收完,剩余部分就会被丢掉。(报文都是放到一个链表里面一个一个取出来的,下一次取的就是下一个报文了)

TCP send(1000) --------------------> recv(1000) 不一定收1000  可能会分片

UDP sendto(1000) --------------------> recvfrom(1000) 也不一定收1000  有可能会丢包

UDP分片机制设计的重点

                                               要传输的一段数据

UDP分片机制设计的重点

1. 分片最大长度的确定

2. 分片帧头的设计 ◼ 同步字 ◼ 所有分片数据的总大小 ◼ 分片数量 ◼ 分片编号 ◼ 当前分片数据的大小

3. 重组异常的处理

目录
相关文章
|
Rust JavaScript 前端开发
【Rust 实战】Rust 与 Wasm
【Rust 实战】Rust 与 Wasm
2668 0
【Rust 实战】Rust 与 Wasm
|
12月前
|
XML Java Kotlin
springboot + minio + kkfile实现文件预览
本文介绍了如何在容器中安装和启动kkfileviewer,并通过Spring Boot集成MinIO实现文件上传与预览功能。首先,通过下载kkfileviewer源码并构建Docker镜像来部署文件预览服务。接着,在Spring Boot项目中添加MinIO依赖,配置MinIO客户端,并实现文件上传与获取预览链接的接口。最后,通过测试验证文件上传和预览功能的正确性。
1040 4
springboot + minio + kkfile实现文件预览
|
安全 网络协议 NoSQL
Python GUI编程的两种选择:Tkinter与PyQt
Python作为一门流行的编程语言,其GUI编程也备受关注。在GUI编程中,Tkinter和PyQt是两种常见的选择。本文将从简介、使用、优缺点等多个方面对比这两种框架,以帮助读者选择适合自己的工具。
|
编解码 定位技术
航摄比例尺、成图比例尺、地面分辨率与航摄设计用图比例尺
航摄比例尺、成图比例尺、地面分辨率与航摄设计用图比例尺
698 0
|
Java API Maven
第三方支付API支付宝支付申请流程 支付宝新老版本
第三方支付API支付宝支付申请流程 支付宝新老版本
422 0
|
XML vr&ar Android开发
【Android App】实战项目之虚拟现实(VR)的全景相册(附源码和演示视频 可用于学习和大作业)
【Android App】实战项目之虚拟现实(VR)的全景相册(附源码和演示视频 可用于学习和大作业)
625 2
|
前端开发 关系型数据库 MySQL
Windows 安装 MySQL 8.1 (图文教程)
Windows 安装 MySQL 8.1 (图文教程)
|
存储 关系型数据库 MySQL
存储成本最高降至原来的5%,PolarDB分布式冷数据归档的业务实践
国内某家兼具投资理财、文化旅游、票务为一体的大型综合型集团公司,2015年成立至今,由于业务高速发展,业务数据增长非常快,数据库系统屡次不堪重负。该公司数据库运维总监介绍,他们目前业务压力比较大的是票务和订单系统,他们的平台每天新增几千万的订单数据,订单的数据来自于各个终端,近几年每个月以300G的数据规模在高速增长,由于数据不断增加,数据库系统迄今为止迭代过了3次。
|
存储 应用服务中间件 nginx
Nginx:过滤模块的实现
Nginx:过滤模块的实现