[Java EE] 网络原理 ---- UDP协议 序列化 / 反序列化 长短连接

Author:MTingle
major:人工智能


Build your hopes like a tower!

文章目录

文章目录

一. UDP 协议

1.UDP协议的特点

2. UDP 的结构

3. md5算法

二. 长短连接  协程  IO多路复用 序列化和反序列化

1.长短连接

2. 协程

3. IO 多路复用

4.序列化 / 反序列化




一. UDP 协议

1.UDP协议的特点

⽆连接: 知道对端的IP和端⼝号就直接进⾏传输,不需要建⽴连接

不可靠: 没有确认机制,没有重传机制;如果因为⽹络故障该段⽆法发到对⽅,UDP协议层也不会给应 ⽤层返回任何错误信息

⾯向数据报: 不能够灵活的控制读写数据的次数和数量

全双工: 允许数据在两个方向上同时传输

2. UDP 的结构

16位源端口号 + 16位目的端口号 + 16为数据报长度 + 16位 UDP 校验和 + UDP 载荷

UDP 报头共 16*4=64位 即8个字节

此处 UDP 报头使用 2 个字节表示端口号,所以端口号的取值范围为 0~65535(此处的最大值为64KB),因此,一个UDP数据报的最大长度为64KB,无法更长了,一旦整个数据报长度超出64KB,此时就可能发生数据截断,因此,UDP载荷部分可以承担的最大长度约为64KB.

校验和 / 检验和: 数据在传输过程中可能会损坏,校验和可以验证传输过程中数据是否正确,网络数据传输本质上是光信号 / 电信号 / 电磁波,这些信号很容易受到干扰,如果外界加上一次磁场,就可能出现低电平变成了高电平的状况, 0 -> 1 , 1 -> 0 ,此时我们称这种状况为比特翻转,校验和的作用就是用来识别是否出现了比特翻转!!!  

在 UDP 中,校验和使用比较简单的方式, CRC(循环冗余验证) 算法来完成校验.校验和的计算中,会拿着原始信息的一部分内容参与计算的,在传输数据前会进行计算一次,把算好的值放入 UDP 数据报中,传输完成后,会进行第二次计算,看一下两次得到的结果是否相等,但是校验和只能用来"证伪",有可能会出现虽然内容出错了,但是结果算出的校验和还是和之前一样,不过这种情况概率比较小,实践中可以忽略不计.

3. md5算法

除了CRC算法之外,还有一个业界常用的算法----md5算法,下面来介绍一下md5算法的特点:

1. 定长: 无论原始数据多长,算出来的md5的最终值都是固定长度,常见的版本有16位,32位,64位.

2. 分散: 计算 md5 的过程中,原始数据,只要变化一点点,算出来的 md5 值就会差异非常大,网络传输中,如果出现 bit 翻转, 意味着只是极少的 bit 翻转了即使就只是翻转 1 bit, 最终得到的 md5 都会差异非常大,这样的特性,也决定了 md5 也可以作为一个 字符串 hash 算法.

3.不可逆:给你一个源字符串,计算 md5 值,这个过程相对简单,但是给你一个算好的 md5 值,要将其还原成字符串,基本是无法完成的.原始字符串计算 md5 的过程损失了很多信息,直接还原是不行的.

很多网站都会让用户注册账号,输入的账号和密码如果保存在网站的数据库中,如果该网站被黑客入侵,用户的密码就泄露了,为了防止这种情况,各个网站都采取了密码加密的存储方式,数据库不再直接存储明文密码,即时网站服务器被黑客入侵,黑客也无法得知用户的原始密码是什么.

二. 长短连接  协程  IO多路复用 序列化和反序列化

1.长短连接

TCP发送数据时,需要先建⽴连接,什么时候关闭连接就决定是短连接还是⻓连接.

 短连接:每次接收到数据并返回响应后,都关闭连接,即是短连接。也就是说,短连接只能⼀次收发数据。

⻓连接:不关闭连接,⼀直保持连接状态,双⽅不停的收发数据,即是⻓连接。也就是说,⻓连接可 以多次收发数据。

对⽐以上⻓短连接,两者区别如下:

• 建⽴连接、关闭连接的耗时:短连接每次请求、响应都需要建⽴连接,关闭连接;⽽⻓连接只需要第⼀次建⽴连接,之后的请求、响应都可以直接传输。相对来说建⽴连接,关闭连接也是要耗时的,⻓连接效率更⾼。

