JavaWeb——UDP的报文结构和注意事项

news2025/1/12 12:17:47

目录

一、UDP特点

1、无连接

2、不可靠

3、面向数据报

4、全双工通信

二、UDP报文结构

1、报头

2、载荷

三、端口

四、报文长度

五、校验和

1、定义

六、注意事项

1、UDP只有接收缓冲区、没有发送缓冲区

2、UDP大小受限

3、基于UDP的应用层协议

4、MTU对UDP协议的影响


一、UDP特点

1、无连接

UDP传输的过程类似于寄信,知道对端的IP和端口号就可以直接进行数据报传输,不用像TCP协议需要建立连接。

2、不可靠

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

3、面向数据报

UDP通过数据报的形式进行传输,用户的请求或响应都会从数据报转换成字符串

应用层交给UDP多长的报文,UDP原样发送,既不会拆分也不会合并

例:用UDP传输100个字节的数据,如果发送端一次发送100个字节,那么接收端也必须一次接收100个字节,而不能循环接收10次每次接收10个字节。

4、全双工通信

UDP的Socket既能读也能写,客户端和服务器都可以发送请求/接受响应。

二、UDP报文结构

UDP数据报=报头+载荷

1、报头

对于UDP来说,报头一共有8个字节​​​​,包含4个字段,每个字段2个字节。

报头=源端口+目的端口+报文长度+校验和

2、载荷

应用层数据报

三、端口

载荷中每个端口号在UDP报文中占了两个字节,端口号的取值范围是0~65535

端口号不是代表主机的地址,而是用来区分主机中的应用程序,代表了不同的应用程序。

  • 源IP和源端口是指数据从哪里来
  • 目的IP和目的端口是指数据到哪里去

例: 

四、报文长度

报文长度是两个字节,表示范围0~65535,等于64KB。一个UDP报文最大传输的长度是64KB。

如果超过了64KB,可以通过以下两种方式来解决:

  • 在应用层通过代码的方式针对应用层数据报进行手动分包,拆成多个包通过多个UDP数据报进行传输。
  • 换成TCP协议

五、校验和

1、定义

将发送前和发送后的校验和进行比较,检查发送前后数据报是否一致。用来验证传输的数据是否是正确的。

校验和存在的意义就是用来判定当前传输的数据是否出错:

  • 如果校验和不对,此时数据一定不对
  • 如果校验和对,数据也有一定概率是错的

为了让校验和能够识别率更高一些,计算时通常会以数据内容作为参数来计算,数据内容发生变化,校验和也会发生变化。

校验和往往就是取内容或是内容的一部分,通过数学公式变换得到一个数值。如果内容发生改变,得到的校验和也就改变了。

发送方把载荷数据带入到校验和算法中,计算生成得到校验和结果设为sum1,发送方把这一整串数据发送给接收方。

接收方收到的数据既有载荷也有校验和sum1,接受方就可以把载荷按照同样的算法,再计算一边校验和得到sum2。

如果校验和结果不一样,原始输入的内容一定不一样,就可以视为传输出错了。如果sum1变了,内容没变,但是还是和sum2对不上,也视为传输出错。

六、注意事项

1、UDP只有接收缓冲区、没有发送缓冲区

  • UDP没有真正意义上的发送缓冲区。发送的数据会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作。
  • UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致。如果缓冲区满了,再到达的UDP数据就会被丢弃。

2、UDP大小受限

UDP协议首部有一个16位的最大长度,一个UDP能传输的数据最大长度是64KB(包含UDP首部)。

3、基于UDP的应用层协议

  • NFS :网络文件系统
  • TFTP :简单文件传输协议
  • DHCP :动态主机配置协议
  • BOOTP :启动协议(用于无盘设备启动)
  • DNS :域名解析协议

4、MTU对UDP协议的影响

一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)),那么就会在网络层被分成多个IP数据报。在这多个IP数据报中有任意一个丢失,都会引起接收端网络层重组失败。这就意味着如果UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加了。

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

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

相关文章

《Java8实战》第11章 用 Optional 取代 null

11.1 如何为缺失的值建模 public String getCarInsuranceName(Person person) { return person.getCar().getInsurance().getName(); } 上面的这种代码就很容易出现NullPointerException的异常。 11.1.1 采用防御式检查减少 NullPointerException 为了避免NullPointerExce…

【Linux】基础IO——文件操作|文件描述符|重定向|缓冲区

文章目录 一、文件操作1. 文件预备知识2. 回顾C文件操作3. 文件操作的系统调用标志位的传递openwriteread 二、文件描述符1. 文件描述符的理解2. 文件描述符的分配规则 三、重定向1. 重定向的本质2. dup2系统调用 四、缓冲区1. 缓冲区的刷新策略2. 缓冲区的位置3. 简单模拟实现…

当程序员的好处和坏处,我用七年经历来和大家聊一聊

我想和大家分享一下我做程序员这七年来的一些感受和经验,同时也想和大家聊一聊做程序员的好处和坏处,让大家真正深入了解程序员的工作,是不是和大家想象中的一样。 首先,我毕业于四川某不知名的二本院校,于2016年进入…

【软考备战·希赛网每日一练】2023年4月19日

文章目录 一、今日成绩二、错题总结第一题第二题第三题 三、知识查缺 题目及解析来源:2023年04月19日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析: 第二题 解析: server-side n.服务器端 enterprise n.企业 client n.客户 d…

matplotlib的配色(随机颜色函数,各种渐变色,彩虹色)

