认识自定义协议

经过前面的介绍,我们知道TCP/IP协议有一组五层模型,从上往下为应用层、传输层、网络层、数据链路层和物理层,且在网络中传输的数据都必须经过这几层模型的封装和分用,作为程序员,我们最经常打交道的就是应用层。程序员写的代码,只要涉及网络传输的代码都可以被视为应用层的一部分。且应用层中涉及到的网络通信协议,很多都是程序员自定义的,所以但凡实现一个具体程序,写代码前,一定要约定应用层协议的格式。

那如何具体实现自定义协议呢?

自定义协议分成两个阶段:

阶段一:根据需求,明确传输哪些信息。

阶段二:约定好信息的组织格式。

接下来,我们以外卖程序为例子,介绍这两个阶段 

阶段一

首先,我们打来一个外卖程序时,会显示一个商家列表。此时我们可以根据我们要吃什么向服务器发送请求,这个请求中就可能包括用户要吃的东西、用户的位置信息和用户的id等信息,服务器可以根据请求里面的内容返回一个响应,响应的内容就会包括商家的id、商家的名字、商家的图片、评分和配送费等信息

具体请求和响应的内容是如何组织的,就要靠阶段二。

阶段二

应用层也给我们提供了一些组织数据的自定义格式,常用的有行文本格式、xml格式、json格式和protobuf格式这四种。

1.行文本格式

行文本格式指的是数据以文本的形式逐行进行记录和存储数据的一种格式。每一行代表一个相对独立的数据单元或者一条记录。

以上面点外卖为例子

请求和响应的内容根据行文本格式组织的形式如下图

注意:

上图组织数据的方案并不是固定的,列与列之间不一定使用逗号分隔, 也可以使用分号,一个点和/t等形式来隔开列与列之间的信息,行与行之间也是如此。

最低要求就是客户端服务器(前段端)和后端服务器共同按照同一套规则来进行构造和解析数据就行了。

2. .xml格式 

xml格式就是以成对的标签构成的键值对结构来组织数据,且xml格式中的标签内容是可以自定义的。

形式如下图

xml格式的优缺点

优点:可读性好

缺点:xml格式中的开始标签和结束标签表示的都是同一个信息,冗余信息太多了,在网络传输中,会消耗更多的宽带。

对于一个服务器来说,硬盘最便宜,内存其次,CPU小贵,宽带特别贵 

3.json格式

json格式是一种轻量级的储存数据的格式,json格式的数据在网络传输时,占用的网络宽带较小,尤其时处理大量数据时,能够有效提高传输效率,节省网络资源。

json也是最流行的网络数据格式组织的方案。

形式如下图

 

优点:可读性好,消耗的宽带资源也比xml少

缺点:还是存在冗余信息 

4. protobuf格式

protobuf格式是基于二进制的格式对数据进行压缩,这样就不涉及到xml和json格式中的冗余信息了,消耗的宽带资源最少,但是可读性变差了。

总结

1.行文本格式最原始,可读性好

2.xml格式较原始,可读性好,冗余较多

3.json格式是当今主流的方式,可读性好,冗余一般

4.protobuf格式是在追求高性能场景下的使用方式,可读性差,冗余最小 

但是在应用层中,除了自定义协议之外,也有一些大佬们搞好的现成的协议,如HTTP协议就是其中的一种,且HTTP协议也是我们学习的重点内容,接下来,我就会向大家一步一步介绍HTTP协议。

Fiddler抓包工具

HTTP是一个文本格式的协议,可以通过Fiddler抓包,分析HTTP请求和响应的细节。

抓包工具的原理

Fiddler相当于一个“代理”,当浏览器访问Sogou.com时,就会先把这个http请求先发给fiddler,接着Fiddler再将请求转发给sogou服务器,当sogou服务器返回数据时,Fiddler会先拿到返回的数据,在把数据返回给浏览器。

如下图

 

因此,通过Fiddler,我们就可以清楚的知道浏览器和sogou服务器之间交互的细节,方便我们以后的学习。 

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

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

相关文章

nodejs循环导出多个word表格文档

文章目录 nodejs循环导出多个word表格文档一、文档模板编辑二、安装依赖三、创建导出工具类exportWord.js四、调用五、效果图nodejs循环导出多个word表格文档 结果案例: 一、文档模板编辑 二、安装依赖 // 实现word下载的主要依赖 npm install docxtemplater pizzip --save/…

多级IIR滤波效果(BIQUAD),system verilog验证

MATLAB生成IIR系数 采用率1k,截止频率30hz,Matlab生成6阶对应的biquad3级系数 Verilog测试代码 // fs1khz,fc30hz initial beginreal Sig_Orig, Noise_white, Mix_sig;real fs 1000;Int T 1; //周期int N T*fs; //1s的采样点数// 数组声明…

江南大学《2024年807自动控制原理真题》 (完整版)

本文内容,全部选自自动化考研联盟的:《江南大学807自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2024年真题 Part1:2024年完整版真题 2024年真题

Qt 安装Qt Serial Port

最近要用Qt写个串口上位机软件,发现Qt的串口库用不了,上网找了一下资料,找到一种解决办法,具体操作如下: 参考文章:https 目录 一、找到QT安装路径,并运行Qt Maintenance Tool二、选择 添加或移…

matlab finv()函数解释 F分布 和 逆累积分布函数 卡方分布

