JavaEE:探索网络世界的魅力——玩转UDP编程
文章目录
- UDP
- UDP的特点
- UDP协议端格式
- 校验和
- 前置知识
- 校验和具体是如何工作的?
UDP
UDP的特点
UDP传输的过程类似于寄信.
- 无连接: 知道对端的IP和端口号就直接进行传输,不需要建立连接.
- 不可靠: 没有确认机制,没有重传机制,如果因为网络故障导致该段无法到达对方,UDP协议也不会给应用层返回任何错误信息.
- 面向数据报: 不能够灵活的控制读写数据的次数和数量.
UDP协议端格式
学习一个网络协议,主要就是学习"数据格式",“报文格式”.

上图为了排版,于是进行了换行,实际上UDP的数据是一整行的,并没有换行操作~

UDP报头是固定长度的,总共8个字节.
报头中的四个字段,没有指定分隔符,而是通过固定长度来进行区分的.
可以看到我们是使用2个字节的长度来表示端口号的.如果端口号超过2个字节,那么这个端口号就会在系统底层被"截断".
- 源端口,目的端口: 在网络通信中,涉及到四个关键信息,源IP,目的IP,源端口,目的端口.
我们可以认为它们分别对应发件人地址,收件人地址,发件人电话,收件人电话.
- UDP报文长度:
UDP报文长度,就是报头长度+载荷长度.
报文长度的单位是"字节".
比如,报文长度为1024,这就表示整个UDP数据报就是1024字节.
由于是使用2个字节来表示这个长度,它的最大值就为65535,也就是64kb.
换句话说UDP能传输的数据最大长度就是64kb(包括UDP首部).
然而64kb在当今的互联网环境下,是一个非常小的数字.
一旦数据超过64kb,就可能导致数据被截断,就可能对公司造成损失.
到这里可能有人就会想到,如果把UDP的长度字段,扩展一下,不就行了?
- 听起来确实是一个好方法,但是实际上,这是这是非常不靠谱的,不靠谱不是"技术问题",而是"政治问题".
作为一个"网络协议"不是单方面修改就可以的,即使修改了你的服务器的内核中UDP的实现,可是,客户端那边,用户的电脑上,咋办???
服务器要改,客户端也要改,客户端你咋改??
就算你真的把用户的系统都改了,但是人家用户也不只是用你的服务器啊,还要用别人的啊.
除非你能够把全世界所有的PC/手机/服务器所有涉及到UDP协议的地方,都进行统一修改.
相比于修改UDP,不如发明出一个新的协议来代替UDP,可能更简单一些~
校验和
前置知识
在网络传输的过程中,是非常容易出现错误的~
电信号/光信号/电磁波 如果收到环境的干扰,可能就会使里面传输的信号发生改变.(高中物理就教过我们,电厂/磁场 都是能相互影响的)
为了能够"发现"或者"纠正"这里出现的错误,于是我们引入了"校验和".
校验和具体是如何工作的?
校验和可以在要传输的数据中,引入额外信息,用来发现/纠正传输数据的错误.
在UDP中,使用2个字节,作为校验和.
UDP使用简单有效的方案,CRC校验和(循环冗余校验).
更具体一点,就是把UDP数据报里的整个数据,都进行遍历,分别取出每个字节,往一个两个字节的变量上进行累加,由于整个数据可能很多,加着加着可能使结果溢出了,但是溢出也没关系,重点不在于最终的和是多少,而是关心校验和的结果是否会在传输过程中发生改变.

