UDP详解/消息边界

news2024/9/20 12:41:38

本文旨在解释了为什么说UDP是不可靠,到底什么是UDP的消息边界,以及UDP是否会出现粘包和半包的问题

概念

UDP协议是一种面向非连接的协议,面向非连接指的是在正式通信前不必与对方先建立连接,不管对方状态就直接发送,至于对方是否可以接收到这些数据内容,UDP协议无法控制,因此说,UDP协议是一种不可靠的协议。无连接的好处就是快,省内存空间和流量,因为维护连接需要创建大量的数据结构。

UDP会尽最大努力交付数据,但不保证可靠交付,没有TCP的确认机制、重传机制(上一篇文章介绍过 TCP详解(二)滑动窗口/流量控制-CSDN博客),如果因为网络原因没有传送到对端,UDP也不会给应用层返回错误信息。

报文格式

可以看到UDP的报文非常简单,不像TCP那也有序号、确认号、选项啥的,UDP的头部只有如下4个

  1. 源端口:发送方主机的应用程序的端口号
  2. 目的端口:目的主机的应用程序的端口号
  3. 长度字段,是以字节为单位的UDP头部和UDP数据的总长度,因为UDP头部长度为8,且空数据的UDP数据报是允许的,这意味着该长度字段值最小为8。UDP长度值是冗余的,因为可以通过IP数据报的总长度减去IP首部的长度推导出来。
  4. 校验和,覆盖了UDP首部、UDP数据和一个伪首部,由初始发送方计算,由最终目的方校验,用于判断数据报在网络传输过程中是否出错,比如某一位从1变成了0或者少了几个字节。

消息边界

所谓数据边界就是UDP接收缓冲区就界定了消息之前的分隔,两个消息不会放到一起,应用层每次都取,都能取到一个完整的包。

UDP发送缓冲区

UDP协议是面向数据报文的信息传送服务。UDP在发送端没有缓冲区,对于应用层交付下来的报文在添加了首部之后就直接交付于ip层,不会进行合并,也不会进行拆分,而是一次交付一个完整的报文。

对于发送端,UDP 包头中,用 两个字节&#

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML+CSS进阶用法 (下)——移动端适配、媒体查询和响应式布局

欢迎来到移动端适配方案的介绍!随着移动互联网的快速发展,越来越多的用户通过手机和平板电脑访问网站。为了确保网站能够在各种设备上呈现出最佳的视觉效果和用户体验,我们需要采取有效的适配策略。本篇文章将带你了解几种常用的适配方法&…

记事本打不开(保姆级教程)

问题可能是这样的: 1. 应用程序故障:记事本程序可能遇到了临时的应用程序故障或错误。 2. 系统文件损坏:系统文件损坏或丢失可能导致记事本无法正常启动。 3. 注册表问题:注册表中的条目错误或缺失可能影响记事本的加载。 4. 输入…

Blender的Python编程介绍

在Blender这个免费的开源3D设计软件中,最值得称道的一点是可以用Python程序来辅助进行3D设计,我们可以通过Python来调整物体的属性,生成新的物体,甚至生成新的动画等等。 在最近的一个项目中,我用Blender制作了一个动…

PVE 系统下虚拟机数据盘从IDE转换为VIRIO

