UDP协议

news2025/3/14 3:26:03

在这里插入图片描述

文章目录

  • 一、前沿知识
    • 应用层
    • 传输层
  • 二、UDP协议

一、前沿知识

应用层

应用层:描述了应用程序如何理解和使用网络中的通信数据。
我们程序员在应用层的主要工作是自定义协议,因为下面四层都在系统内核/驱动程序/硬件中已经实现好了,不能去修改。
自定义协议需要做好两件事:
1.明确协议要传递那些信息
2.确定数据组织格式: xml,json,protobuffer
当然我们的应用层也有一些成品的协议:HTTP协议

传输层

传输层是紧接着应用层的一层,虽然传输层已经被操作系统内核实现好了,但是我们在写代码的时候,要调用系统的Socket api去完成网络编程

端口号: IP是用来确定网上上的一台主机,那么端口号就是用来确定主机上的一个进程的,端口号是传输层的一个概念
TCP和UDP协议的报头中都会包含源端口和目的端口,并且都是使用2个字节,16bit来表示,端口号的范围是 0 -> 65535,但是我们日常使用一般都是从1024开始的,因为0 -> 1023这个范围的端口系统已经分配给了一些知名的应用程序了,也称这些端口为" 知名端口号/具名端口号".
虽然我们建议1023以下的端口别使用,但不代表完全不能使用,虽然这些端口分配给了特定程序,但是这些程序是否在主机运行着,是否安装了这些程序都是不确定的,如果我们想要使用1023以下的这些端口,需要注意以下2点:
1.确定这个端口是否有程序在绑定
2.是否具有管理员权限。

二、UDP协议

我们在前面为大家介绍过了UDP协议的一些特点:无连接,不可靠,面向数据报,全双工,这些特性在我们实现回显UDP服务器客户端程序的时候有所体现,那么今天我们来研究以下UDP协议的报文结构。
在这里插入图片描述
相信学过计算机网络这门课的小伙伴们,看到这张图都不陌生,但实际上我们课本这样画是为了排版方便。
在这里插入图片描述
UDP的载荷数据就是通过UDP socket send()要发送的数据,在前面拼接上8个字节的报头)
我们来看一下UDP报头所包含的信息,UDP报头一共8个字节,4个部分每部分占2个字节,但正是因为,我们的UDP报文的长度也受到了限制,UDP报文长度是用2个字节表示的,2个字节表示0 -> 65535(64KB),也就表示了我们UDP数据报最大只能传输64KB的数据。
相信有同学会问,如果我想传一个大于64KB的数据报呢?
有两种解决办法:
1.我们应用层在代码层面将我们要传输的数据报进行分包,通过多个UDP数据报进行发送。
如果采用1,本来我们send一次,现在需要多次send,就好比我们扔垃圾,垃圾太多,一个小袋子装不下,需要装许多个,装垃圾,提垃圾,倒垃圾都比较麻烦,基于上面这种情况,我们可以直接用一个超大垃圾袋,一次性就搞定了,这也是第二种方案。
2.不使用UDP,使用TCP,TCP没有长度限制。

我们报头信息中还有源端口和目的端口信息,我们的一次网络通信,涉及到五元组:源IP,源端口,目的IP,目的端口,协议类型,端口信息就是由我们传输层体现的。

校验和:验证传输的数据是否是正确的,我们在网络传输中往往不是一帆风顺的,可能会受到一些干扰,在这些干扰下可能会出现比特翻转的现象, 0 -> 1,1 -> 0的现象。
我们网络传输中,物理层传输的本质就是光信号/电信号,这些信号会受到一些物理环境的影响,比如电磁场,高能射线等等,有时候仅仅是一个比特位的变化,对于原本数据的含义就发生了致命的变化,我们对于这些不可避免的现象,只能是及时识别当前的数据是否出现问题。
因此就引入了校验和来干这一项工作,针对数据内容进行一系列的数学运算,得到一个短小的结果,如果我们的数据内容一定,那么我们得到的校验和就是一定的,如果我们的数据变了,那么我们的校验和就变了。
在这里插入图片描述
我们接收方在接收到数据之后会在计算一边校验和,看看是否和发送方发来的校验码对的上,如果对上了就证明传输没问题,如果对不上,证明传输出错了。
在这里插入图片描述
我们根据收到的数据我要吃火锅计算出了0x1122发现和接收到校验码一致,证明我们这次数据传输没问题。
在这里插入图片描述
我们根据接收到的数据我要吃烤肉计算出来0x5566发现和接收到的校验码不一致,证明我们的传输出错了。
当然有同学肯定想到了,是否存在一种这样的情况,我们接收到不同的数据,但是计算出的校验码恰好相同,这种情况理论上是存在的,但是概率特别小,就忽略不计了。