也是画图的时候经常会遇到的问题,什么颜色好看? 先直接上一个配色表: plt官网:List of named colors — Matplotlib 3.8.0.dev898g4f5b5741ce documentation 需要什么颜色传入就行了。 例如我下面画一个柱状图,自己选…

ctfhub技能树 web sql注入

1.整型注入 页面正常时 判断注入字段数 ?id1 order by 2判断注入回显位 ?id-1 union select 1,2查数据库 ?id-1 union select 1,database()库名:sqli 查数据表 ?id-1 union select 1,group_concat(table_name) from information_schema.tables where tabl…

kotlin协程、线程切换,函数方法委托

kotlin协程、线程切换,函数方法委托 一般编程的技法,比如,在Android中,假设在主线程中实现了一个函数,但该函数是耗时操作,毫无疑问,需要将这个函数的实现切入非主线程中操作,那么可…

Springcloud核心组件

在这里总结一下所有组件: springcloud是分布式微服务的一站式解决方案,可以说微服务是一个概念,而springcloud就是这个的实现 springcloud有五大核心组件: 注册中心 引言 由于微服务处于不同的进程,也就是说&…

【软考备战·希赛网每日一练】2023年4月13日

文章目录 一、今日成绩二、错题总结第一题第二题第三题第四题第五题 三、知识查缺 题目及解析来源:2023年04月13日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析: 本题有争议,了解即可。 第二题 解析: 上图UML图为…

[计算机图形学]几何:网格处理(前瞻预习/复习回顾)

一、前言 网格的三种处理:网格细分,网格简化,网格正则化,细分会产生更多的三角面片来让模型更加光滑,简化则相反会减少网格的三角面片数量,正则化则会让三角形面更加规则。如上图中最右边两幅图&#xff0…

SpringBoot监听器源码解析

1.1 创建SpringApplication对象 public static ConfigurableApplicationContext run(Class<?>[] primarySources, String[] args) {return new SpringApplication(primarySources).run(args); }SpringApplication(。。){//获取到所有配置的ApplicationListener类型的监…

Android中的多线程编程与异步处理

Android中的多线程编程与异步处理 引言 在移动应用开发中&#xff0c;用户体验是至关重要的。一个流畅、高效的应用能够吸引用户并提升用户满意度。然而&#xff0c;移动应用面临着处理复杂业务逻辑、响应用户输入、处理网络请求等多个任务的挑战。为了确保应用的性能和用户体验…

《springboot实战》第六章 实现自定义全局异常处理

前言 springboot实现自定义全局异常处理&#xff0c;以及统一返回数据。 1、分析 首先&#xff0c;实现全局异常的流程 从图中可以看到&#xff0c;实现全局异常会需要这样几个类&#xff1a; 自定义异常接口类自定义异常枚举类自定义异常类自定义异常处理类自定义全局响应…

藏在GPT背后的治理分歧:那些赞同和反对的人们|AI百态(下篇)

AGI的火种正在燎原。 一面是无可否认的AI生产力&#xff0c;正在赋能千行百业&#xff1b;而另一面&#xff0c;这团火似乎烧向了我们不可控的隐秘角落。 在《AI百态&#xff08;上篇&#xff09;——ChatGPT的“N宗罪”》中&#xff0c;我们提到监管重锤在落下&#xff0c;意大…

安装 Docker和基本操作实验文档

一、安装 Docker 目前 Docker 只能支持 64 位系统。 systemctl stop firewalld.service setenforce 0 #安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 yum-utils&#xff1a;提供了 yum-config-manager 工具。device mapper&#xff1a; 是Li…

分布式系统概念和设计-操作系统中的支持和设计

分布式系统概念和设计 操作系统支持 中间件和底层操作系统的关系&#xff0c;操作系统如何满足中间件需求。 中间件需求:访问物理资源的效率和健壮性&#xff0c;多种资源管理策略的灵活性。 任何一个操作系统的目标都是提供一个在物理层&#xff08;处理器&#xff0c;内存&a…

【网络安全】Xss漏洞

xss漏洞 xss漏洞介绍危害防御方法xss测试语句xss攻击语句1. 反射性xss2.存储型xss3.DOM型xssdvwa靶场各等级渗透方法xss反射型&#xff08;存储型方法一致&#xff09;LowMediumHightimpossible Dom型LowMediumHight xss漏洞介绍 定义&#xff1a;XSS 攻击全称跨站脚本攻击&am…

Twitter|GraphJet:推特的实时内容推荐(论文+源码解读)

以下内容具有主观性&#xff0c;有些问题的理解和回答不一定准确&#xff0c;仅供参考。翻译不确定的后面都有原文。 1.论文 1.1论文的动机是什么&#xff1f; 作者在追溯基于图推荐的系统的进化过程&#xff0c;发现了两大趋势&#xff08;更快更广&#xff09;。 趋势一是…

MySQL ,MyBatis 1.参数占位符 2. ParameterType 3. SQL 语句中特殊字符处理

1.参数占位符&#xff1a; 1&#xff09;#{}&#xff1a;执行sql时&#xff0c;会将#仔占位符替换为&#xff1f;&#xff0c;将来自动设置参数值 2&#xff09;${}&#xff1a;拼SQL。会存在SQL注入问题 3.使用时机&#xff1a; * 参数传递&#xff0c;都使用#{} *如果要对表名…

Elasticsearch:保留字段名称

作为 Elasticsearch 用户&#xff0c;我们从许多不同的位置收集数据。 我们使用 Logstash、Beats 和其他工具来抓取数据并将它们发送到 Elasticsearch。 有时&#xff0c;我们无法控制数据本身&#xff0c;我们需要管理数据的结构&#xff0c;甚至需要在摄取数据时处理字段名称…