一、卸载已经挂载的 IDE 数据盘 [rootlocalhost ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root 29G 897M 29G 4% / devtmpfs 909M 0 909M 0% /dev tmpfs 920M 0 920M 0% /dev/shm tmpfs 920M 8.5M 912M 1% /run tmpfs 920M 0 920M 0% /sys/fs/cgro…

nginx的平滑升级及版本回滚

官方源码包下载地址:nginx: download 一、编译安装Nginx-1.24.0 [rootNginx ~]# dnf install gcc pcre-devel zlib-devel openssl-devel -y [rootNginx ~]# mkdir /nginx #创建目录,将nginx-1.24.0.tar.gz放在这个目录里 [rootNginx nginx]# tar…

C++的动态数组以及std:vector的优化

文章目录 静态数组动态数组代码背景第一种打印方式:使用 for 循环和索引解释 第二种打印方式:使用基于范围的 for 循环解释改进方式:避免拷贝 总结清理数组 代码示例代码分析输出结果总结 代码示例代码详解总结使用 reserve 的优点:使用 empl…

【考研数学】定积分应用——旋转体体积的计算(一文以蔽之)

目录 一、如何计算旋转体体积?思考一个小例子 二、旋转体体积的二重积分表达式 三、用真题,小试牛刀 定积分的应用中,有一类题是求解旋转体的体积问题。 相较于记忆体积计算公式,有一种通法求解体积更不容易出错:二重…

系统数据库介绍及实践

目录 案例 【题目】 【问题 1】(8 分) 【问题 2】(13 分) 【问题 3】(4 分) 【答案】 【问题 1】解析 【问题 2】解析 【问题 3】解析 相关推荐 案例 阅读以下关于应用系统数据架构的说明,在答题纸上回答问题 1 至问题 3。 【题目】 某软件公司拟开发一套…

svn文件定时全量备份

在win11操作系统中,使用定时任务脚本的方式实现对SVN文件的定时备份 SVN备份脚本 1 创建脚本simpleBackup.bat 该脚本主要用于实现备份过程的信息展示 echo 正在备份版本库%1...... md %BACKUP_DIRECTORY%\%2 %SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_D…

蓝桥杯 双周赛 第16场 强者赛 题目复盘 (2024年8月10日)

6. 花魁之争 解题思路: 根据题意,对于每一次操作,每个仙女来说都取最优解,那第一次每个仙女都操作一次,这时候胜出的仙女,是一定赢的。所以,只要计算n个字符串操作一次的最优字符串,…

HarmonyOS NEXT - 通过 module 模块化引用公共组件和utils

demo 地址: https://github.com/iotjin/JhHarmonyDemo 代码不定时更新,请前往github查看最新代码 HarmonyOS NEXT 一、HAP & HSP & HAR介绍HAP官方介绍HAR官方介绍HSP官方介绍怎么理解App、HAP、HAR的关系HAR如何转换为HSPHSP模块如何快速切换成HAR模块 二…

【JavaSE】基础知识复习(六)(不全)

1.File与IO流 File类就是代表系统的文件 / 目录,IO流是用来处理File类的 File类 构造器 分隔符(三种) 第三种File.separator是跨平台的,获取当前操作系统的分隔符 常用方法 length() 返回文件大小(字节),如果是目录&am…

EcoDev Studio 与 gitlab【拉取项目,切换分支,再修改提交】

1 安装git工具 https://blog.csdn.net/mukes/article/details/115693833 2 创建空项目 3 推送gitlab 1、进入本地该项目目录下,右键Git Bash Here打开git命令窗口 2、初始化本地仓库: git init将本地项目的所有文件添加到暂存区: git a…

EMC学习笔记2——电磁兼容问题分析

分析一个电磁兼容问题一般从三方面入手,分别是骚扰源、敏感源、耦合路径。解决掉其中一个问题,就能解决大部分的电磁兼容问题。 例如:当骚扰源是雷电时,敏感源是电子线路时,我们需要消除的就是耦合电路。 耦合路径就是…

吴恩达机器学习-C2W1L1-神经元和层

在本实验中,我们将探索神经元/单元和层的内部工作原理。特别地,这个实验将与你在课程1中掌握的模型,回归/线性模型和逻辑模型进行类比。本实验室将介绍Tensorflow,并演示如何在该框架中实现这些模型。 包 Tensorflow和Keras Te…

Ubuntu中编译使用ANTs(医学图像配准)含github无法访问问题解决

目录 第一步、修改hosts文件 1.打开https://github.com.ipaddress.com/ 2.打开https://fastly.net.ipaddress.com/github.global.ssl.fastly.net#ipinfo 3.打开hosts文件,并在文件末尾添加如下内容 第二步、编译ANTs 1)首先安装git、cmake以及c编译…

基于DVWA-Brute Force(LowMedium)的渗透测试

Brute force主要是通过爆破达到渗透目的&#xff1a; Low 查看源代码&#xff1a; <?phpif( isset( $_GET[ Login ] ) ) {// Get username$user $_GET[ username ];// Get password$pass $_GET[ password ];$pass md5( $pass );// Check the database$query "SE…

流量分析0.o

[陇剑杯 2021]签到 此时正在进行的可能是__________协议的网络攻击。&#xff08;如有字母请全部使用小写&#xff0c;填写样例&#xff1a;http、dns、ftp&#xff09;。得到的flag请使用NSSCTF{}格式提交。 过滤协议 例子:tcp&#xff0c;udp&#xff0c;arp&#xff0c;i…

基于SpringBoot和Leaflet的全国省会城市风景区分布分析实践

目录 前言 一、空间数据表的设计与实现 1、城市信息数据表 2、风景区信息表设计与实现 3、数据库查询应用 二、WebGIS程序设计与实现 1、使用select中转义字符的使用 2、Leaflet空间信息展示 三、省会城市风景区可视化成果展示 1、哈尔滨市风景区分析 2、南京市风景区…

【6大设计原则】依赖倒置原则:构建灵活软件架构的基石 - 通过代码实例深入解析

1.引言 1.1为什么要学习依赖倒置原则 在软件开发过程中&#xff0c;我们经常需要对代码进行修改和扩展。如果代码之间的耦合度过高&#xff0c;那么在进行修改或扩展时&#xff0c;可能会对其他部分的代码产生影响&#xff0c;甚至引发错误。这就要求我们在编写代码时&#xf…