• 主动发送请求不同:短连接⼀般是客⼾端主动向服务端发送请求;⽽⻓连接可以是客⼾端主动发送请求,也可以是服务端主动发。

• 两者的使⽤场景有不同:短连接适⽤于客⼾端请求频率不⾼的场景,如浏览⽹⻚等。⻓连接适⽤于 客⼾端与服务端通信频繁的场景,如聊天室,实时游戏等。

2. 协程

轻量级线程,本质上还是一个线程,用户态可以通过手动调度的方式让这一个线程并发做多个任务.

3. IO 多路复用

系统内核级别的机制,本质上是让一个线程同时去处理多个 socket,这些 socket 数据并非同一时刻都需要处理

4.序列化 / 反序列化

序列化: 序列化是指将数据结构或对象状态转换成可以存储或传输的形式的过程。这通常涉及到将数据结构或对象转换成字节流或字符串格式

反序列化: 反序列化是序列化的逆过程,即将序列化后的数据(字节流或字符串)转换回原始的数据结构或对象。

序列化和反序列化是数据交换和存储的基础。它们允许开发者在不同的系统、不同的平台之间传递复杂的数据结构,而无需担心数据的表示和解析问题。同时,通过序列化,开发者可以将对象的状态信息保存到持久化存储中,以便在程序重新启动时恢复对象的状态,从而实现数据的持久化。


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

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

相关文章

队列+宽搜专题篇

目录 N叉树的层序遍历 二叉树的锯齿形层序遍历 二叉树最大宽度 在每个树行中找最大值 N叉树的层序遍历 题目 思路 使用队列层序遍历来解决这道题,首先判断根节点是否为空,为空则返回空的二维数组;否则,就进行层序遍历&#x…

论文阅读 | 可证安全隐写(网络空间安全科学学报 2023)

可证安全隐写:理论、应用与展望 一、什么是可证安全隐写? 对于经验安全的隐写算法,即使其算法设计得相当周密,隐写分析者(攻击者)在观察了足够数量的载密(含有隐写信息的数据)和载体…

6.数据库-数据库设计

6.数据库-数据库设计 文章目录 6.数据库-数据库设计一、设计数据库的步骤二、绘制E-R图三、关系模式第一范式 (1st NF)第二范式 (2nd NF)第三范式 (3nd NF)规范化和性能的关系 一、设计数据库的步骤 收集信息 与该系统有关人员进行交流、座谈,充分了解用户需求&am…

Vulkan 学习(9)---- vkSuraceKHR 创建

