iT邦幫忙

2021 iThome 鐵人賽

DAY 2
0

接著上一篇,來看看如何制定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而已,差別沒有很大(如有有人需要,請在評論區告訴我,我可以發一下自己項目中實作的進行講解);
下篇預告:網絡傳輸中的應用層工具説明


上一篇
網絡框架
下一篇
網絡框架:應用層工具
系列文
applicatio框架搭建,包含常用toolkit:ui,network,multithread,db,config,log,data structure4
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言