【Java网络原理】 四

本文主要介绍了TCP/IP五层协议中的应用层常见的数组组织格式和传输层UDP协议。

一.应用层

1.网络通信数据的实质

网络上传输的数据,本质就是字符串(准确的说,是二进制的字符串)

Java中的各种对象,是无法直接传输的

>在发送的时候,就需要把对象转成二进制字符串   ---序列化

>收数据的时候,也需要把二进制字符串转回对象   ---反序列化


通信的要求:

客户端的请求以及服务器的响应,具体的数据组织格式,是非常灵活的,

程序员想怎样组织都可以,只需要保证客户端和服务器使用的相同的规格就行

应用层有很多现成的协议,但是有时候需要程序员自定义协议

自定义协议:

1.明确好传递的信息有什么

2.约定好信息按照什么格式来组织

注意:自定义格式虽然可以任意,但是为了避免出现过于天马行空的设计,有一些大佬就搞出了一些 通用的协议格式,对我们的协议设计是有重要的指导作用的。

下面是介绍三种常见数据组织格式:

2.常见的数据格式

1.xml

以成对的标签,来表示键值对信息,同时标签支持嵌套,构成一些更复杂的树形结构数据。

请求:<request><userId>123</userId>         //键值对结构  userId: 123<password>111</password>     //           password:111
</request>响应:
<response><allSubjects><subject><name>math</name><score>99</score></subject><subject><name>chinese</name><score>99</score></subject>	</allSubjects>
</response>

和html区别:

html里的标签,有自己的标准

xml里的标签,就是程序员自定义的

优点:xml把结构化数据表示的非常清晰

缺点:表示数据需要引入大量的标签,看起来繁琐,同时会占用很多网络带宽

现状:xml用的越来越少了

2.json

当前最流行的组织格式

本质上也是键值对,但是比xml要干净很多

组织形式:

{}        表示键值对

[]        表示数组,数组中可以是数组,还可以是{}或者[]

请求:
{UserId:123,Password:11a}响应:
[{Name:math,Score:99},{Name:chinese,Score:99}
]

现状:最主流使用的一种网络传输数据的格式,未来在实际开发中会经常使用json格式的数组

特性:json中可以把所有内容放在同一行,通常网络传输中,会把json进行压缩,同时把所有数据放到一行,整体占用的带宽就降低了。

3.protobuffer

谷歌提出的一套二进制的数据序列化方式

特性:使用二进制的方式,约定哪几个字节,表示哪个数据。最大程序的节省空间,不必传输key,根据位置和长度区分每个属性

优点:节省带宽,最大效率化

缺点:二进制数据,无法用肉眼观察,不方便调试;使用复杂;

适用场景:性能要求更高的场景(牺牲了开发效率,换来运行效率)

总结:

除了以上三种,业界还有很多其他的数组组织格式,比如Java标准库就提供了方式;还有其他的第三方库提供的方式更丰富

二.传输层

1.UDP用户数据报协议

UDP基本特点:无连接 不可靠传输  面向数据报 全双工

学习一个协议,要掌握协议的特性,还要理解协议报文格式

1.1UDP数据报格式

UDP用户数据报报文格

报头各字段说明:

报头有四个字段,每个字段占2字节,2字节的数据范围是0 ~ 65535

>源/目的端口:范围是0 ~ 65535 

其中1-1024是知名端口,不建议使用。

>长度:指的是数据载荷的长度,最大65535,也就是64kb,这意味着一个UDP数据载荷最大只能65535这么长。

这在互联网发展之初,是比较大的;

放在现在,64KB已经非常小了,经常是不能够满足使用的;

但是现在由于种种原因,已经无法改变了。

应对方案:

1.在应用层代码中把报文拆分成多组,通过多个UDP数据报进行传输

2.使用tcp代替udp,tcp没有报文长度限制

>检验和

事实:网络传输数据过程中,收到外界干扰,就会出错;

由于本质上传输的是光信号/电信号/电磁波 (比如受太阳活动的影响,就会影响到正常的网络通信)