目录 OverView创建窗口表面参考代码 OverView Vulkan 是一个平台无关的图形API,这意味着它不能直接与特定的窗口系统(Windows,linux 和 macOS 的窗口系统)进行交互 为了解决这个问题,Vulkan 引入了窗口系统集成(Window System Intergration …

DOM【JavaScript】

在JavaScript中,DOM (Document Object Model:文档对象模型) 是web页面的编程接口,用于表示和操作 HTML 和 XML 文档。它将文档结构化为一个树形结构,允许开发者通过 JavaScript 访问和修改网页的内容、结构和样式。以下是一些关于…

基于单片机的智能校园照明系统

由于校园用电量较大,本设计可以根据实际环境情况的改变,实现实时照明的控制。本设计以单片机芯片为控制芯片,热释电传感器采集教室中学生出入的信息,并把信息传递给单片机芯片,单片机芯片根据传感器传递过来的信息来控…

【软件测试】Bug 篇

哈喽,哈喽,大家好~ 我是你们的老朋友:保护小周ღ 今天给大家带来的是 【软件测试】Bug 篇,首先了解, 什么是Bug, 如何定义一个Bug, 如何描述一个 Bug, Bug的级别, 和 Bug 的生命周期, 以及测试人员跟开发人员产生争执如何处理,…

【MYSQL】聚合查询、分组查询、联合查询

目录 聚合查询聚合函数count()sum()avg()max()和min()总结 分组查询group by 子句having 子句 联合查询笛卡尔积内连接外连接自连接子查询单行子查询多行子查询from子句使用子查询 合并查询 聚合查询 聚合查询就是针对表中行与行之间的查询。 聚合函数 count() count(列名)&a…

个人随想-代码生成工具v0+claude+cursor

cursor出来已经有一段时间了,不知道大家用了感觉怎么样。今天就以我个人为例,给大家介绍一下我是如何使用cursor搭建原型。 首先,我并不觉得cursor对于后端程序员带来了革命性改进,我们与很多团队沟,使用cursor80%以上…

spring中的容器接口的实现类和功能

容器实现 BeanFactory 实现 这里我们就来一步步实现BeanFactory的功能。 首先创建我们需要的类 Configuration static class Config{Beanpublic Bean1 bean1(){return new Bean1();}Beanpublic Bean2 bean2(){return new Bean2();}}static class Bean1{private static fina…

【Linux】Shell 编程规范及检查工具推荐

本文内容均来自个人笔记并重新梳理,如有错误欢迎指正! 如果对您有帮助,烦请点赞、关注、转发、订阅专栏! 专栏订阅入口 | 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 | 往期精彩文章 【Docker】(全…

【RH124】解释Linux文件系统权限

RH124教材中控制对文件的访问一章中有一道解释Linux文件系统权限的测验题,可以一起来看看: 一、权限解释 这是通过 ls -l 命令查看的结果。它显示了文件或目录的权限、拥有者、所属组等信息。 1、长列表的第一个字符表示文件类型: -是常…

【C语言零基础入门篇 - 16】:栈和队列

文章目录 栈和队列栈栈功能的实现源代码 队列队列功能的实现源代码 栈和队列 栈 什么是栈:功能受限的线性数据结构 栈的特点:先进后出 。例如:仓库进货、出货。 栈只有一个开口,先进去的数据在栈底(bottom&#xf…

STM32篇:STM32CubeMX的安装

一.介绍与安装 1.作用 通过界面的方式,快速生成工程文件。 2.下载 官网 https://www.st.com/zh/development-tools/stm32cubemx.html#overview 3.安装 一路下一步,建议不要安装在C盘 4.配置 更新固件包位置(比较大,默认在…

LeetCode 257. 二叉树的所有路径(回溯详解)

文章目录 LeetCode 257. 二叉树的所有路径思路递归版本一:非常明确的回溯代码版本二:精简的回溯代码 LeetCode 257. 二叉树的所有路径 LeetCode 257. 二叉树的所有路径 给定一个二叉树,返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节…

全网最适合入门的面向对象编程教程:51 Python函数方法与接口-使用Zope实现接口

全网最适合入门的面向对象编程教程:51 Python 函数方法与接口-使用 Zope 实现接口 摘要: 在 Python 中,Zope 提供了一种机制来定义和实现接口。Zope 的接口模块通常用于创建可重用的组件,并确保组件遵循特定的接口规范。 原文链…

力扣 209.长度最小的子数组

一、长度最小的子数组 二、解题思路 采用滑动窗口的思路&#xff0c;详细见代码。 三、代码 class Solution {public int minSubArrayLen(int target, int[] nums) {int n nums.length, left 0, right 0, sum 0;int ans n 1; for (right 0; right < n; right ) { …

【二等奖论文】2024年华为杯研赛D题成品论文(后续会更新)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片&#xff0c;那是获取资料的入口&#xff01; 点击链接获取【2024华为杯研赛资料汇总】&#xff1a; https://qm.qq.com/q/jTIeGzwkSchttps://qm.qq.com/q/jTIeGzwkSc 题 目&#xff1a; 大数据驱动的…

一劳永逸:用脚本实现夸克网盘内容自动更新

系统环境&#xff1a;debian/ubuntu 、 安装了python3 原作者项目&#xff1a;https://github.com/Cp0204/quark-auto-save 感谢 缘起 我喜欢看电影追剧&#xff0c;会经常转存一些资源到夸克网盘&#xff0c;电影还好&#xff0c;如果是电视剧&#xff0c;麻烦就来了。 对于一…

深度学习-卷积神经网络(CNN)

文章目录 一、网络构造1. 卷积层&#xff08;Convolutional Layer&#xff09;&#xff08;1&#xff09;卷积&#xff08;2&#xff09;特征图计算公式&#xff08;3&#xff09;三通道卷积 2. 激活函数&#xff08;Activation Function&#xff09;3. 池化层&#xff08;Pool…