【JavaEE】——自定义协议方案、UDP协议

简介: 自定义协议,序列化,xml方案,json方案,protobuffer方案,UDP协议,校验和,比特翻转,CRC算法,md5算法

  image.gif 编辑

阿华代码,不是逆风,就是我疯

你们的点赞收藏是我前进最大的动力!!

希望本文内容能够帮助到你!!

目录

一:自定义协议

1:自定义协议

(1)交互哪些信息

(2)数据的具体格式

2:(反)序列化

3:业界方案

二:xml方案

1:优点

2:缺点

三:json方案

1:结构

2:优点

四:protobuffer方案

五:传输层

六:UDP协议

1:特点

七:校验和/检验和

1:比特翻转

2:数据参与

3:CRC算法

4:md5算法特点


一:自定义协议

程序员在调用操作系统提供的网络API写出来的代码都是属于应用层的(回顾五个层级:应用层,传输层,网络层,数据链路层,物理层),应用层自身就有许多已经创建好的协议,但多数情况下是需要程序员自定义协议的

1:自定义协议

主要约定好两方面的内容

(1)交互哪些信息

解释:服务器和客户端之间要交互哪些信息,由产品经理规定需要传输哪些信息

(2)数据的具体格式

解释:客户端按照约定构造、发送请求,解析返回的响应

          服务器按照约定解析请求,构造、发送响应

2:(反)序列化

Client和Server之间交互的是“结构化数据”,网络传输的数据其实是“字符串”“二进制bit流”,约定协议的过程就是把“结构化数据”转化为“二进制bit流”的过程

结构化数据———转化———>字符串/二进制bit流       叫做“序列化”

字符串/二进制bit流———还原———>结构化数据        叫做“反序列化”

3:业界方案

为了让程序员更方便的约定这里的协议格式,给出了几个可以直接套用的方案

二:xml方案

image.gif 编辑

1:优点

(1)可读性好:标签的名字能够对数据起到描述作用

(2)延展性好:后续增加属性,只需新增标签,不影响原有代码

2:缺点

整个数据冗余信息非常多,标签占据的空间可能反而比数据本身更多了,在网络传输中会消耗更多的网络带宽(网络带宽这种硬件资源很贵)

三:json方案

image.gif 编辑

1:结构

键值对结构

键和值用   : 分开

键值之间用     ,    分开

多个键值对用{}括起来,构成一个json对象

多个json对象用   ,   分开  整体用[]括起来形成一个json数组

2:优点

(1)可读性好

key对数据起到解释说明

(2)占用空间更小

相比较于xml中需要开始和结束两个标签,json只用了一个key,更节省网络带宽(这里的节省是相对的,json中的key也会被多次创建)

(3)延展性好

四:protobuffer方案

开发阶段(写代码)定义出有哪些资源,描述每个字段的含义,真正运行的时候,实际传输的数据是不包含这样的描述信息

优点:程序的运行效率高

缺点:不利于程序猿阅读

所以只有那些对性能要求非常高的场景才会使用protobuffer

五:传输层

在数据传输过程中,虽然传输层是操作系统内核中已经实现好的,但是我们也需要重点关注,我们使用的socket的API都是由传输层提供的

对于端口号,它是一个2字节的整数(0,2的16次方-1),在使用端口号的时候,[1,1024]都是属于系统保留的自用的端口号(知名端口号)

六:UDP协议

1:特点

回顾一下:无连接,不可靠传输,面向数据报,全双工,

UDP数据报=报头+载荷

image.gif 编辑

image.gif 编辑

UDP报头中4个字段,每个字段2个字节,共8个字节

协议中报头用2个字节表示端口号,能表示的范围为2^16-1=65535,即[0,65535],

换算一下为64KB——即UDP数据报最大长度为64KB,载荷部分应该是64KB-8

七:校验和/检验和

1:比特翻转

验证数据在传输过程中是否正确,数据在网络传输中可能会坏掉,网络传输本质是发送方的物理层把二进制数据转化为光电信号发送出去。再由另一端的物理层接收光电信号在转化为二进制数据,在这个过程中,很有可能由于外界信号的干扰,发生“1->0”“0->1”这样的翻转情况,导致我们的数据出现问题,校验和的作用就是用来识别数据是否出现比特翻转的。

2:数据参与

校验和是拿着原始信息的一部分内容参与计算的,例如把这样一段字符串“张三今天想吃麻辣烫”传输,在传输之前会把字符串通过某种运算转化成例如“AD343SCSCAF2321”这样的密码串,校验的时候,再运算一次,(在运算转化的过程中,数据可能会超出范围,不打紧)通过比较两次运算的结果可以知道,该次数据传输是否是一致的正确的

3:CRC算法

image.gif 编辑

4:md5算法特点

(1)定长

