当前位置: 首页 > news >正文

认识自定义协议

经过前面的介绍,我们知道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.cnnetsun.cn/news/2456511.html

相关文章:

  • 数据库容灾配置全攻略:同城容灾vs两地三中心,RPO、RTO一篇讲透
  • 【C++动态规划】B3734 [信息与未来 2017] 加强版密码锁|普及+
  • 【Perplexity国际新闻搜索实战指南】:20年资深专家亲授5大避坑法则与实时情报提效秘技
  • human-panic 与 Rust 标准库 panic 处理的对比分析
  • 终极指南:3种高效方法破解Cursor AI编辑器限制,免费使用Pro功能
  • 终极指南:如何免费解锁Cursor AI编辑器的Pro功能
  • PlusPlugins实战教程:利用DeviceInfo+和PackageInfo+获取设备信息
  • 告别矩形框!用YOLOv7-Polygon搞定不规则目标检测(附完整数据集转换脚本)
  • Brev Launchables成本控制:7个实用技巧在预算内运行高性能AI项目
  • 观察使用Taotoken Token Plan套餐后的月度成本变化趋势
  • Mi-Create:零基础也能设计小米手表个性表盘的终极可视化工具
  • FPGA时序收敛核心:时钟偏移对建立与保持时间的影响及实战优化
  • BitLocker跨平台访问:Dislocker完整解决方案与技术实现指南
  • 【信息科学与工程学】【管理科学】——第十二篇 企业运营与管理模型体系 第三部分:权力结构与治理模型 ——激励机制与权力制衡
  • Grok系列大模型:xAI的智能宇宙探秘
  • 华硕路由器AdGuardHome安装终极指南:全网络广告过滤快速部署
  • 百度文心大模型如何通过Taotoken快速接入并享受官方折扣
  • HC7253晨芯阳高端电流检测降压LED恒流驱动器
  • ExtractorSharp:让游戏资源编辑变得像拼图一样简单
  • Boss-Key老板键:一键隐藏窗口的Windows隐私保护神器
  • 使用Taotoken后,我的Claude Code项目API调用稳定性提升实录
  • 声明式图表工具:提升技术文档绘制的自动化方案
  • GitHub网络加速终极指南:如何实现10倍下载速度的智能优化方案
  • 探索NVMe管理工具的未来:v2.12版本如何重新定义存储控制边界
  • Vite打包踩坑实录:解决Vue3项目在File协议下打开白屏、资源404的完整方案
  • BilibiliDown:B站视频批量下载的终极解决方案
  • 终极指南:用ESP32 Arduino核心打造专业级物联网解决方案,2小时快速上手
  • 如何用Open-Lyrics在5分钟内为任何音频生成专业字幕
  • 在Taotoken平台管理多个项目APIKey与访问权限
  • Thorium浏览器实战指南:为什么这个Chromium分支能让你告别卡顿与隐私泄露?