可能会导致比特翻转( 0->1 / 1->0 ),所以就要将收到的数据和发来的数据进行对比。

UDP使用CRC校验算法(循环冗余校验和)

思想:累加结果保存到这个2字节的变量中,最终就得到了校验和。

接受方收到数据时候,按照同样的方式再算一遍校验和

数据相同    --> 校验和相同

校验和不同 --> 数据不同

但是校验和相同 不能推出 数据相同 (可能会出现巧合)

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

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

相关文章

微信小程序设计之主体文件app-wxss/less

一、新建一个项目 首先&#xff0c;下载微信小程序开发工具&#xff0c;具体下载方式可以参考文章《微信小程序开发者工具下载》。 然后&#xff0c;注册小程序账号&#xff0c;具体注册方法&#xff0c;可以参考文章《微信小程序个人账号申请和配置详细教程》。 在得到了测…

android studio启动Task配置

Android studio 高版本默认不开启Task配置&#xff0c;需要自己手动开启 1.低版本配置路径&#xff1a;&#xff08;复制他人图片&#xff09; 2.高版本路径&#xff1a;添加下图勾选配置即可 3.gradle task 3.1 初识task gradle中所有的构建工作都是由task完成的,它帮我们处…

公司电脑如何限制安装软件

公司电脑如何限制安装软件 安企神终端管理系统下载使用 在企业环境中&#xff0c;电脑已经成为企业中必不可少的办公工具&#xff0c;确保员工的生产力和公司的信息安全是至关重要的。为了实现这一目标&#xff0c;公司可能会限制员工在某些情况下安装软件或者由管理员来为终…

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三)

这是继之前文章&#xff1a; Elasticsearch&#xff1a;使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation &#xff08;一&#xff09; Elasticsearch&#xff1a;使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation &#xff08;二&…

计算机网络【CN】介质访问控制

信道划分介质访问控制 FDMTDMWDMCDM【掌握eg即可】 随机介质访问控制 CSMA 1-坚持CSMA 非坚持CSMA p-坚持CSMA 空闲时 立即发送数据 立即发送数据 以概率P发送数据&#xff0c;以概率1-p推迟到下一个时隙 忙碌时 继续坚持侦听 放弃侦听&#xff0c;等待一个随机的时…

【大数据Hive】hive 表数据优化使用详解

目录 一、前言 二、hive 常用数据存储格式 2.1 文件格式-TextFile 2.1.1 操作演示 2.2 文件格式 - SequenceFile 2.2.1 操作演示 2.3 文件格式 -Parquet 2.3.1 Parquet简介 2.3.2 操作演示 2.4 文件格式-ORC 2.4.1 ORC介绍 2.4.2 操作演示 三、hive 存储数据压缩优…

基于STM32的示波器信号发生器设计

**单片机设计介绍&#xff0c;基于STM32的示波器信号发生器设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序文档 六、 文章目录 一 概要 基于STM32的示波器信号发生器是一种高性能的电子仪器&#xff0c;用于测试和分析电路中的电信号。在该系统中&a…

知识管理的PSCA循环

前言&#xff1a;在PMP备考第二章《环境》部分&#xff0c;面对项目的复杂性&#xff0c;提到了知识管理的PSDA循环&#xff0c;本篇博客主要谈一下什么是PSDA循环&#xff0c;以及我们面对复杂的环境&#xff0c;如何提升自己的学习能力和认知水平。 目录 知识的冰山模型 P…

【MySQL架构篇】SQL执行流程与缓冲池

文章目录 1. SQL执行流程2. 数据库缓冲池(Buffer Pool)2.1 缓冲池概述2.2 缓冲池如何读取数据2.3 查看和设置缓冲池的大小2.4 多个Buffer Pool实例2.5 引申问题 1. SQL执行流程 查询缓存&#xff1a;因为查询效率往往不高&#xff0c;所以在MySQL8.0之后就抛弃了这个功能解析器…