无论原始数据有多长,算出来的md5最终值都是固定长度

(2)分散

计算md5的过程中,原始数据只要变化一点点,最后得到的md5值就会差异很大

(3)不可逆

给定一个md5的值还原为原始的字符串,理论来说不可行,因为在字符串转化为md5的过程中,已经有很多数据丢失了,特点(1),有兴趣的友友可以在浏览器上搜一下(有点像加密——密码学)


相关文章
|
18天前
|
网络协议 Java API
【JavaEE】——Udp翻译器的实现(回显服务器)
网络编程,DatagramSocket 和 DatagramPacket类,回显服务器,服务器实现,客户端实现,
|
1月前
|
存储 网络协议 安全
用于 syslog 收集的协议:TCP、UDP、RELP
系统日志是从Linux/Unix设备及网络设备生成的日志,可通过syslog服务器集中管理。日志传输支持UDP、TCP和RELP协议。UDP无连接且不可靠,不推荐使用;TCP可靠,常用于rsyslog和syslog-ng;RELP提供可靠传输和反向确认。集中管理日志有助于故障排除和安全审计,EventLog Analyzer等工具可自动收集、解析和分析日志。
120 2
|
2月前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
73 3
|
2月前
|
网络协议 SEO
TCP连接管理与UDP协议IP协议与ethernet协议
TCP、UDP、IP和Ethernet协议是网络通信的基石,各自负责不同的功能和层次。TCP通过三次握手和四次挥手实现可靠的连接管理,适用于需要数据完整性的场景;UDP提供不可靠的传输服务,适用于低延迟要求的实时通信;IP协议负责数据包的寻址和路由,是网络层的重要协议;Ethernet协议定义了局域网的数据帧传输方式,广泛应用于局域网设备之间的通信。理解这些协议的工作原理和应用场景,有助于设计和维护高效可靠的网络系统。
57 4
|
3月前
|
网络协议 网络性能优化 C#
C# 一分钟浅谈:UDP 与 TCP 协议区别
【10月更文挑战第8天】在网络编程中,传输层协议的选择对应用程序的性能和可靠性至关重要。本文介绍了 TCP 和 UDP 两种常用协议的基础概念、区别及应用场景,并通过 C# 代码示例详细说明了如何处理常见的问题和易错点。TCP 适用于需要可靠传输和顺序保证的场景,而 UDP 适用于对延迟敏感且可以容忍一定数据丢失的实时应用。
66 1
|
3月前
|
网络协议 算法 数据格式
【TCP/IP】UDP协议数据格式和报文格式
【TCP/IP】UDP协议数据格式和报文格式
234 3
|
3月前
|
存储 网络协议 算法
更深层次理解传输层两协议【UDP | TCP】【UDP 缓冲区 | TCP 8种策略 | 三次握手四次挥手】
UDP和TCP各有所长,UDP以其低延迟、轻量级的特点适用于对实时性要求极高的应用,而TCP凭借其强大的错误检测、流量控制和拥塞控制机制,确保了数据的可靠传输,适用于文件传输、网页浏览等场景。理解它们的工作原理,特别是UDP的缓冲区管理和TCP的8种策略,对于优化网络应用的性能、确保数据的高效和可靠传输至关重要。开发者在选择传输层协议时,应根据实际需求权衡利弊,合理利用这两项关键技术。
106 5
|
3月前
|
JavaScript 安全 Java
谈谈UDP、HTTP、SSL、TLS协议在java中的实际应用
下面我将详细介绍UDP、HTTP、SSL、TLS协议及其工作原理,并提供Java代码示例(由于Deno是一个基于Node.js的运行时,Java代码无法直接在Deno中运行,但可以通过理解Java示例来类比Deno中的实现)。
99 1
|
4月前
|
监控 网络协议 网络性能优化
如何办理支持UDP协议的网络
在当今网络环境中,UDP(用户数据报协议)因传输速度快、延迟低而广泛应用于在线游戏、视频流媒体、VoIP等实时服务。本文详细介绍了办理支持UDP协议网络的方法,包括了解UDP应用场景、选择合适的ISP及网络套餐、购买支持UDP的设备并进行优化设置,以及解决常见问题的策略,帮助用户确保网络稳定性和速度满足实际需求。
|
21天前
|
监控 网络协议 网络性能优化
不再困惑!一文搞懂TCP与UDP的所有区别
本文介绍网络基础中TCP与UDP的区别及其应用场景。TCP是面向连接、可靠传输的协议,适用于HTTP、FTP等需要保证数据完整性的场景;UDP是无连接、不可靠但速度快的协议,适合DNS、RIP等对实时性要求高的应用。文章通过对比两者在连接方式、可靠性、速度、流量控制和数据包大小等方面的差异,帮助读者理解其各自特点与适用场景。