UDP 的报文结构和注意事项

1. UDP的特点

1.无连接

  就像发短信给对方,只需要对方的端口和IP地址。不需要连接。

2.不可靠传输

  没有任何安全机制,发送端发送数据报以后,如果因为⽹络故障该段⽆法发到对⽅,UDP协议层也不会给应⽤层返回任何错误信息。

3.面向数据报

  应⽤层交给UDP多⻓的报⽂(载荷),UDP原样发送,既不会拆分,也不会合并

4.缓冲区

UDP只有接收缓冲区,没有发送缓冲区:
4.1 UDP没有真正意义上的 发送缓冲区。发送的数据会直接交给内核,由内核将数据传给⽹络层
协议进⾏后续的传输动作;
4.2 UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺
序⼀致;如果缓冲区满了,再到达的UDP数据就会被丢弃;
4.3  UDP的socket既能读,也能写,这个概念叫做 全双工

5.大小受限

  UDP协议⾸部中有⼀个16位的最⼤⻓度。也就是说⼀个UDP能传输的数据最⼤⻓度是64K(包含UDP⾸部)

2. UDP报文结构 

下图就是UDP的大概结构:

 2.1源端口和目的端口

可以通过下图来简单理解:

2.2 UDP长度

16位报文长度描述的是UDP数据报中数据的大小。其大小是2个字节,其表示的范围就是0-65535,换算出来就是64KB的大小。因此,一个UDP数据报一次最大只能传输64KB大小的数据。

但如果应用层数据报超过了64KB怎么办?那么我们就可以:

1.在应用层,通过代码的方式针对应用层数据报进行手动的分成若干部分,拆分成多个UDP数据报进行传输(send多次)。

2.把UDP的全部改为TCP进行传输。

 2.3 UDP检验和

2.3.1 CRC算法

  UDP中校验和,使用的是一种比较简单的方式,CRC算法来完成校验。

  伪代码:

        short checksum = 0;
        for(遍历取出数据报中的每个字节数据){
            checksum += 当前字节的数据; 
        }

  注意点:在这里checksum 相加的过程中,产生的数据可能比较大,超出short的俩个字节的范围,就溢出了,在这里的话也不管溢出。

  工作原理:UDP数据报发送方,在发送之前,先计算一遍CRC,把算好的CRC值放到UDP数据报中(设这个CRC值为value1),接下来这个数据包通过网络传输到达接收端,接收端收到这个数据之后,也会按照同样的算法,再算一遍CRC的值,得到的结果是value2。比较自己计算的value2和收到的value1 是否一致,如果是一致的,就说明数据是ok的。如果不一致传输过程中发生了比特翻转了。

  注意点:上述CRC算法中,如果只有一个bit位发生翻转,此时就能发现问题,如果有多个bit位发生翻转,有可能恰好校验和之前一样(虽然概率很低,但是也不希望这样子的事情发生)。

2.3.2 除了CRC之外高精度的校验和算法

  其实除了CRC,在业界还有一个很常用的,md5/sha1 算法。

  md5的特点:

  1. 定长: 无论原始数据多长,算出来的md5的最终值都是固定长度,常见的md5有16位版本(2字节),32为版本(4字节),64为版本(8字节)。

  2. 分散: 计算md5的过程中,原始数据只要变化了一点点,算出来的md5值就会差异很大。

  3. 不可逆: 给一个源字符串,计算md5值,这个过程非常简单,但是给你一个算好的md5值,让你把他还原回原始字符串,理论上无法完成的。(就像猪肉变成火腿一样)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java PDFBox 提取页数、PDF转图片

PDF 提取 使用Apache 的pdfbox组件对PDF文件解析读取和转图片。 Maven 依赖 导入下面的maven依赖&#xff1a; <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.30</version> &l…

import tensorflow.contrib.slim as slim中contrib报红,显示没有导入contrib

本人环境&#xff1a; python 3.6 tensorflow 1.13 问题如下图&#xff1a; 解决方法&#xff1a; 找到包的位置&#xff0c;查看tensorflow中是否下载了contrib包&#xff0c;如果有的话&#xff0c;建议重新装一次TensorFlow 如果没有找找&#xff0c;可以在搜索栏搜一下…

什么是5G RedCap?5G RedCap有什么优势?

5G RedCap&#xff08;Reduced Capability&#xff09;是指5G轻量化技术&#xff0c;即通过对5G技术进行一定程度的“功能裁剪”&#xff0c;来降低终端和模组的复杂度、成本、尺寸和功耗等指标&#xff0c;从而“量体裁衣”适配不同的物联需求&#xff0c;实现兼顾物联网系统的…

自锁设计更稳固,同为科技(TOWE)服务器电脑IEC 60320电源线

说起IEC 60320标准电源线&#xff0c;可能很多人不知道具体是什么东西&#xff0c;但要说到台式电脑电源线&#xff0c;那大家就都能耳熟能详了。IEC 60320电源线的用途十分广泛&#xff0c;包括家用电器、医疗设备、数据中心服务器、商业机械设备、自动化生产线等都是用此类电…

【iOS ARKit】人脸追踪之挂载虚拟元素

人脸跟踪&#xff08;Face Tracking&#xff09;是指将人脸检测扩展到视频序列&#xff0c;跟踪同一张人脸在视频序列中的位置。是论上讲&#xff0c;任何出现在视频中的人险都可以被跟踪&#xff0c;也即是说&#xff0c;在连续视频帧中检测到的人脸可以被识别为同一个人。人脸…

c++ 4种类型转换

1. 常量转换(const_cast)。》方便赋值 常量转换用于去掉表达式的const属性&#xff0c;使其变成非常量表达式&#xff0c;方便赋值。常量转换不能改变表达式的类型&#xff0c;只能改变const属性。示例代码&#xff1a; const int a 10; int b const_cast<int&>…

