网络框架:如何制定protocol

接着上一篇,来看看如何制定protocol,制定的时候,一般是server端和client端双方坐下来一起制定的:
首先我们看一下以网络层的tcp/ip为通讯协议的protocol:
https://ithelp.ithome.com.tw/upload/images/20210915/2013921249aplDV45d.png

这个图是一个典型的案例,这是agv调度系统和agv之间的通讯协议(调度系统要调度多台车子,这种一对多的情况,调度系统作爲server端,车子端作爲client端来通讯);
协议简介:协议是一条一条制定的,既要制定发送协议,也要制定回传协议(需要的话),还需要心跳包(特点是短小和计数);
我们看第一条:作用是“路径序列”,这个表示协议的功能,依次往後:编号,data的长度,data的内容,check位;
这就是最基础的结构:
1 编号:顾名思义,不同的编号,解包的时候,使用的数据结构是不一样的,实作中,大部分情况下:每条协议都是一个struct;
2 data的长度:通过这个利用byte操作,把data内容读出来;
3 check位:这个是网络传输中的基本常识,那就是确保传输内容没有偏差,毕竟是网络传输,你不知确定是网络出错,还是传错了,总归是需要check一下;补充説明:check位 = data内容中的每个byte依次按位取反的结果;
细节:
1每个功能的编号必须区分开(比如我命令只有256个以内,那麽就用1个byte就够了,如果超过,就需要两个byte表示编号位)
2 data的内容会有多个子内容:每个子内容定为几个byte就是几个byte,解包的时候,直接使用byte的大小拿出数据,然後进行强制类型转换就可以取得数据了;
3 check位:在传输层也有check位(各层有自己的check位);
如果是应用层的protocol:大多看到的都是json格式或者html格式等
比如mqtt:我在项目中做过的一次mqtt的协议json格式的,发送协议和收到协议都是json档案,格式类似字典格式,比如:{session:XXX;name:XXX;....}
html格式:这个在web通讯中很常用,最近刚好在实作这个部分,相关资讯可以去查看看;
总结一下:这篇详细説明tcp/ip层的协议,是因爲这个是最原始的协议,熟悉这个协议之後,其他协议都是小case(个人体会是,理解了这个,再去做应用层协议,串口协议,plc协议,都没什麽难度);爲什麽会有应用层协议,就是因爲更适合新手学习和方便使用,如果一上来就要你直接处理byte和制定所有的细节的protocol,就会觉得很繁杂;但是学会制定tcp/ip层的协议,之後的字典型的协议,也就很容易理解和处理了;至於,串口协议和plc协议,只不过是处理到了bit而已,差别没有很大(如有有人需要,请在评论区告诉我,我可以发一下自己项目中实作的进行讲解);
下篇预告:网络传输中的应用层工具説明


<<:  Flutter体验 Day 7-State生命周期

>>:  Day13-seaborn(1)长条图barplot、countplot

LeetCode 955. Delete Columns to Make Sorted II

Delete Columns to Make Sorted II Medium You are g...

Day 04 - 行前说明 — 谈谈元件化开发与开发流程

如昨天预告的一样,今天来介绍元件化开发的技术背景,它是什麽、为什麽重要,最後再讲一下元件的开发流程...

Blazor 开发入门系列

2022 新的一年降临了,回首望望过去,原本用 Blog 方式写下技术文, 後来尝试用 youtub...

C# 如果class本身当参数传递是 call by reference , 那前面加上ref有何用呢?

作为IT邦的第一篇文章 就来开这个主题好了 public class ValueModel { pu...

Day10-119. Pascal's Triangle II

今日题目:119. Pascal's Triangle II Given an integer ro...