我们网络传输中,生成校验和的算法有很多,我们这里只介绍比较知名的几个:
CRC(循环冗余校验): 实际的CRC校验码生成是采用二进制的模2算法(即减法不借位、加法不进位)计算出来的,这是一种异或操作。这种方法比较好算,但是校验的效果不够理想。
MD5: MD5是使用一系列公式来进行更复杂的数学运算,具有以下几个特点:
1.定长:无论原始数据多长,得到的MD5值都是固定长度(4/8字节)
2.冲突概率小:我们的原始数据即使变动了一点点,算出来的MD5值的差别都很大(MD5结果更分散了)
3.不可逆:我们通过原始数据即使出MD5比较容易,但是通过MD5还原成原始数据很难,理论上是不可实现的。
基于MD5的这些特点,MD5的应用场景就有许多了:
1.校验和
2.加密
3.计算Hash值
可能大家在网上会看到一些MD5的方法,其实也很好理解,有人将一些常见的字符串的MD5值进行汇总成一张表,解密的过程相当于查表,但仅限于一些常见的字符串,其他也查不到。
SHA1: SHA1和MD5类型,这里就不具体介绍了,感兴趣的同学可以上网查询下资料。

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

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

相关文章

【数据集】中国各类水文专业常用数据集合集

1 水文气象数据 1.1 中国站点尺度天然径流量估算数据集(1961~2018年) 论文: J2022-High-quality reconstruction of China’s natural streamflow-缪驰远(北京师范大学地理科学学部) 研究内容&#xff1a…

TLV73312PQDRVRQ1稳压器TPS622314TDRYRQ1应用原理图

一、TLV73312PQDRVRQ1低压差稳压器 1.2V 300MATLV733 300mA 低压差稳压器是有 300mA 拉电流能力的超小型、低静态电流 LDO,具有良好的线路和负载瞬态性能。这些器件具有 1% 的典型精度。TLV733 系列设计具有先进的无电容器结构,确保无需输入或输出电容器…

thinkPHP6接入workman

