当前位置: 首页 > news >正文

UDP报文结构

文章目录

  • 一、UDP报头
    • 1.1源端口号
    • 1.2目的端口号
    • 1.3UDP报文长度
    • 1.4UDP校验和(checksum)

UDP报头和UDP载荷(payload)之间的拼接可以认为是一个“字符串拼接”,里面是二进制数据。

一、UDP报头

UDP报头分成4个部分,每个部分2个字节。分别是:

1.1源端口号

1.2目的端口号

1.3UDP报文长度

因为UDP报文长度只有两个字节,表示的范围是0 ~ 65535,0 ~ 65535表示报文长度为0~65535字节(即UDP数据报最大为64kb,口头上说UDP能携带的最大数据是64kb,实际上UDP能携带的最大数据是64kb-8字节(65535-8字节,因为前8个字节是报头不携带数据),但工程上这8个字节可以忽略不计仍然说UDP能携带的最大数据是64kb),64kb的空间很小,所以使用UDP难以表示一个很大的数据报。

当网络通信交互的数据很大时,可以想到两种解决方案:(1)把数据拆分成多个包,使用多个UDP数据包进行传输。但这个方案缺点很大,因为开发成本、测试成本太高(因为要考虑怎样去拆包、怎样去组包、组包时的包的顺序不对怎么办、组包时的包出现缺失出现错误怎么办……) (2)使用TCP,因为TCP没有包大小限制。

那程序员能否对UDP报文长度进行升级,比如2个字节变为4个字节,那使用UDP难以表示一个很大的数据报的问题不就解决了吗?答案是不可以,因为升级要通信双方都要升级,这样双方的数据才能对应得上才能进行通信,换言之全世界的设备都得一起升级,而且升级的是操作系统内核(UDP是内核中实现的),这很难完全协调去进行升级。除非有一个全新的协议把UDP彻底替换掉。

1.4UDP校验和(checksum)

校验和:网络传输中由于一些外部干扰可能会出现数据传输出错的情况(比如磁场电场等干扰光/电信号使某个地方原来是低电平传输变为高电平传输(比特翻转))。因此需要有办法识别出出错的数据,校验和就是这样的一种检查手段。

校验和本质上是一个字符串,体积比原始的数据更小,由原始数据生成。原始数据相同得到的校验和就一定相同,校验和相同原始数据大概率相同(理论上会出现不同的情况,但这个概率非常低可以忽略不计)。

基于校验和完成数据校验:(1)发送方把要发送的数据data1通过一定的算法计算出校验和checksum1。(2)发送方把data1和checksum1一起通过网络发送出去。(3)接收方收到数据data2(data2可能和data1不一样)和checksum1。(4)接收方再根据data2按照同样的算法重新计算校验和得到checksum2。(5)对比checksum1和checksum2是否相同不同则认为data2和data1一定不相同。相同则认为data2和data1大概率相同(理论上存在不同的可能性,但概率很低可以忽略不计)。

计算校验和有很多种算法:UDP中使用的是CRC算法(循环冗余算法)。
循环冗余算法:把当前要计算校验和的数据的每个字节都进行累加保存到2个字节的UDP校验和中去。如果中间某个数据出现传输错误,第二次计算的校验和就会和第一次不同。
CRC算法不是特别靠谱,因为两个不同的数据得到相同的CRC校验和的概率比较大,比如传过来的数据少了一个字节的同时又多了一个字节导致计算出来的校验码和之前的校验码依然相同。

此外还有md5/sha1算法(md5和sha1的特点非常类似,下面介绍md5算法的特点)。
(1)定长。无论原始数据多长,计算出来的mad5校验码的长度都是固定的。这个特点让mad5非常适合用于做校验和,因为校验和本身不应该很长不然不方便网络传输。
(2)分散。两个原始数据哪怕绝大部分都一样,只要其中一个字节不同,得到的md5校验码都会差异很大。这让md5算法也非常适合作为哈希算法,因为哈希表把一个key通过hash函数转换成数组下标,希望hash函数计算出来的结果尽可能分散这样产生hash冲突的概率才会比较小。
(3)不可逆。给定一个原始数据,计算md5校验和容易,但通过md5校验和还原出原始数据很难。因此md5算法也可以应用在一些密码学场景中。

有一些应用层协议是基于UDP来实现的(比如DNS:域名解析协议),但这部分协议不算很多,相比于UDP,TCP在更多情况下更具有优势很多时候会优先考虑使用TCP。

相关文章:

UDP报文结构

文章目录 一、UDP报头1.1源端口号1.2目的端口号1.3UDP报文长度1.4UDP校验和(checksum) UDP报头和UDP载荷(payload)之间的拼接可以认为是一个“字符串拼接”,里面是二进制数据。 一、UDP报头 UDP报头分成4个部分,每个部分2个字节。分别是: 1…...

(高阶) Redis 7 第21讲 IO多路复用模型 完结篇

🌹 以下分享 Redis IO多路复用模型,如有问题请指教。🌹🌹 如你对技术也感兴趣,欢迎交流。🌹🌹🌹 如有对阁下帮助,请👍点赞💖收藏🐱‍🏍分享😀 IO多路复用模型是什么 I/O:网络IO 多路:多个客户端连接(连接即套接字描述符,即socket或channel),指…...

2023年入职/转行网络安全,该如何规划?

前言 前段时间,知名机构麦可思研究院发布了 《2022年中国本科生就业报告》,其中详细列出近五年的本科绿牌专业,其中,信息安全位列第一。 网络安全前景 对于网络安全的发展与就业前景,想必无需我多言,作为…...

解密RabbitMQ:你所不知道的端口及其重要性

