【JavaEE初阶系列】——网络原理之进一步了解应用层以及传输层的UDP协议

目录

🚩进一步讲应用层

🎈自定义应用层协议

🎈用什么格式组织

👩🏻‍💻xml(远古的数据组织格式)

👩🏻‍💻json(当下最流行得一种数据组织格式)

👩🏻‍💻protobuffer(使用二进制方式来组织数据)

🚩进一步讲传输层中UDP(重点)

 🎈UDP协议

👩🏻‍💻UDP报文长度 

👩🏻‍💻校验和

👩🏻‍💻代码中了解UDP特点

👩🏻‍💻基于UDP的应用层协议


🚩进一步讲应用层

🎈自定义应用层协议

在应用层这里,很多时候,都是程序员“自定义”应用层协议的。

就是自己定义协议,约定好数据如何传输。

  • 1.根据需求,明确要传输的信息
  • 2.约定好信息按照什么格式来组织

点外卖:点开外卖软件,首先会看到商家列表,这里就涉及到程序和服务器之间进行的网络通信交互。

客户端请求:用户信息,位置信息 (此处假设就使用简单的格式来组织,使用文本的方式,三个属性,使用","来分割。

1000,100,30

服务器响应:商家列表(多个商家),每个商家,包含 名称,图片,距离,简介,评分。

此处假设使用简单格式来组织,使用文本格式,每个商家信息占一行,每个属性使用“,”来分割。

上述的过程就是自定义协议,自定义协议,具体的方式,也是非常灵活的,针对这里的情况,使用啥样的格式来组织,都ok,只要客户端和服务器这边都能够对应上即可。(上述通过行文本方式构造的协议,属于比较粗糙的方式)


🎈用什么格式组织

👩🏻‍💻xml(远古的数据组织格式)

通过标签来组织数据

<request><userid>1000</userid><position>100,30</position>
</request>

HTML属于xml的变种

xml是一个通用的数据格式,这里有啥标签,标签有啥含义,都是程序员自定义的

html则是一个专属的数据格式,有啥标签,标签是啥含义,都是有一个标准委员会,规定好的。<a>超链接 <img>图片 <input>输入框 <li>有序列表

xml优势:让数据的可读性变得更好了

xml劣势:标签写起来非常繁琐,传输得时候也占用更多网络宽带


👩🏻‍💻json(当下最流行得一种数据组织格式)

{userid:"1000",position:"100,30"
}

键值对结构:{}把所有的键值对给包裹起来。键值对之间,使用","分割,键和值之间,使用":"分割。键固定就是string类型,值得话可以是数字,可是是字符串,也可以是json,还可以是数组。

json优势:可读性比较好得,比xml更简洁

json劣势:同样也是会在网络传输中,消耗额外得带宽(需要把key也进行传输)


👩🏻‍💻protobuffer(使用二进制方式来组织数据)

pb的优势:占用带宽最低,传输效率最高,非常适合于对于性能要求比较高的场景。

pb的劣势:可读性不好(二进制结构,肉眼无法阅读),一定程度上影响开发的效率。


相对于计算机的执行效率来说,对于程序员,开发效率是最重要的。


🚩进一步讲传输层中UDP(重点)

  • UDP:无连接,不可靠,面向数据报,全双工
  • TCP:有连接,可靠传输,面向字节流,全双工

端口号:

  • 写一个服务器,必须手动指定一个端口号,通过端口号来区分当前主机上的不同的应用程序
  • 写一个客户端,客户端在通信的时候也会有一个端口号(代码感受不到),系统自动分配。(如果指定端口号发现和自己主机的程序的端口号一样,那么就冲突了)

端口号固定占2个字节,表示的数据范围0--65535,一般来说,0是不用的。

  • 1-1023 称为“知名端口号”

      

  • 1024-65535 普通端口号(不要冲突即可)

 🎈UDP协议

学习一个协议,其中最主要的工作,就是去理解协议报文格式。


👩🏻‍💻UDP报文长度 

 UDP报文长度,是2个字节,16位表示的数据,表示的范围是0-65535=》64kb

UDP报文长度有限制64k

我们知道搜狗的浏览器有些网页下面会显式广告俩字,由于业务的发展,广告越来越多了,广告的样式也越来越复杂了,导致商搜服务器和入口服务器之间交互的数据流,已经接近64kb,如果超过上限,数据就会出现截断,最终展示在页面上的数据肯定会出错的。

解决方法:

  • 1.把数据拆分成2个包,使用多个UDP数据报进行传输,这个方案,秒被否定(开发成本比较大),拆包,又如何组包呢。
  • 2.直接使用TCP,TCP没有包大小的限制(从这里可以说明,如果是大文件的话都是需要用到TCP,UDP是有包大小限制的)

👩🏻‍💻校验和

前提:网络传输中,由于一些外部干扰,就可能会出现数据传输出错的情况。

(光信号/电信号,磁场,电场,高能离子....某个地方本来是传输低电平,在干扰下就成了高电平了)因此我们就需要有办法,能够识别出出错的数据,校验和,就是这种的一种检查手段。

举个例子:

  • 就比如我去超市买菜,妈妈告诉我需要买 西红柿 鸡蛋 芹菜 黄瓜 四样菜,当我买完数数是5样,那么肯定是出错了,然后再数数是3样,发现买少了,继续进行校验。(这里我们用个数来表示校验机制,但是还不够,需要结合内容来计算)
  • 生活中都需要很多校验才能确保自己做的事情是否有错误。我们小时候计算一个题目需要通过校验来检查等等

校验和,其实本质上是一个字符串,体积比原始的数据更小,又是通过原始数据生成的。原始数据相同,得到的校验和就一定相同,反正,校验和相同,原始数据大概率相同。

如何基于校验和来完成数据校验呢?

  • 1.发送方,把要发送的数据整理好(称为data1),通过一定的算法,计算出checksum1
  • 2.发送方把data1和checksum1一起通过网络发送出去
  • 3.接收方收到数据,收到的数据称为data2(数据可能和data1就不一样了),收到数据checksum1
  • 4.接收方再根据data2重新计算校验和(按照相同的算法),得到checksum2
  • 5.对比checksum1和checksum2是否相同,如果不同,则认为data2和data1一定不相同, 如果checksum1和checksum2相同,则认为data1和data2大概率是相同的(理论上存在不同的可能性,概率比较低)

 校验和是怎么算的?

计算校验和,有很多算法

  • UDP中使用的是CRC算法(循环冗余算法)

把当前要计算校验和的数据,每个字节,都进行累加,把结果保存到这俩个字节的变量中,累加过程中如果溢出,也没关系。如果中间某个数据,出现传输错误,第二次计算的校验和就会和第一次不同。

CRC这个算法不是特别的靠谱,导致俩个不同的数据,得到相同的校验和概率比较大,比如如果前一个字节恰好少1,后一个字节恰好多1,但是最终得到相同的校验和。

  • md5 / sha1算法

1.定长:无论你的原始数据多长,计算得到的md5,都是固定长度。(校验和本身就不能太长,如果太长就不方便网络传输)

2.分散:给定两个原始数据,哪怕绝大部分内容都一样,只要其中一个字节不同,得到的md5值都会差异很大。md5也非常适合作为hash算法(哈希表是把一个key通过hash函数转换成数组下标,希望hash函数能够做到尽量分散,产生hash冲突的概率才会比较低)

3.不可逆:给你一定原始数据,计算md5,很容易,给你md5,还原出原始数据,计算量非常庞大,以至于超出了现有计算机的算力极限,理论上是不行的。md5也可以应用在一些密码学场景中。


👩🏻‍💻代码中了解UDP特点

1.面向数据报:

需要将数据用DatagramPacket对象存储起来

2.无连接:UDP本身是不会存储对端的信息,所以在发送的时候需要显式指定发送给谁

3.全双工:通过一个socket对象,既可以send,也可以接收

4.不可靠,代码中体现不出来


👩🏻‍💻基于UDP的应用层协议

  • NFS:网络文件系统
  • TFTP:简单文件传输协议
  • DHCP:动态主机配置协议
  • BOOTP:启动协议(用于无盘设备启动)
  • DNS:域名解析协议
当然,也包括你自己写 UDP 程序时自定义的应用层协议

相比较于UDP,TCP更值得关注。期待下一篇TCP的详细解说。


 也许适当的休息和摆烂是为了更好的重新出发。

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

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

相关文章

[lesson31]完善的复数类

完善的复数类 完善的复数类 复数类应该具有的操作 运算&#xff1a;&#xff0c;-&#xff0c;*&#xff0c;/比较&#xff1a;&#xff0c;!赋值&#xff1a;求模&#xff1a;modulus 利用操作符重载 统一复数与实数的运算方式统一复数与实数的比较方式 注意事项 C规定赋…

【max材质addtive叠加模式特效渲染不出通道的解决办法】

max材质addtive叠加模式特效渲染不出通道的解决办法 2021-12-22 18:15 max的scanline扫描线&#xff0c;vray渲染可以&#xff0c;红移不行(只支持它自己的材质&#xff0c;它自己的材质没有additive模式)。据说mr是可以的。 右侧的球体使用附加不透明度。 附加不透明度通过将…

C++内存管理与模版(用法详解)

C/C中程序内存区域划分 内核空间&#xff08;用户代码不能读写&#xff09;栈&#xff08;函数中存放的变量&#xff09;内存映射段堆&#xff08;重点&#xff09;数据段&#xff08;静态区&#xff09;全局变量 / 静态变量代码段&#xff08;常量区&#xff09; 试分析下列…

Opencv3.4+FFMpeg3.4+pkg-config交叉编译arm开发板

Ubuntu16.04 64位 FFmpeg3.4 OpenCv3.4 一、下载FFmpeg https://github.com/FFmpeg/FFmpeg 1.配置 ./configure --prefix/home/zeng/ffmpeg_install --enable-cross-compile --cross-prefixarm-linux-gnueabihf- --ccarm-linux-gnueabihf-gcc --target-oslinux --cpuco…

负载均衡器如何工作,为什么如此重要?

现代应用程序和网站处理大量流量。负载均衡器是保证大型系统平稳运行的主要工具之一。 负载平衡器负责跨多个服务器路由客户端请求以分配负载并防止出现瓶颈。 这有助于最大限度地提高吞吐量、减少响应时间并优化资源使用。 负载均衡器的运行情况&#xff1a; (1).客户端请…

阿姨吐槽年轻人卧铺挂帘子不让坐 评论区吵翻天了

近日&#xff0c;网络流传的一段短视频激起了公众的广泛热议。 这段视频展现了一位阿姨与在下铺挂帘子的年轻人之间的冲突。 视频中&#xff0c;阿姨情绪激动&#xff0c;她用镜头对准了那位年轻人&#xff0c;指责他在下铺挂帘子&#xff0c;使得一位70岁的老人无法坐下。 阿姨…

EasyRecovery数据恢复软件2024免费版下载亲测可用(支持win7,win10)

EasyRecovery数据恢复软件是由全球著名的数据恢复公司Ontrack出品的一款专业级数据文件恢复工具。它支持恢复多种存储介质上的数据&#xff0c;包括硬盘、光盘、U盘/移动硬盘、数码相机以及Raid文件恢复等&#xff0c;能恢复的文件类型也相当丰富&#xff0c;包括文档、表格、图…

磁盘管理和文件系统

一.磁盘基础 1.磁盘结构 &#xff08;1&#xff09;物理结构&#xff1a; 盘片&#xff1a;硬盘有多个盘片&#xff0c;每盘片2面 磁头&#xff1a;每面一个磁头 &#xff08;2&#xff09;硬盘的数据结构 扇区&#xff1a;盘片被分为多个扇形区域&#xff0c;每个扇区存…

Django之rest_framework(四)

扩展的视图类介绍 rest_framework提供了几种后端视图(对数据资源进行增删改查)处理流程的实现,如果需要编写的视图属于这几种,则视图可以通过继承相应的扩展类来复用代码,减少自己编写的代码量 官网:3 - Class based views - Django REST framework rest_framework.mixi…

冯喜运:4.16市场洞察:中东风暴搅动汇市,现货黄金原油走势分析

【黄金消息面分析 】周一(4月15日)&#xff0c;欧洲时段黄金价格已经从高点回落&#xff0c;目前交投于2351.52美元/盎司&#xff0c;稍早曾短暂攀至2372美元&#xff0c;未能重现上周收盘时触及的2431美元高位。定于周一晚些时候公布的美国3月零售销售数据也可能对美元汇率产生…

2024 EasyRecovery三分钟帮你恢复 电脑硬盘格式化

随着数字化时代的到来&#xff0c;我们的生活和工作中越来越依赖于电子设备。然而&#xff0c;电子设备中的数据丢失问题也随之而来。数据丢失可能是由各种原因引起的&#xff0c;如硬盘故障、病毒感染、误删除等。面对这种情况&#xff0c;一个高效、可靠的数据恢复工具变得尤…

轻量级的Spring Cloud Gateway实践,实现api和websocket转发

当国内大部分都是粘贴复制一些重型框架时&#xff0c;有没有人会想到&#xff0c;我们自己做一个小项目&#xff0c;几个小的Spring boot的项目时&#xff0c;我们是否还需要按部就班的用我们公司中用到的Nacos&#xff0c;这种冗余且调配复杂的组件呢&#xff1f; 不是本人说…

华为HarmonyOS 4.2公测升级计划扩展至15款新机型

华为近日宣布&#xff0c;HarmonyOS 4.2操作系统的公测升级计划将扩展到包括华为P50系列在内的15款设备。这一更新旨在为用户提供更优化的系统性能和增强的功能。 参与此次公测的机型包括华为P50、华为P50 Pro及其典藏版、华为P50E、华为P50 Pocket及其艺术定制版、华为nova系…

计算机笔记(11)续20个

180&#xff0e;时钟频率2.0GHz表示一秒有2*10的9次方个时钟周期&#xff0c;若执行一条指令需要2个时钟周期&#xff0c;则每秒执行的指令数为2*10的9次方/21*10的9次方 181.同轴电缆粗缆采用AUI头作为连接器件 182. 183.win7中的回收站&#xff0c;存放的是硬盘上被删除的…

【多线程】单例模式 | 饿汉模式 | 懒汉模式 | 指令重排序问题

文章目录 单例模式一、单例模式1.饿汉模式2.懒汉模式&#xff08;单线程&#xff09;3.懒汉模式&#xff08;多线程&#xff09;改进 4.指令重排序1.概念2.question:3.解决方法4总结&#xff1a; 单例模式 一、单例模式 单例&#xff0c;就是单个实例 在有些场景中&#xff0c…

Adobe Premiere 2020 下载地址及安装教程

Premiere是一款专业的视频编辑软件&#xff0c;由Adobe Systems开发。它为用户提供了丰富的视频编辑工具和创意效果&#xff0c;可用于电影、电视节目、广告和其他多媒体项目的制作。 Premiere具有直观的用户界面和强大的功能&#xff0c;使得编辑和处理视频变得简单而高效。它…

【高阶数据结构】哈希表 {哈希函数和哈希冲突;哈希冲突的解决方案:开放地址法,拉链法;红黑树结构 VS 哈希结构}

一、哈希表的概念 顺序结构以及平衡树 顺序结构以及平衡树中&#xff0c;元素关键码与其存储位置之间没有对应的关系。因此在查找一个元素时&#xff0c;必须要经过关键码的多次比较。顺序查找时间复杂度为O(N)&#xff1b;平衡树中为树的高度&#xff0c;即O(log_2 N)&#xf…

Neo4j 图形数据库中有哪些构建块?

Neo4j 图形数据库具有以下构建块 - 节点属性关系标签数据浏览器 节点 节点是 Graph 的基本单位。 它包含具有键值对的属性&#xff0c;如下图所示。 NEmployee 节点 在这里&#xff0c;节点 Name "Employee" &#xff0c;它包含一组属性作为键值对。 属性 属性是…

dcoker+nginx解决前端本地开发跨域

步骤 docker 拉取nginx镜像跑容器 并配置数据卷nginx.conf nginx.conf文件配置 这里展示server server {listen 80;listen [::]:80;server_name localhost;#access_log /var/log/nginx/host.access.log main;location / {# 当我们访问127.0.0.1:8028就会跳转到ht…

ubuntu20.04安装+ros-noetic安装+内网穿透frp

刷机后的系统安装 ubuntu20.04安装安装ros-noetic安装各种必要的插件安装vscode内网穿透连接实验室主机配置frpc和frps文件运行完成自动化部署免密登录linux的免密登录windows上的免密登录 内网穿透的参考链接&#xff1a;如何优雅地访问远程主机&#xff1f;SSH与frp内网穿透配…