上篇介绍了workman实现websocket功能(链接:https://blog.csdn.net/weixin_38155824/article/details/128952037) 这篇就介绍如何在thinkPHP6项目中接入workman。 利用TP6的自定义命令开启websocket服务 查看TP6手册:命令行>自…

Oracle Dataguard(主库为 Oracle rac 集群)配置教程(01)—— dataguard 服务器安装 Oracle 软件

Oracle Dataguard(主库为 Oracle rac 集群)配置教程(01)—— dataguard 服务器安装 Oracle 软件 / 本专栏详细讲解 Oracle Dataguard(Oracle 版本为11g,主库为双节点 Oracle rac 集群)的配置过程…

共享模型之无锁(二)

1.原子基本类型 1>.J.U.C并发包提供了多个原子基本类型: AtomicBoolean AtomicInteger AtomicLong ...2>.以AtomicInteger为例: public class TestAtomicIntegerDemo01 {public static void main(String[] args) {//原子整型类AtomicInteger i new AtomicInteger(0);…

linux入门---基础指令(上)

这里写目录标题前言ls指令pwd指令cd指令touch指令mkdirrmdirrmman指令cp指令mv指令前言 我们平时使用电脑主要是通过鼠标键盘以及操作系统中自带的图形来对电脑执行相应的命令,比如说我想打开D盘中的cctalk这个文件: 我就可以先用鼠标左键单击这个文件…

负载均衡的方式

在业务初期,我们一般会先使用单台服务器对外提供服务。随着业务流量越来越大,单台服务器无论如何优化,无论采用多好的硬件,总会有性能天花板,当单服务器的性能无法满足业务需求时,就需要把多台服务器组成集…

五岳科技与亚马逊云科技,助力中国产品实现全球品牌力提升

随着DTC模式实践在全球跨境电商市场取得成功,越来越多中国品牌走出国门,走向世界。而文化差异、语言隔阂、信息差等始终是行业中的共同难题,如何提高竞争壁垒与解决数据困境成为企业的共同需求。 作为一家致力于用AI技术赋能传统行业升级以…

将群晖NAS变为本地盘

本文介绍一个工具,可以在 Windows 系统下将群晖NAS的目录变为本地盘,好处是在外部访问的时候,能够大大改善体验。可以用本地的应用程序直接打开,速度依赖网络带宽,正常情况下,看视频是没有问题的。当然&…

MySQL入门篇-Xtrabackup详细介绍

Xtrabackup简介 MySQL冷备、mysqldump、MySQL热拷贝都无法实现对数据库进行增量备份。在实际生产环境中增量备份是非常实用的,如果数据大于50G或100G,存储空间足够的情况下,可以每天进行完整备份,如果每天产生的数据量较大&#…

Vue3 企业级优雅实战 - 组件库框架 - 11 组件库的打包构建和发布

回顾第一篇文章中谈到的组件库的几个方面,只剩下最后的、也是最重要的组件库的打包构建、本地发布、远程发布了。 1 组件库构建 组件库的入口是 packages/yyg-demo-ui,构建组件库有两个步骤: 添加 TypeScript 的配置文件: tsco…

百趣代谢组学资讯:槟榔的基因组为雌雄同株植物的性别决定提供见解

文章标题:The genome of Areca catechu provides insights into sex determination of monoecious plants 发表期刊:New Phytologist 影响因子:10.323 作者单位:海南大学 百趣生物提供服务:植物激素高通量靶标定…

怎么查看自己的电脑IP地址?

作为一个互联网冲浪侠,你应该对IP地址并不陌生:访问网站和网络服务器知道你的IP地址;发送的电子邮件头包含你的IP地址。如果有人想从IP地址追踪到你的物理地址和身份,是有可能的。 IP地址代表互联网协议地址。它是一个特殊的号码…

linux高级命令系列一

重定向命令学习目标能够使用重定向命令将终端显示内容重定向到文件1. 重定向命令的介绍重定向也称为输出重定向,把在终端执行命令的结果保存到目标文件。2. 重定向命令的使用命令说明>如果文件存在会覆盖原有文件内容,相当于文件操作中的‘w’模式>…

C/C++:预处理(下)

目录 一.回顾程序的编译链接过程 二. 预处理之预定义#define 1.#define定义的标识符 2.#define定义的宏 3.带副作用的表达式作为宏实参 4.两个经典的宏 5.#define使用的一些注意事项小结 6.宏与函数的比较 7.#undef 附:关于#define的三个冷知识 三. 条件…

Android 14 首个开发者预览版到来

作者 / Dave Burke, VP of Engineering让 Android 在数十亿用户的手中良好运行,是我们、Android 设备制造商,以及开发者社区的一致追求。今天,我们为大家带来 Android 14 的第一个开发者预览版。大家针对预览版提出的反馈具有重要意义&#x…

企业管理的三大基石及其关系

企业管理的三大基石三大基石是什么三大基石的关系制度:管理:文化:三大基石是什么 一个企业,不管它是属于哪种类型,影响员工行为的都有三种力量——制度、管理和文化,这是管理的三大基石。 三大基石的关系 …

sleep()、wait()、 join()、 yield()的区别

在这之前,需要明白锁池和等待池的含义 1.锁池 所有需要竞争同步锁的线程都会放在锁池当中,比如当前对象的锁已经被其中一个线程得到,则其他线程需要在这个锁池进行等待,当前面的线程释放同步锁后锁池中的线程去竞争同步锁&#…

ThreadLocal 源码级别详解

ThreadLocal简介 稍微翻译一下: ThreadLocal提供线程局部变量。这些变量与正常的变量不同,因为每一个线程在访问ThreadLocal实例的时候(通过其get或set方法)都有自己的、独立初始化的变量副本。ThreadLocal实例通常是类中的私有静…

excel拆分实例:如何快速制作考勤统计分析表

面对新的统计需求,很多人会一下变懵,不知如何办。如果涉及的统计有一千多行数据,哭的心思都有了:什么时候才能下班哟!今天老菜鸟通过考勤统计分析表实例分享自己面对新统计需求的解决方法:简化数据、找数据…