UDP的报文结构和注意事项

news/2024/5/18 11:52:22 标签: udp, 网络, 网络协议

1.UDP的报文结构

UDP的报文结构如图:
在这里插入图片描述
画成一行会比较好理解:

在这里插入图片描述
主要由两部分组成:UDP报头和UDP载荷。
UDP载荷其实就是数据。

UDP报头分为四个部分,每个部分占两个字节。

  • 源端口
  • 目的端口
  • 报文长度
  • 校验和

下面介绍报头里各个部分的作用。

1.1源端口和目的端口

源端口和目的端口各占2字节(Byte),端口号范围:0~65535
比如:源端口是3306,目的端口是8866。
在这里插入图片描述
就表示从数据从3306这个端口发送到8866这个端口,通过这两个端口就可以知道数据从哪个进程发送到哪个进程。

注意:上图的MySQL和IDEA两个端口是随便给的,跟实际的不一样。

1.2报文长度

报文的长度也用2个字节表示,范围是0~65535,单位是字节(Byte)
一般我们都说UDP最大报文长度是64KB (65536B),实际上是65535B

所以UDP能传送的数据比较有限,那为什么不把这个报文长度改成用4个字节8个字节呢或者更大呢?
在这里插入图片描述

也不是不行,只是影响太大。

因为世界上有那么多主机、服务器、和其他设备。
如果其中有一些主机或者服务器把系统升级,然后按照新的UDP协议进行通信,但是其他主机或者服务器没升级系统(用的还是老的UDP协议),可能通信就会现问题了。
世界上那么多设备,将每个设备的系统都升级,这是很不现实的操作。

采用新UDP协议的主机发送数据报给采用旧UDP协议的主机
在这里插入图片描述
解析数据:
在这里插入图片描述
解析出错:
在这里插入图片描述

1.3校验和

网络上传输数据是有可能发生数据错误的,可能因为环境(磁场、电磁波等)的影响,导致数据发生了错误,1变0,0变1,这时候对方收到的数据就是错误的。
在这里插入图片描述
校验和就是用来检验数据是否发生错误的。

先说一段小故事,体会体会校验和的作用🙃

小红和小明是男女朋友关系,有一天小红叫小明去买菜,如图:
在这里插入图片描述
小红吩咐了,小明也答应了,结果:

在这里插入图片描述
小红继续吐槽:
在这里插入图片描述
小明屁颠屁颠又跑到菜市场把西红柿买回来:
在这里插入图片描述
在这里插入图片描述
完结

  • 在故事中小红发现小明只买了3样菜,本来是4样的。
    然后小红很友好地叫小明去买之前没买的西红柿。
  • 这个故事中的校验和其实就是菜的样数。

校验和是数据经过校验和算法得到的一个数值,用来校验数据是否出错。
如图:
在这里插入图片描述
计算校验和:
在这里插入图片描述

比较:
在这里插入图片描述

不相等:
在这里插入图片描述
校验和不相等,说明发送方的数据和接收方的数据一定不一样。


但是校验和相等,发送方和接受方的数据不一定相等。
比如:
在这里插入图片描述
发送方和接收方的数据不一样,但是经过校验和算法计算,校验和有可能是一样的。
UDP用的算法是CRC算法。

2.注意事项

在使用UDP编程的时候,数据报不能太长。
数据报太长会导致很多问题。
比如:
数据报太长会导致数据报可能会被分片传输,重组的时候,某部分数据报丢失或者损坏都会导致重组失败。

如果UDP数据报太大,可以选择如下做法:

  • 可以把数据报分成各个小的数据报
  • 使用TCP传输协议

http://www.niftyadmin.cn/n/275888.html

相关文章

PCA学习

前置知识 统计 假设数据集 X ∈ R n m \mathbf{X}\in\mathbb{R}^{n\times m} X∈Rnm,其中 n n n表示样本数量, m m m表示特征个数 均值 X ˉ 1 n e T X 1 n ∑ i 1 n X i \bar{\mathbf{X}} \frac{1}{n}\mathbf{e}^T\mathbf{X} \frac{1}{n} \sum_{i1}^{n}\mat…

WEB攻防通用漏洞跨域CORS资源JSONP回调域名接管劫持

目录 一、同源策略(SOC) 二、跨域资源(COSP) 三、回调跨域(JSOP) 四、CORS资源跨域-敏感页面原码获取 五、JSONP 回调跨域-某牙个人信息泄露 六、子域名劫持接管 一、同源策略(SOC&#x…

leetcode 面试题 02.04. 分割链表

原题为: 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在大于或等于x 的节点之前。 你不需要 保留 每个分区中各节点的初始相对位置。 测试示例如下: 输入:head [1,4…

shell编程lesson01

命令行和脚本关系 命令行:单一shell命令,命令行中编写与执行; 脚本:众多shell命令组合成一个完成特定功能的程序,在脚本文件中进行编写维护。 脚本是一个文件,一个包含有一组命令的文件。 编写一个shel…

【2023 摩尔线程 笔试题】~ 题目及参考答案

文章目录 0. 前言1. 题目 & 答案1.1 单选题1.2 简答题问题1:解析1:问题2:解析2:问题3:解析3:问题4:解析4: 1.3 编程题问题1:解析1:问题2:解析…

微搭低代码实现下拉框动态填充值

有个粉丝问我,微搭的下拉框如何自动填充值 想问一下,下拉控件需要绑定数据源里面的列表,这个需要怎么做,自己研究了蛮久也没弄出来,需要参考您哪一篇教程? 一般你字段设置为枚举类型就可以,如果…

高轨避让笔记1

dlat 2asind(D/(2Re)); dlon 2asind(Dcosd(30)/(2*Re)); 这两句代码的作用是计算两个经纬度坐标点之间的球面距离。其中D是两个点在球面上的直线距离,Re是地球半径。公式中的"asin()"函数是反正弦函数,其返回值为弧度制下该角度的正弦值。因…

Java数组的学习(基础)

目录 第一章:数组的概念介绍 1.数组的概念 2.数组的初始化/数组的创建/数组的定义 第二章:数组的使用 数组添加元素的方法/数组的赋值 数组的遍历 数组之选择排序的升序 数组之冒泡排序的升序 数组的最小值 数组的反转 数组中常见的异常 第三…