1.Earths flattening 翻译并解释含义 "Earths flattening" 翻译为中文是“地球的扁率”。 含义解释: 地球的扁率是指地球形状偏离完美球形的程度。地球并非一个完美的球体,而是一个扁球体,即在两极略微扁平,赤道略微…

鸿蒙 Next 可兼容运行 Android App,还支持出海 GMS?

最近 「出境易」和 「卓易通」 应该算是鸿蒙和 Android 开发圈“突如其来”的热门话题,而 「出境易」可能更高频一些,主要也是 Next 5.0 被大家发现刚上架了一个名为「出境易」的应用,通过这个 App 用户可以直接运行不兼容 Next 的 Android A…

Windows实现Jenkins的自动化部署

什么是Jenkins?Jenkins有什么用? 按照我个人的理解,Jenkins就是一个很简单实现自动化工具,按照了Jenkins你就可以拥有一个类似小爱同学一样的管家,你可以通过你的手机步骤一个任务给你的小爱同学,例如打开…

Python网络爬虫技术详解与实践案例

Python网络爬虫技术详解与实践案例 在大数据和人工智能盛行的今天,数据的获取与分析成为许多项目和业务的关键。网络爬虫作为一种自动化的数据采集工具,广泛应用于数据挖掘、市场分析、情报收集等领域。本文将详细介绍Python网络爬虫的基本概念、工作流程、进阶技巧,并附上…

合规性要求对漏洞管理策略的影响

讨论漏洞管理中持续面临的挑战,包括确定漏洞的优先级和解决修补延迟问题。 介绍合规性要求以及自动化如何简化漏洞管理流程。 您认为为什么尽管技术不断进步,但优先考虑漏洞和修补延迟等挑战仍然存在? 企业基础设施日益复杂,攻…

挑战用React封装100个组件【004】

项目地址 https://github.com/hismeyy/react-component-100 组件描述 组件适用于展示图片的地方,提供了small,medium,large三种大小。可以删除图片,也可以全屏预览图片。 样式展示 前置依赖 今天我们的这个挑战需要用用到了…

python通过ODBC连接神通数据库

1、安装神通数据库 2、安装python 3、安装pyodbc pip3 install pyodbc-5.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 注:pyodbc要和python版本相对应 4、安装unixodbc 5、配置神通数据库ODBC数据源 6、示例代码如下 #!/usr/bin/python…

【阅读记录-章节5】Build a Large Language Model (From Scratch)

目录 5. Pretraining on unlabeled data5.1 Evaluating generative text models5.1.1 Evaluating generative text models5.1.2 Calculating the text generation loss评估模型生成文本的质量 5.1.3 Calculating the training and validation set losses 5.2 Training an LLM5.…

深入理解 Axios 拦截器的执行链机制

深入理解 Axios 拦截器的执行链机制 在现代前端开发中,Axios 是最流行的 HTTP 请求库之一,而 拦截器(Interceptor)功能是其核心特性之一。通过拦截器,我们可以在请求发送前或响应返回后进行灵活的预处理或后处理。然而…

ElementUI:el-drawer实现在父组件区域内打开抽屉组件非全屏

我们在开发ElementUI的时候遇到抽屉组件全屏的问题,但是我们需要在指定div中展示出来,上代码: 1、在el-drawer中增加属性 el-drawerstyle"position: absolute"z-index"-1":append-to-body"false">// do s…

电机驱动MCU介绍

电机驱动MCU是一种专为电机控制设计的微控制器单元,它集成了先进的控制算法和高性能的功率输出能力。 电机驱动MCU采用高性能的处理器核心,具有快速的运算速度和丰富的外设接口。它内置了专业的电机控制算法,包括PID控制、FOC(Fi…

Ubuntu Linux操作系统

一、 安装和搭建 Thank you for downloading Ubuntu Desktop | Ubuntu (这里我们只提供一个下载地址,详细的下载安装可以参考其他博客) 二、ubuntu的用户使用 2.1 常规用户登陆方式 在系统root用户是无法直接登录的,因为root用户的权限过…

Vue 前端 el-input 如何实现输入框内容始终添加在尾部%

要在 el-input 输入框的尾部添加 %,你可以通过两种方式来实现: 使用 suffix 插槽:这是最直接和最常用的方法。使用 append 插槽:如果你需要在输入框内或者右侧显示其他内容。 方法 1:使用 suffix 插槽 el-input 提供…

开箱即用,阿里开源!专业AI 聊天界面工具包:Ant Design X

Ant Design X是一个基于Ant Design体系的创新解决方案,为构建高效的AI交互界面提供了便利和支持。从精细的原子组件到快速集成的模型服务,Ant Design X让开发者能轻松应对各种需求。本文将结合实际场景,展示Ant Design X的功能与使用方法。 为…

kernel crash数据解析

crash数据解析 crash解析工具下载和编译方法如下: git clone https://github.com/crash-utility/crash.git cd crash; make targetARM64 crash工具解析ramdump文件: 1. 将dump 出来的ramdump 文件拷贝到 Linux 系统 2. 找到当前Linux 内核对应的vm…

git查看本地库对应的远端库的地址

git查看本地库对应的远端库的地址 git remote -v 如果想要查看特定的远端库的url地址,可以使用如下命令,其中origin是默认的远端库的名称,可以使用其他远端库的名称 get remote get-url origin