如何设计应用层协议(草稿)
應用層的協議應當定義什么
- 應用進程交換的報文類型,如請求報文和相應報文
- 各種報文類型的語法,如報文中的各個字段及其詳細描述
- 字段的語義,即包含在字段中的信息的含義
- 進程何時,如何發(fā)送報文,以及及時對報文進行響應的規(guī)則
協議分類(按編碼方式)
二進制協議
比如網絡通信運輸層中的tcp協議
特點
性能要求非??量?#xff0c;以至于JSON等序列化會嚴重拖慢性能
數據本身帶有大量的二進制內容,不適合使用文本格式
其他目的(協議保密,反偵測等)
對端的軟件由其他人開發(fā),已經出于某種目的使用了二進制協議
明文的文本協議
比如應用層的http、redis協議。
特點
能很容易與其他語言或框架進行對接;有成熟的編程框架;有現成的版本升級與兼容的方案;有配套的中間件
混合協議(二進制+明文)
比如蘋果公司早期的APNs推送協議。
用Socket進行通信,發(fā)送的數據包一定是有結構的,類似于:數據頭+數據長度+數據內容+校驗碼+數據尾。
這個你定義一個Struct包裝起來即可。
控制碼是協議的基礎信息,主要用來解釋數據包的基本信息,通信觸發(fā)的動作等,以便告知收到數據包之后應該如何處理數據包。
例如,你傳輸文件的時候,一般會經過“傳輸開始 - 傳輸中 - 傳輸結束”三個階段,那么Sender針對不同的階段就要定義不同的命令控制碼,以便讓Receiver知道傳輸處于什么過程,這樣Receiver收到數據包之后便可以知道下一步該做什么
而流程控制是協議的核心所在。以TCP/IP為例,Client和Server如何知道雙方已經正確建立了連接?答案就是“三次握手”。三次握手就是流程控制。這個就需要對應用程序的通信流程把握的非常熟悉。
以你的問題為例,“把數據從工控機(wince)系統(tǒng) 發(fā)送到服務器中(xp)中”,XP如何判斷已經完整而且無誤地收到了一個來自于wince的數據包?答案就是靠自定義的協議控制碼(數據長度)。收到的數據如果是正確的,回應什么給wince?是錯誤的,又該回什么給wince?這就要靠協議所定義的流程控制。
你把控制碼定義完備了,把雙方的通信流程也定義OK了,這就基本是一個應用層協議了。
總結
以上是生活随笔為你收集整理的如何设计应用层协议(草稿)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文件服务器之FTP
- 下一篇: Python与MySQL