手机apn介绍

公司遇到一件很棘手的事情&#xff0c;app发版之后&#xff0c;长江以北地方的用户网络信号很好&#xff0c;但是打开app之后网络连接不上&#xff0c;而长江以南的用户网络却很好。大家找了很多资料&#xff0c;提出一些方案&#xff1a; 1、是不是运营商把我们公司的ip给限制…

考点之数据结构

概论 时间复杂度和空间复杂度是计算机科学中用来评估算法性能的重要指标。 时间复杂度&#xff1a; 时间复杂度衡量的是算法运行所需的时间。它表示算法执行所需的基本操作数量随着输入大小的增长而变化的趋势。 求法&#xff1a; 通常通过分析算法中基本操作执行的次数来…

Linux下自动挂载U盘或者USB移动硬盘

最近在折腾用树莓派&#xff08;实际上是平替香橙派orangepi zero3&#xff09;搭建共享文件服务器&#xff0c;有一个问题很重要&#xff0c;如何在系统启动时自动挂载USB移动硬盘。 1 使用/etc/fstab 最开始尝试了用/etc/fstab文件下增加:"/dev/sda1 /home/orangepi/s…

YouTube博主数据信息资源

YouTube博主数据信息资源 &#x1f525;我是一位拥有10年编程经验的程序猿&#xff0c;为你带来一个全新的优质资源 &#x1f50d;您是否在寻找最新、最活跃的YouTube博主数据&#xff0c;以助力你的项目、营销或研究&#xff1f; 我们的数据&#xff0c;您的优势&#xff1a;…

网络基础-4

链路聚合技术 根据灵活性地增加网络设备之间的带宽供给增强网络设备之间连接的可靠性节约成本 链路聚合 是将两个或更多数据信道结合成一个单个的信道&#xff0c;该信道以一个单个的更高带宽的逻辑链路出现。链路聚合一般用来连接一个或多个带宽需求大的设备&#xff0c;例…

[毕设记录]@开题调研:一些产品

我感觉产品能代表落地的一些实际应用&#xff0c;会和研究的角度有些差别&#xff0c;但是需求和兴趣往往是从现实中来的&#xff0c;在上一篇blog里面看外国blog的时候顺着搜搜到了很多国外的智慧校园chatbot解决方案 文章目录 Comm100streebomodern campusUniBuddy Comm100 …

arch linux 安装 vsftpd 配置虚拟用户

后面操作会直接基于 yay 操作 自行查找如何安装 yay 公司经常会用到 ftp 服务 不想用 apache 的 ftp server 所以自己在小机器上撞了 arch linux 用来安装软件 跑程序等。 1. 安装 vsftpd yay vsftpd --noconfirm选择 1 安装 输入密码 2. 安装 pam_pwdfile 安装 pam_pwdf…

【数智化人物展】同方有云联合创始人兼总经理江琦:云计算,引领数智化升级的动能...

江琦 本文由同方有云联合创始人兼总经理江琦投递并参与《2023中国企业数智化转型升级先锋人物》榜单/奖项评选。 数据智能产业创新服务媒体 ——聚焦数智 改变商业 在这个飞速发展的数字时代&#xff0c;我们置身于一个前所未有的机遇与挑战并存的时刻。数字化转型不再仅仅是一…

【音视频|PCM】PCM格式详解

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

共用体开发案例

有若干个人员的数据,其中有学生和教师。学生的数据中包括:姓名、号码性别、职业、班级。教师的数据包括:姓名、号码、性别、职业、职务。要求用同一个表格来处理。 #include <stdio.h>struct Person {char name[32];int age;char zhiYe;char addr[32];union {int class;…

测试时间函数

clock():测试时间函数 测试程序开始运行(即从main开始)到执行当前行需要的时间值,单位毫秒.需要引用time.h 例如&#xff1a;需要需要测试输出0~100需要的时间可以用如下代码&#xff1a; #include<stdio.h> #include<time.h>//单位是毫秒 int main() {clock_t c1…