浅谈自定义应用层协议与UDP的报文结构和注意事项

news/2024/5/18 15:59:55 标签: udp, 网络, 网络协议

目录

1.自定义应用层协议

2.UDP的报文结构和注意事项


1.自定义应用层协议

1.1 概念 

在我们的应用层中,不乏有许多现成的协议如HTTP或者DNS等等。但在实际工作中,为了满足我们的各种需求,仍然需要我们自定义应用层协议。那么什么是协议呢?

协议:

通俗地讲就是一种约定,规定了客户端和服务器以什么样的格式来传输数据

1.2 实际场景分析 

假如现在有一项前后端协同开发的工作需要A和B两个小组共同完成, 那么他们首先需要共同决定A要给B传输什么数据,数据是按照什么格式来组织的,B要给A回复什么数据,数据是按照什么格式来组织的。而这个决定的过程实际上就是在自定义协议。

我们再换一个更具体的场景来看。比如我们经常会用到的点外卖这个操作 ,而这实际上在客户端与服务器之间发生了以下交互。

 当然实际需求会比这更多,我们为了方便就简化了一部分。

关于自定义协议我们一般要从两方面考虑

1.交互过程传输的信息有哪些

2.这些信息的组织格式 

其中第一点我们已经完成,我们接下来看到第二点如何约定信息的格式

方式一: 

一种简单的约定方式就是直接使用简单的分隔符来对不同部分信息做区分,比如“\n”或者“;”等等,比如下图

 方式二:

另一种典型的数据约定格式就是使用固定长度来区分从哪里到哪里是一个信息

 

方式三:

 当然我们也可以将上面两种方法结合,有些字段使用分隔符,有些字段使用固定长度

方式四:

通过xml(一种标记语言)格式来约束,这个我们不多讲,大家感兴趣可以自行学习。

方式五: 

json,比xml应用更加广泛,同样不多讲

方式六:

 通过其他“二进制”数据组织格式,如protobuffer,thrift

区别 

 例如xml和json属于文本格式,它的优势在于可读性高,但是占用带宽更多,效率较低

 而protobuffer,thrift等二进制的格式它的格式更加复杂,可读性低,但是占用带宽少,效率高

而在服务器中带宽是一个很珍贵的资源,所以我们还是需要根据实际需求来选择合适的协议

2.UDP的报文结构和注意事项 

2.1 UDP的报文结构

我们在教科书上看到的一般都是下面这副图

不过我们可以转化成下面这张图会更好理解

 

如果将一次UDP通信比作一次网购,其中源端口号就相当于寄件人电话,目的端口号相当于收件人电话。

接下来UDP长度表示了UDP的数据报有多长,但是其中存在一个问题,2个字节能表示的最大数据是65535=>64KB,也就是说UDP数据报最大只有64KB,放在如今这是非常小的,所以这也是UDP的一个缺陷。

校验和是为了重新检测发送的数据与接收的是否一致,UDP采用的校验和检验算法是一种简单的CRC算法(循环冗余校验和)。核心原理就是把数据的每个字节都向上加,如果超出范围(2字节)则进行类似于取模的运算,所有字节累加完成后得到的结果就是校验和

2.2 注意事项 

由于UDP数据报的大小限制,我们在传输一些比较大的数据时有以下两种解决方案:

1.将数据拆分成多个部分,使用多个UDP数据报来发送,最后再进行组装

2.直接放弃UDP采用TCP

关于UDP校验和:
如果输入的数据都是相同的,那么CRC一定相同,但是CRC相同数据不一定相同(比如1+9和2+8这种情况)


http://www.niftyadmin.cn/n/1569331.html

相关文章

TCP网络协议

目录 1.TCP协议段格式 2.TCP原理 1.TCP协议格式 TCP协议的格式我们可以看到下图 源/目的端口号:表示数据是从哪个进程来,到哪个进程去; 4位TCP报头长度:表示该TCP头部有多少个32位bit(有多少个4字节)&am…

数据链路层重点协议

目录 1.以太网 2.MTU 3.ARP与RARP协议 1.以太网 1.1 概念 "以太网" 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了 一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式…

从输入URL到展示出页面这个过程发生了什么

1.前言 看到标题应该就知道我们这篇文章要讲什么了,这其实是一道很经典的面试题,所以特地拿出一篇文章讲解,但由于本人水平有限且该题目为开放性题目,所以答案不唯一且可能有所疏漏。 2.补充(DNS) 考虑…

HTML常见标签用法

目录 1.HTML基本结构 2.常见标签 1.HTML基本结构 HTML 代码是由 "标签" 构成的. 形如: <body>hello</body>1.标签名 (body) 放到 < > 中 2.大部分标签成对出现&#xff0c;<body>为开始标签&#xff0c;</body>为结束标签 3.少数…

CSS常见选择器

目录 1.CSS的概念及引入 2.常见选择器用法总结 1.CSS的概念及引入 1.1 什么是CSS 层叠样式表 (Cascading Style Sheets). CSS 能够对网页中元素位置的排版进行像素级精确控制, 实现美化页面的效果. 能够做到页面的样式和结 构分离. 在之前我们只学习了HTML的时候 &#xff0…

Cookie 和 Session 工作流程

1.为什么需要Cookie 和 Session 由于HTTP协议是“无状态”协议&#xff0c;也就是客户端向服务器端发送请求&#xff0c;服务器作出响应&#xff0c;他们之间的连接就会断开(一次会话结束)&#xff0c;下次客户端再给服务器端发送请求&#xff0c;服务器就不知道这个用户是谁了…

MyBatis入门基础

目录 1.什么是MyBatis 2.第一个MyBatis查询 2.1 准备工作 2.2 实际操作 2.2.1 定义接口 2.2.2 创建XML实现上述接口 2.3 单元测试 2.3.1 单元测试的优势 2.3.2 创建并使用单元测试 2.3.3 有关断言 3.增删改的基本操作 3.1 插入操作 特殊的添加&#xff1a;返…

Java打印正三角形

java正三角形输出 输出如图的形状 1.要输出如图的正三角形有两种方法&#xff0c;一种是直接 5个 System.out.print() 在里面输入自己要的东西&#xff1b;但是如果这个三角形要100层呢&#xff1f;这样肯定是不行的。 2.那么就只能用第二种方法&#xff0c;for循环。因为这…