接收方就可以根据数据的内容,按照同样的算法再算一遍校验和,得到checksum2.
如果传输的数据在网络通信过程中没有发生任何改变,此时算出来的checksum1 == checksum2.
反之,如果发现checksum1 != checksum2,我们就可以认为数据在网络传输过程中出错了.
在计算校验和的过程中,是否可能出现两个不同的数据,生成的校验和相同呢?
这个是可能会存在的,但是概率特别低.
这个问题对于CRC来说,概率可能比其他方案高一点.
除了CRC之外,还有一些其他的算法来实现校验和,比如MD5和SHA1.
MD5算法,本质上是一个"字符串hash算法",它背后的实现过程是一个"数学过程",我们可以简单理解为套公式~
相比于MD5的计算细节,我们更关心它的特点[重点掌握]:
- 定长: 无论输入的字符串,长度多长,算出的MD5的结果都是固定长度.(适合做校验和算法)
- 分散: 输入的内容,哪怕只有一点点发生改变,经过计算得到的MD5值都会相差很大.(适合做hash算法)
- 不可逆: 根据输入内容,计算MD5,非常简单,但是如果已知MD5值,还原出原始的内容,这在理论上是不可行的.(适合作为加密算法)
说个题外话,MD5解密网站,并非是真的解密,而是它把大量常见的字符串MD5值,提前通过哈希表的方式存储好了.
MD5不可逆(不止MD5还有其他很多加密算法)都是建立在人类当下的算力水平之上的.破解的计算量非常非常大,使用当前人类最厉害的计算机,也要连续算几十年,几百年…
本文到这里就结束啦~

