UDP协议详解

目录

UDP协议报文结构

端口号

报文长度

校验和

 生成校验和的算法

MD5的特点


UDP协议报文结构

UDP会把载荷数据(也就是通过 UDP socekt,send方法拿来的数据基础上,再前面拼装(相当于字符串拼接此处是二进制的)上几个字节的报头

UDP报头里包含了一些特定的属性,这些属性携带了一些重要的信息
不同的协议,功能不同,报头中带有的属性信息就不同,对于UDP来说,报头一共8个字节,分成四个部分:源端口号,目的端口号,报文长度,校验和 

UDP协议是一个无连接,不可靠,面向数据报,全双工协议.

端口号

端口号传输层协议的概念,每个进程(程序)属于自己端口号,起到的效果就是区分一个主机上具体的应用程序.因此我们要求同一个主机上,一个端口号不能被多个进程绑定

UDP协议中包含源端口号,和目的端口号,他们都是用2个字节,也就是16个bit位来表示的,因此这里的端口号的取值范围是0->65535,注意0->1023这个范围的端口,被称为"知名端口号/具体端口号",这些端口号都已经分配给了一些广泛使用的知名的应用程序了,因此我们自己写的程序绑定的端口号需要从1024开始

报文长度

报文长度也是由2个字节表示的,范围同样是0->65535,换算一下单位,也就是64KB.也就是说一个UDP数据报最多只能传输64KB的数据

如果我们需要传输的数据大于64KB怎么办呢?

1.需要在应用层,通过代码的方式针对应用层数据报进行手动的分包,拆成多个包,通过多个UDP数据报来进行传输(本来send一次,现在要send多次)

2.不用UDP协议,使用TCP协议

校验和

网络传输的本质是光信号/电信号,在传输过程中,可能会受到一些物理因素的影响,在这些干扰因素的影响下,可能会发生"比特翻转",也就是原来要传输二进制1,发生比特翻转,就变成了0,原来要传输二进制0,发生比特翻转,就变成了1,此时我们传输过后得到的数据就变了,数据的含义也就不同了,本来数据报是想开启功能,可能就变成了关闭功能了

这种现象是客观存在的,不可避免的,我们能做的就是在发生比特翻转,数据改变了的时候,能够及时的识别出当前的数据是否出现问题.

此时我们就需要校验和了,校验和的作用就是验证传输的数据是否是正确的

校验和是如何鉴别我们的数据是否出现了问题的呢?

检验和会针对数据内容进行一系列的数学运算,得到一个比较短的结果(比如2字节),如果数据内容一定,得到的校验和结果就一定,如果数据变了,得到的检验和也就变了

 生成校验和的算法

1.CRC 循环冗余校验,把数据每个字节,循环往上累加,如果累加益处了,高位就不要了

2.MD5 有一系列公式,来进行更复杂的运算,最后得到一个定长的结果

MD5的特点

1.定长:无论原始数据有多长,得到的md5的值都是固定长度(4字节版本,也有8字节版本)

2.冲突概率小 原始数据哪怕变动一个地方,一个bit位,算出来的MD5天差地别(MD5让结果更分散了)

3.不可逆,通过原始数据计算出MD5很容易,但是想要通过MD5计算出原始数据非常难(计算量极大,理论上不可以完成)

4.可以用来计算校验和,也可以计算hash值,还可以当作一种加密方式

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

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

相关文章

阿里云linux云服务器 安装指定版本node.js

我们在实例管理中找到自己的服务器 然后点击右侧的 远程连接 接着点击理解登录 进入命令窗口 我们在这上面输入 curl -h阿里云的服务器都还是最好会有 curl的 然后 我们输入 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash下把nvm下下…

量化注意事项和模型设计思想

量化的注意事项 1、量化检测器时,尽量不要对Detect Head进行量化,一旦进行量化可能会引起比较大的量化误差; 2、量化模型时,模型的First&Second Layer也尽可能不进行量化(精度损失具有随机性)&#xf…

【软件设计师06】数据结构与算法基础

数据结构与算法基础 考点:数组与矩阵、线性表、广义表、树与二叉树、图、排序与查找、算法基础与常见的算法 1. 数组 数组类型存储地址计算一维度数组a[n]a[i]的存储地址为ai*len二维数组a[m][n]a[i][j]的存储地址;按行存储:a(i*nj)*len&a…

Spring原理学习(二):Bean的生命周期和Bean后处理器

〇、前言 倘若是为了面试,请背下来下面这段: spring的bean的生命周期主要是创建bean的过程,一个bean的生命周期主要是4个步骤:实例化、属性注入、初始化、销毁。但是对于一些复杂的bean的创建,spring会在bean的生命周期…

如何搭建chatGPT4.0模型-国内如何用chatGPT4.0

国内如何用chatGPT4.0 在国内,目前可以通过以下途径使用 OpenAI 的 ChatGPT 4.0: 自己搭建模型:如果您具备一定的技术能力,可以通过下载预训练模型和相关的开发工具包,自行搭建 ChatGPT 4.0 模型。OpenAI提供了相关的…

旅游心得Traveling Experience

前言 加油 原文 旅游心得常用会话 ❶ Share photos of the trip with friends. 与朋友分享旅游的照片。 ❷ We’ll go to the Great Wall, if you prefer. 你如果愿意的话,我们去长城。 ❸ Would you go to the church or the synagogue or the mosque? 你会去教堂,犹太…

二结(4.11)IO流学习

FIle类只能对文件本身操作,不能读写文件里面存储的数据 文件保存的位置叫路径,而数据传输叫IO流 Java I/O流(Input/Output stream)在Java应用程序中用于读取和写入数据,可分为基本流和高级流两类 关于什么是输出流、…

CSC中加学者交换项目申报即将开始

3月31日,国家留学基金委(CSC)发布了2023-2024年度中加学者交换项目遴选通知。根据通知精神,选派规模:100人月,留学及资助期限:4-12个月,网上报名及申请受理时间为2023年4月11日至6月…

SpringCloud学习6(Spring Cloud Alibaba)断路器Sentinel熔断降级

文章目录服务熔断降级Sentinel高并发请求模拟(这里我们使用contiperf来进行测试)修改tomcat配置最大线程数引入测试依赖编写测试代码服务雪崩服务雪崩的容错方案(隔离、超时、限流、熔断、降级)隔离机制:超时机制&…

Baumer工业相机堡盟工业相机如何设置网口的IP地址(工业相机连接的网口设置IP地址步骤)

Baumer工业相机堡盟工业相机如何设置网口的IP地址(工业相机连接的网口设置IP地址步骤)Baumer工业相机Baumer工业相机设置网络端口IP地址匹配设置网络端口IP地址和工业相机IP地址匹配第一次打开CameraExplorer软件确认问题为IP地址不匹配问题打开网络连接…

C++ - 继承 | 菱形继承

之前的文章中我们简要的讲述了C中继承部分的知识,但是还没有完全的讲完,在本文中将会讲到菱形继承的问题。 复杂的菱形继承 单继承:一个子类只有一个直接父类时称这个继承关系为单继承。 多继承:一个子类有两个或以上直接父类时…

最新阿里、腾讯、华为、字节等大厂的薪资和职级对比,看看你差了多少...

互联网大厂新入职员工各职级薪资对应表(技术线)~ 最新阿里、腾讯、华为、字节跳动等大厂的薪资和职级对比 上面的表格不排除有很极端的收入情况,但至少能囊括一部分同职级的收入。这个表是“技术线”新入职员工的职级和薪资情况,非技术线(如产品、运营、…

Android基础四大组件之Activity的启动过程源码解析

前言 Activity是Android中一个很重要的概念,堪称四大组件之首,关于Activity有很多内容,比如生命周期和启动Flags,这二者想要说清楚,恐怕又要写两篇长文,更何况分析它们的源码呢。不过本文的侧重点不是它们…

面试官:你可以用 for of 遍历 Object 吗?

本文以 用 for of遍历 Object 为引 来聊聊 迭代器模式。 什么是迭代器模式 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。 ——《设计模式:可复用面向对象软件的基础》 可以说迭代器模式就是为了遍历存在的。提…

HTML5 <body> 标签

HTML <body> 标签 实例 一个简单的 HTML 文档&#xff0c;包含尽可能少的必需的标签&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>文档标题</title> </head><body> 文档内容…

单例设计模式解读

目录 单例设计模式介绍 单例设计模式八种方式 饿汉式&#xff08;静态常量&#xff09; 饿汉式&#xff08;静态代码块&#xff09; 懒汉式(线程不安全) 懒汉式(线程安全&#xff0c;同步方法) 懒汉式(线程安全&#xff0c;同步代码块) 懒汉式(线程安全&#xff0c;同步…

libcurl库的安装及使用说明

目录 一 libcurl库安装 ① 下载网址 ② libcurl库安装步骤 ③ libcurl等第三方库的通用编译方法 二 调用libcurl编程访问百度主页 ① 代码说明 ② 编译说明 ③ 执行说明 三 libcurl的使用说明 ① curl相关函数简介 ② curl_easy_setopt函数部分选项介绍 ③…

【AUTOSAR】【Can通信】CanSM

目录 一、概述 二、限制说明 三、功能说明 3.1 基础需求 3.2 CAN网络的状态机 3.3 错误分类 3.3.1 开发错误 3.3.2 运行错误 3.3.3 拓展生产错误 3.4 ECU在线主动/被动模式 四、API接口 4.1 API定义 4.2 调度接口 一、概述 该文档描述了AUTOSAR基本软件模块CAN状态…

2023年第十四届蓝桥杯Java_大学B组真题

Java_B组试题 A: 阶乘求和试题 B: 幸运数字试题 C: 数组分割试题 D: 矩形总面积试题 E: 蜗牛试题 F: 合并区域试题 G: 买二赠一试题 H: 合并石子试题 I: 最大开支试题 J: 魔法阵【考生须知】 考试开始后&#xff0c;选手首先下载题目&#xff0c;并使用考场现场公布的解压密码解…

编译技术-词法理论

一、文法的种类 1.1 分类定义 Chomsky 文法定义&#xff1a; G(V,Vt,P,Z)G (V, V_t, P, Z)G(V,Vt​,P,Z)VVV&#xff1a;符号集合VtV_tVt​&#xff1a;终结符号集合PPP &#xff1a;有穷规则集合ZZZ&#xff1a;是被符号&#xff0c;不能是终结符 关于不同文法的区别 类型…