本篇会加入个人的所谓鱼式疯言
❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言
而是理解过并总结出来通俗易懂的大白话,
小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.
🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 !!!
引言
在网络通信的世界里,速度与效率往往是至关重要的。想象一下,当你观看在线视频或进行实时游戏时,背后是UDP协议在快速地传输数据包。UDP以其轻量级和低延迟的特性,成为了这些应用的理想选择。
目录
-
Udp报文结构初识
-
Udp 数据格式与报文格式
-
Udp的检验和
一. Udp报文结构初识
在
Udp
协议中,如上图就是我们的报文结构
, 但实际的报文结构是 不换行 的。
-
协议报文 =
报头
+ 正文(载荷) 。
而上述画的就是
Udp
实际的报文结构, 由 左边的报头 和 右边的 正文(又称为载荷) 构成。
报头
是保存传递的 传输所需的各种信息 , 而 正文 是需要发送的数据内容
。
二. Udp 数据格式与报文格式
在上面内容中我们初步认识了 报文结构 ,而我们的 UDP的数据格式和报文格式 主要还是体现在 报头
的上。
在Udp的报文上主要由4部分: 源端口号 , 目标端口号 , Udp长度 , Udp的校验和(下面重点介绍) 。
而本篇文章的重点还是 介绍 报头结构
的内容。 💖 💖 💖 💖
他们的每一部分都是 16位 (比特位) 也就是
两个字节
, 所以Udp的报头大小为 八个字节(byte)。
并且数据格式的划分, 就是以
每两个字节
来进行 格式的划分
1. 源端口号与目标端口号
Udp 协议在传输过程是需要保持源端口号,与目标端口号的。
好比:
-
源IP: 自己的地址
-
目标IP: 对方的地址
-
源端口号: 自己的联系方式
-
目标端口号 : 对方的联系方式
鱼式疯言
并且值得注意的是,源端口号与目标端口号都是
16位的
, 这里的位是 比特位 , 16个比特位(bit)= 2个字节(byte) 。
因为我们的端口号也是 2个字节 的, 小伙伴们只需要填入
合法的端口号
即可。
2. Udp长度
这里的
Udp长度
是用来记录实际 整个报文的长度 , 也就是说实际报头
+正文
的总和的长度。
对于Udp协议来说, 记录的报文长度最大值是 固定的 , 都是 16个比特位(2个字节), 换成空间:
64KB
。
居然是64KB, 那么小编的问题来了, 64KB是大空间还是小空间呢?
其实啊, 对于十九世纪的计算机来说, 64KB
已经是个很大的数据了, 但对于现在的计算机来说, 64KB是非常小的空间大小。
试想一下, 我们一张照片的大小都有 10MB
那么大了。
那么如果要传输超过64KB的大数据怎么办呢?
以下有两种解决方案
<1>. 方案一
方案一就是将一份大数据进行 数据拆分, 在网络上分
不同的模块的数据
进行传输, 最后运输到达后在进行 数据合并 。
显然这种方案看似 很符合逻辑 , 但是对于网络通信来说, 网络上的数据传送存在很多 不确定性 , 准确性是比较差的 , 涉及到 数据拆分和数据合并
又是一个 很复杂 的过程, 一旦在网络传输过程中出现 数据丢失
, 就可能造成 严重的问题 。
<2>. 方案二
如果
Udp不行
, 那么我们是不是可以换一个协议, 那就是家喻户晓的Tcp协议
Tcp协议的出现就可以解决
Udp 空间太小
的问题, 对于Tcp来说空间长度 不是固定 的,空间长度是比较大
的, 并且是可以 动态扩展的 。 还有一个更大的优势就是: Tcp是作为 可靠传输 的特点之一
鱼式疯言
Udp协议 报文长度是 固定的
, 不适合
用来传输 比较大的数据量 , 所以用 Tcp的可靠传输来补充
。
报头结构的最后一点——Udp 校验和 , 也是体现 Udp 不可靠传输
的特点之一 的内容, 小伙伴们要细细理解哦。
三. Udp 检验和(检验和)
1. 检验和的初识
什么是检验和呢?
简单来说, 就是一种用来用一种 数据总和 来判断 数据是否有异常
的一种检查方式。
比如小编有一天想狂写博客, 想写 Java的数据类型, 逻辑运算符, 泛型类型, 面向对象这4篇文章。
我就会记住我一共要写 4篇文章 。
当我写了很久来检查, 写了的有Java的数据类型, 逻辑运算符, 泛型类型。
我数了一下才写 三篇文章, 这样就确定了 还有一篇文章 没有写。 从而达到了 检查的结果 的效果。
上面这个栗子就可以充分的说明 检验和
的 含义和作用 。
鱼式疯言
这里的检验和只是一个 简单的设定 , 有可能我都写了4篇, 但4篇中有一篇 不是Java的数据类型 。
这里只是错略的检查总和是否达到。 如果还要进一步 准确的检查 , 就需要更严谨的 检查策略和算法
。
2. Udp 检验和的设定原理
下面用 草图
来说明Udp下校验和的检查过程。
上面的检验方式我们称为CRC检验方式,
sum1
和sum2
的总和就是好比校验和, 根据在 传输前和传输后两次数据
得出的校验和进行判断。
如果
相等
, 说明数据传输 没问题
如果不相等
, 说明数据传输 有问题 。
一旦有问题就会把数据该传输的数据给 丢弃掉, 而
不会
进行重发。
鱼式疯言
细节补充:
对于检验和本身来说, 自身只有 两个字节 , 但是这并 不影响检验和的检验工作。
因为即使检验和数据太大 溢出了 , 我们只是检查前后校验和 是否相等 , 不必关注校验和是
多少
。
3. Udp 检验和的设定类型
上面的演示过程称为 CRC算法
。 其实除了 CRC算法之外,还有两个算法, 那就是
对于Udp的检验和的设定类型主要还有以下两种:
MD5 和 SHA1
<1>. MD5
对于MD5来说, 本质上可以理解为 字符串Hash算法
背后的实现过程是一个 “数学过程”
, 可以理解为 套公式 。
相比于MD5的 计算细节 , 我们更关心的MD5的 特点 :
- 定长: 无论输入的字符串
有多不同
, 有 多长多短 , 得到的MD5
都是固定长度 的。
- 分散性: 对于不同的字符串, 即使字符串中只改变了一点点, 得到的
MD5
差异都是 很大的。
越分散
越有利于做哈希表, 防止 哈希冲突 。
- 不可逆性: 任意一个字符串转换为 MD5值 后, 要是想把它从MD5
转化回
字符串是 不太可能 的。
鱼式疯言
对于第三点的 不可逆性 , 想要还原成 原始数据 是不太可能的, 适合做 加密算法 。
<2>. SHA1
SHA1 与MD5是非常 类似的
小编在这里就不赘述了,希望小伙伴们好好吸收上面的 Udp报头
的主要内容哦 💖 💖 💖 💖
总结
-
Udp报文结构初识: 初步认识了 Udp报文= 报头+ 正文(载荷) , 以及 报文和报头的不同 。
-
Udp 数据格式与报文格式:核心的认识到 Udp是
以2个字节
来划分格式单元的, 并且深入的了解了 Udp报头的每一个结构。 -
Udp的检验和: 认识了Udp的检验和的概念, 通过
CRC检验和来检查数据
是否 传输错误, 如果错误就进行
丢失数据 处理方式。 并扩展认识了 MD5 和 SHA1 的两种不同的检验算法。
如果觉得小编写的还不错的咱可支持 三连 下 (定有回访哦) , 不妥当的咱请评论区 指正
希望我的文章能给各位宝子们带来哪怕一点点的收获就是 小编创作 的最大 动力 💖 💖 💖