相关文章:
JavaEE:探索网络世界的魅力——玩转UDP编程
文章目录 UDPUDP的特点UDP协议端格式校验和前置知识校验和具体是如何工作的? UDP UDP的特点 UDP传输的过程类似于寄信. 无连接: 知道对端的IP和端口号就直接进行传输,不需要建立连接.不可靠: 没有确认机制,没有重传机制,如果因为网络故障导致该段无法到达对方,UDP协议也不会…...
生成式人工智能:企业数字化转型的全新引擎,深度解析The Open Group 2024生态系统架构·可持续发展年度大会
生成式人工智能:企业数字化转型的全新引擎,深度解析The Open Group 2024生态系统架构可持续发展年度大会 随着人工智能技术的飞速发展,生成式人工智能(Generative AI)正以惊人的速度渗透到各行各业,成为企…...
阿里云k8s如何创建可用的api token
阿里云的 Kubernetes 配置文件(如您所提供的 YAML 格式文件)通常不会直接包含用于连接 Kubernetes 集群的令牌。而是包含了客户端证书和私钥数据,这些是用于通过证书验证而不是令牌验证的方式来与 Kubernetes API 服务器进行安全交互的。 1.…...
leetcode刷题day30|贪心算法Part04重叠区间问题(452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间)
前言:今天的三道题目都是重叠区间的问题。 452. 用最少数量的箭引爆气球 思路:局部最优:当气球出现重叠,一起射,所用弓箭最少; 全局最优:把所有气球射爆所用弓箭最少。 按照起始位置排序&…...
MQTT客户端实战:从连接到通信。详细说明MQTT客户端和MQTT代理进行通信
EMQX安装 EMQX服务器安装 安装文档,见链接不另外写 https://docs.emqx.com/zh/emqx/latest/deploy/install-ubuntu.html 启动 EMQX 启动为一个 systemd 服务: sudo systemctl start emqx在windows安装客户端 在线 MQTT WebSocket 客户端工具&…...
【go/方法记录】cgo静态库编译以及使用dlv定位cgo崩溃问题
目录 说在前面文件树静态库编译cgo使用崩溃模拟使用dlv定位崩溃参考 说在前面 测试环境:WSL2go版本:go version go1.23.1 linux/amd64gcc版本:gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0cmake版本:3.22.1 文件树 ├── buffer …...
(笔记自用)位运算总结+LeetCode例题:颠倒二进制位+位1的个数
一.位运算总结: 在解题之前理解一下为什么需要位运算?它的本质是什么? 力扣上不少位运算相关的题,并且很多题也会用到位运算的技巧。这又是为什么? 位运算的由来 在计算机里面,任何数据最终都是用数字来表示的&…...
024.PL-SQL进阶—游标
课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :…...
从零开始使用树莓派debian系统使用opencv4.10.0进行人脸识别(保姆级教程)
一、总体架构 本文主要是使用树莓派自带的csi摄像头,搭配上opencv4.10.0进行物体的识别。本文使用的环境是python3.7.3,环境不一样有可能安装的opencv的过程也会很不一样,但是python的环境我们可以自己自行安装。 二、树莓派系统的安装 本文…...
golang qq邮件发送验证码
验证码的使用场景 注册/登录:使用验证码可以有效减少垃圾账号注册和恶意登录;短信接口保护:高效减少防止短信接口被刷情况;提交/投票:有效减少恶意刷单、恶意提交、恶意投票等情况;密码找回:用…...
鸿蒙 OS 开发单词打卡 APP 项目实战 20240922 笔记和源码分享
配套有完整的录播课, 需要的私信. 零基础入门级别, 有点前端基础都能学会. 效果截图: 代码截图: 页面完整代码: import { AnswerStatus } from ../enums/AnswerStatus import { PracticeStatus } from ../enums/PracticeStatus import { getRandomQuestions, Question …...
力扣P1706全排列问题 很好的引入暴力 递归 回溯 dfs
代码思路是受一个洛谷题解里面大佬的启发。应该算是一个dfs和回溯的入门题目,很好的入门题目了下面我会先给我原题解思路我想可以很快了解这个思路。下面是我自己根据力扣大佬写的。 我会进行详细讲解并配上图辅助理解大家请往下看 #include<iostream> #inc…...
使用Python Pandas导入数据库和文件数据
大家好,在数据分析过程中,数据的导入是第一步,也是最重要的一步。Python的Pandas提供了强大的数据读取功能,支持从多种数据源导入数据,包括CSV、Excel、JSON、SQL数据库、网页等。Pandas库不仅能够处理常见的文件格式&…...
lef 中antenna解释
这些规则主要涉及集成电路设计中的天线效应(Antenna Effect)和通孔(Via)设计规则。 ANTENNAAREADIFFREDUCEPWL 这条规则指定了一个分段线性函数,用于根据连接到切割层的扩散区面积来计算cut_area的缩减因子。扩散区面积值应从0开始单调增加。如果没有定义此规则,PAR(mi)方程中的…...
初试Bootstrap前端框架
文章目录 一、Bootstrap概述二、Bootstrap实例1、创建网页2、编写代码3、代码说明4、浏览网页,查看结果5、登录按钮事件处理6、浏览网页,查看结果 三、实战小结 一、Bootstrap概述 大家好,今天我们将一起学习一个非常流行的前端框架——Boot…...
mysql数据库:超键、候选键、主键与外键
mysql数据库:超键、候选键、主键与外键 1、超键(Superkey)2、候选键(Candidate Key)3、主键(Primary Key)4、外键(Foreign Key) 💖The Begin💖点点…...
音频转MP3格式困难?如何轻松实现wav转mp3?
格式多样化为我们带来了灵活性和创意的无限可能,但同时,不同格式间的转换也成为了不少用户面临的难题。尤其是当你手握珍贵的WAV音频文件,却希望它们能在更多设备上流畅播放或节省存储空间时,wav转mp3的需求便应运而生。WAV以其无…...
基于vue框架的大连盐业有限公司生产管理系统的设计与实现3hk5y(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
系统程序文件列表 项目功能:计划员,工艺员,生产建模,生产计划,生产信息,生产监视,工艺质量,盐政信息 开题报告内容 一、引言 随着信息技术的飞速发展和市场竞争的日益激烈,传统盐业企业如大连盐业有限公司正面临着转型升级的迫切需求。传统管理模式下…...
《深入理解JAVA虚拟机(第2版)》- 第13章 - 学习笔记【终章】
第13章 线程安全与锁优化 13.1 概述 面向过程的编程思想 将数据和过程独立分开,数据是问题空间中的客体,程序代码是用来处理数据的,这种站在计算机角度来抽象和解决问题的思维方式,称为面向对象的编程思想。 面向对象的编程思想…...
网络工程师学习笔记——网络互连与互联网(三)
TCP三次握手 建立TCP连接是通过三次握手实现的,采用三报文握手主要是为了防止已失效的连接请求报文突然又传送到了,因而产生错误 主动发起TCP连接建立的称为客户端 被动等待的为TCP服务器,二者之间需要交换三个TCP报文段 首先是客户端主动…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