解密RabbitMQ:你所不知道的端口及其重要性 前言第一部分:AMQP默认端口(5672)第二部分:RabbitMQ管理界面端口(15672)第三部分:Erlang Port Mapper Daemon(epmd)端口(4369&…...

Docker 环境搭建 (centeros)

CentOS环境下安装Docker 本文档将指导您在CentOS操作系统上安装Docker。Docker是一个开源的容器化平台,可以帮助您轻松地创建、部署和管理容器化应用程序。 步骤1:更新系统 在安装Docker之前,首先确保您的系统已经更新到最新版本。打开终端…...

服务器编程基本框架

服务器编程基本框架 虽然服务器程序种类繁多,但其基本框架都一样,不同之处在于逻辑处理。 I/O 处理单元是服务器管理客户连接的模块。它通常要完成以下工作:等待并接受新的客户连接,接收客户数据,将服务器响应数据返回…...

Leetcode——数组的遍历系列练习

485. 最大连续 1 的个数 class Solution { public:int findMaxConsecutiveOnes(vector<int>& nums) {// 记录最大连续1个数int max 0;// 记录数组中存在1个数int sum 0;// 遍历连续1个数int count 0;for (int i 0; i < nums.size() - 1; i) {if (nums[i] 1)s…...

免费的ChatGPT与StableDiffusion AI绘画 二合一 附在线地址

ChatGPT与StableDiffusion 在线地址在文末 介绍 嘿&#xff0c;大家好&#xff01;今天我要给大家介绍一个非常酷炫的技术结合——ChatGPT与StableDiffusion的合作。听起来是不是很有趣&#xff1f;那么&#xff0c;让我们一起来看看这个组合到底能带给我们什么样的奇妙体验…...

vivado FFT IP仿真(3)FFT IP选项说明

xilinx FFT IP手册PG109 1 Configuration 2 Implementation 3 Detailed Implementation IP Symbol...

正点原子嵌入式linux驱动开发——Busybox根文件系统构建

前面已经移植了TF-A、Uboot和Linux kernel&#xff0c;就剩最后一个 rootfs(根文件系统)了&#xff0c;本章就来学习一下根文件系统的组成以及如何构建根文件系统。这是Linux系统移植的最后一步&#xff0c;根文件系统构建好以后就意味着拥有了一个完整的、可以运行的最小系统 …...

React闭包

声明 本文将深入探讨React与闭包之间的关系。 我们将首先介绍React和闭包的基本概念&#xff0c;然后详细解释React组件中如何使用闭包来处理状态和作用域的问题。 通过本文的阅读&#xff0c;你将对React中闭包的概念有更深入的理解&#xff0c;并能够在开发React应用时更好地…...

【VS Code】推荐一套我非常喜欢的主题和字体样式

话不多说&#xff0c;先上样式&#xff1a; 这里我的主题是 One Dark Pro&#xff0c;也是 VS Code 里面使用非常多的主题之一。直接安装插件即可使用。 我的字体是 JetBrains Mono&#xff0c;虽然使用的是 VS Code&#xff0c;但还是喜欢 webstorm 的字体。我们可以直接去官网…...

【SQL】MySQL中的约束

1. 主键约束&#xff08;primary key&#xff09;&#xff1a; 相当于唯一约束非空约束分为单列主键&#xff0c;多列联合主键&#xff0c;一个表只有一个主键多列联合主键的每列都不能为空 2. 自增长约束&#xff08;auto_increment&#xff09;&#xff1a; 用在单列主键后…...

css div左右布局

div左右布局 htm代码 <div class"content-box"><div class"left"></div><div class"right"></div></div>css样式 .content-box{height: 100%;width: 100%;display: flex; } .left{display: block;width:…...

06_Node.js服务器开发

1 服务器开发的基本概念 1.1 为什么学习服务器开发 Node.js开发属于服务器开发&#xff0c;那么作为一名前端工程师为什么需要学习服务器开发呢&#xff1f; 为什么学习服务器开发&#xff1f; 能够和后端程序员更加紧密配合网站业务逻辑前置扩宽知识视野 1.2 服务器开发可…...

git中添加不上传的文件夹或文件的名字

在该目录.gitignore中 添加不上传的文件夹或文件的名字...

Android: edittext禁止输入空格和特殊字符代码记录

一、前言&#xff1a;这个代码也是借鉴别人写的&#xff0c;我也看不太懂。为了方便日后用到就用这篇文章记录一下。 二、代码展示 /*** 禁止EditText输入空格** param editText*/public static void setEditTextInhibitInputSpace(EditText editText) {editText.addTextChang…...

SpringMVC常用注解

SpringMVC常用注解 RequestMapping&#xff1a;用于处理请求 url 映射的注解&#xff0c;可用于类或方法上。用于类 上&#xff0c;则表示类中的所有响应请求的方法都是以该地址作为父路径。RequestBody&#xff1a;注解实现接收 http 请求的 json 数据&#xff0c;将 json 转…...

微信小程序

文章目录 一、实现步骤&#xff08;一&#xff09;创建项目&#xff08;二&#xff09;创建页面&#xff08;三&#xff09;准备图片素材&#xff08;四&#xff09;编写页面结构1、编写轮播区域页面结构2、编写九宫格区域页面结构 &#xff08;五&#xff09;编写页面样式1、编…...

Python教程——配置环境,再探IDE

文章目录 一、Python安装下载安装验证 二、第一个Python程序常见问题 三、Python解释器四、PyCharm工具安装和配置安装使用PyCharm基本使用 一、Python安装 下载 如果我们想要使用Python语言编写程序&#xff0c;我们必须下载Python安装包并配置Python环境&#xff0c;我们现…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...