如何在云服务上通过docker部署服务?

如何在云服务上通过docker部署服务&#xff1f; 一、在云服务器上安装Docker1、查看云服务器的OS信息2、[安装Docker并使用&#xff08;Linux&#xff09;](https://help.aliyun.com/zh/ecs/use-cases/deploy-and-use-docker-on-alibaba-cloud-linux-2-instances) 二、通过dock…

基于 Docker 搭建 Uptime-Kuma 一个极简风的应用监控

GitHub&#xff1a;https://github.com/louislam/uptime-kuma 一、uptime-kuma 介绍 Demo&#xff1a;https://uptime.wuhanjiayou.cn/ uptime-kuma 是一款开源的监控工具, 支持 TCP / PING / HTTP 等多种监控方式&#xff0c;可监测网站&#xff0c;数据库&#xff0c;Docker…

nvm安装node 后npm不是内部或外部命令,也不是可运行的程序的处理方法

安装了两个node版本 v10.15.3代表10.15.3版本&#xff0c;打开后 v12.16.2代表node版本12.16.2,打开后 我现在使用10.15.3版本的node&#xff0c;npm可以使用&#xff0c;而当使用12.16.2版本时则不能使用 需要把文件npm, npm.cmd和node_modules三个文件拷贝到v12.16.2文件的…

从Elasticsearch来看分布式系统架构设计

从Elasticsearch来看分布式系统架构设计 - 知乎 分布式系统类型多&#xff0c;涉及面非常广&#xff0c;不同类型的系统有不同的特点&#xff0c;批量计算和实时计算就差别非常大。这篇文章中&#xff0c;重点会讨论下分布式数据系统的设计&#xff0c;比如分布式存储系统&…

论文笔记(四十二)Diff-DOPE: Differentiable Deep Object Pose Estimation

Diff-DOPE: Differentiable Deep Object Pose Estimation 文章概括摘要I. 介绍II. 相关工作III. DIFF-DOPEIV. 实验结果A. 实施细节和性能B. 准确性C. 机器人-摄像机校准 V. 结论VI. 致谢 文章概括 作者&#xff1a;Jonathan Tremblay, Bowen Wen, Valts Blukis, Balakumar Su…

抖捧AI实景自动直播怎么玩

​在如今的全民直播时代&#xff0c;直播已经成为了众多实体店、品牌方所刚需的技能&#xff0c;但是大多数都不具备太多的直播能力 &#xff0c;这个时候实景自动直播就应运而生&#xff0c;但是很多人都没有想清楚&#xff0c;AI实景自动直播&#xff0c;到底适不适合自己用呢…

Linux shell编程学习笔记42:hdparm命令

ChatGPT 和文心一言哪个更好用&#xff1f; 从智能回复、语言准确性、知识库丰富度等方面比较&#xff0c;两大AI助手哪个更胜一筹&#xff1f;快来和我们分享一下你的看法吧~ 0 前言 获取硬盘序列号是信息资产管理和信息安全检测中经常要收集的信息&#xff0c;对于Linux来说…

Java实现医院门诊预约挂号系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 功能性需求2.1.1 数据中心模块2.1.2 科室医生档案模块2.1.3 预约挂号模块2.1.4 医院时政模块 2.2 可行性分析2.2.1 可靠性2.2.2 易用性2.2.3 维护性 三、数据库设计3.1 用户表3.2 科室档案表3.3 医生档案表3.4 医生放号…

RocketMQ源码阅读-八-定时消息和消息重试

RocketMQ源码阅读-八-定时消息和消息重试 定时消息概念逻辑流程图延迟级别Producer发送定时消息Broker存储定时消息Broker发送定时消息Broker 持久化定时发送进度 消息重试总结 定时消息 概念 官网给出的概念&#xff1a;https://rocketmq.apache.org/zh/docs/featureBehavior…

记录威纶通:HMI

目录 HMI 界面切换​编辑 间接窗口 HMI 界面切换 第一种&#xff1a;选择功能键-切换基本窗口-操作界面-每一个界面都创建切换按钮 第二种&#xff1a;创建一个模板界面-使用功能键按照上面的操作创建两个切换按钮 选择操作界面-点击空白出右击属性-窗口设置底层选择模板界面…

flutter 五点一点四:MaterialApp Theme 给你一堆颜色看看

ColorScheme colorScheme, // 拥有30种颜色(这个数可能过几个版本会变化吧)&#xff0c;可用于配置大多数组件的颜色。 A set of 30 colors based on the[Material spec] that can be used to configure the color properties of most components.Color canvasColor, // Mater…

LeetCode 热题 100 | 子串

目录 1 560. 和为 K 的子数组 2 239. 滑动窗口最大值 3 76. 最小覆盖子串 菜鸟做题第二周&#xff0c;语言是 C 1 560. 和为 K 的子数组 题眼&#xff1a;“子数组是数组中元素的连续非空序列。” 解决本问题的关键就在于如何翻译问题。子数组 s 的和可以看作数组 i 的…

精品基于Uniapp+ssm基于java的赈灾系统App救灾救助捐赠

《[含文档PPT源码等]精品基于Uniappssm基于java的赈灾系统App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 后台框架&#xff1a;ssm 安卓框架&#xff…

防御第三次作业-防火墙组网实验(3)

目录 实验拓扑图 要求 1 2 针对10.0.2.10设备的安全策略&#xff1a; 针对10.0.2.20设备的安全策略&#xff1a; 3 4 实验拓扑图 各设备ip和接口已配好&#xff0c;均可可ping通防火墙。 要求 1.生产区在工作时间内可以访问dmz区域&#xff0c;仅可以访问http服…