自定义应用层通信协议_第1页
自定义应用层通信协议_第2页
自定义应用层通信协议_第3页
自定义应用层通信协议_第4页
自定义应用层通信协议_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1通信协议的概念及其要素在osi开放互联参考模型中,对等实体之间数据单元在发送方逐层封装,在接收方的逐层解析。发送方n层实体从n+1层实体得到的数据包称为服务数据 单元(service data unit,sdu)。n层实体只将其视为需要本实体提供服务的数据,将服务数据单元进行封装,使其成为一个对方能够理解的数据单元(protocol data unit,pdu),封装过程实际上是为sdu增加对等实体间约定的控制信息(protocol control information,pci)的过程。为了保证网络的各个功能的相对独立性,以及便于实现和维护,通常将协议划分为多个子协议,并且让这些协议保持一

2、种层次结构,子协议的集合通常称为协议簇。网络协议的分层有利于将复杂的问题分解成多个简单的问题,从而分而治之。各层的协议由各层的实体实现,通信双方对等层中完成相同协议功能的实体称为 对等实体。对等实体按协议进行通信,所以协议反映的是对等层的对等实体之间的一种横向关系,严格地说,协议是对等实体共同遵守的规则和约定的集合。通信协议精确地定义了双方通信控制信息和解释信息:发送方能将特定信息(文本、图片、音频、视频)按协议封装成指定格式的数据包,最终以串行化比特流在网络上传输;接收方接收到数据包后,根据协议将比特流解析为本地化数据,从而获取对方发送过来的原始信息。通信协议包括三个要素:(1)语法:规定了

3、信息的结构和格式;(2)语义:表明信息要表达的内容;(3)同步:规则涉及双方的交互关系和事件顺序。整个计算机网络的实现体现为协议的实现,tcp/ip协议是internet互联网的核心协议。2通信协议开发步骤(1) 协议的开发主要包括协议设计、协议形式描述、协议实现和协议一致性测试。协议的开发过程与步骤如图1所示。 图1 协议开发过程与步骤(2) 协议设计过程中的分组发送接收模型如图2所示。1 / 6图2协议设计过程中的分组发送接收模型(3)协议的一致性测试协议的一致性测试是指测试协议能否按照预想的控制策略实现正确的通信,主要体现在数据包通过信道从信源传送到信宿后,信宿能够根据协议正确的解析出原

4、始信息。协议的一致性测试如图3所示。图3 协议一致性测试环境根据测试环境的可以分为局部测试和分布式测试,如图4所示。图4局部测试法、分布式测试法3数据包和数据报为方便描述自定义协议,还是借用数据包和数据报来描述封装数据单元和传输数据单元,但这里的数据包和数据报完全不同于tcp/ip架构中的packet和datagram概念。下文所述的数据包指封装的基本单位,以tlv(type-length-value)格式封装基本消息单位;数据报package是传输的基本单位,头部包含序列号和命令信息。接收端根据命令信息分辨事件类型,做出不同的解析。报文实体是多个tlv数据包组成的链表。 4.数据包tlv的设

5、计从应用层http协议,到超文本置标语言html(hypertext mark-up language),再到可扩展置标语言xml(extensible markup language),它们提供了数据的格式化存储、传输和格式化显示的规范,是网络通信的基石。然而http协议以及html/xml置标语言的本质就是 定义一堆标签(tag)对数据进行串行化序列化,然后接收方再根据标签解析、还原数据。自定义通信协议的关键是对数据包的合理构造(construct)和正确解析(parse),即制定编解码规则。抽象语法标记asn(abstract syntax notation) ber的长度确定的编码方式

6、,由3部分组成identifier octets、length octets和contents octets,实际上这就是一中tlv(type-length-value)模型:类型字段(type或tag)是关于标签和编码格式的信息;长度字段 (length)定义数值的长度; 内容字段(value)表示实际的数值。因此,一个编码值又称tlv三元组。编码可以是基本型或结构型,如果它表示一个简单类型的、完整的显式值,那么编码就是基本型(primitive);如果它表示的值具有嵌套结构,那么编码就是结构型 (constructed)。tlv编码就是指对type(tag)、length和value进行编

7、码,形成比特流数据包;解码是编码的逆过程,是从比特流缓冲区中解析还原出原始数据。采用c+编程语言设计tlv协议类,其类视图如图5所示。图5 ctlv类视图目前只提供设置整形值(int型)的setvalue_int和设置字符串值(c_string型)的setvalue_cstring两个接口。tlv将数据封装成包的格式如表1所示。表1 tlv包格式tlv包头部包实体m_dwtagm_nlenm_pvalue tlv的接口说明:(1)值类型标签m_vttag是内部辅助枚举变量,它根据构造tlv时传递的服务类型标签m_dwtag来确定。(2)tlv:m_nlen在为tlv设置具体值时确定。(3)tl

8、v包的封装:1)使用tag参数创建一个tlv对象后,调用tlv:setvalue_*方法为tlv填充具体值;2)调用tlv:tobuffer方法打包到缓冲区streambuffer。(4)tlv包的解析:创建一个tlv对象后,调用tlv:frombuffer方法从缓冲区streambuffer解析出tlv。(5)封装和解析涉及到本机字节顺序和网络字节顺序的转换问题。(6)调用tlv:setvalue_*方法填充tlv时,统一字节边界数为4。5.数据报package的设计不同于底层的数据包/数据报只是对数据层次的封装解析,实际应用程序是以事件驱动的,因此必须注册不同的信令(事件类型标签),然后填

9、充到数据报中。接收端根据信令做出相应的事件处理。例如在c/s通信系统中,客户端往往要先登录,通过服务器端的校验才能进行后续通信。因此客户端运行后,需要构造并向服 务器端发送含有login信令的包含用户名字符串strusername和密码字符串strpassword的数据报;服务器端解析login信令后做校 验处理,然后发送含有login_response信令和校验结果的回执数据报给客户端。采用c+编程语言设计package类,其类视图如图6所示。图6 cpackage类视图package类将tlv封装成包的格式如表2所示。表2 package包格式package包头部序列号包实体m_ncmdl

10、enm_dwcmdidm_dwcmdstatem_nseqnocount*tlv package的接口说明:(1)package:m_ncmdlen是整个package包的长度,将其作为首个字段的好处在于当传送大数据包时,接收方可以根据数据长度来控制读状态,从而将一个大数据包分批接收。(2)package:m_ncmdlen在构造函数中初始化为16,在调用package:addtlv方法填充包实体时增长。(3)package包的封装:1)创建package对象后,调用package:setheader方法填充头部信令;2)创建tlv对象并填充数据,再调用package:addtlv方法填充包实

11、体;3)调用package:tobuffer方法将package打包到缓冲区streambuffer。(4)package包的解析:1)先创建一个package对象,调用package:frombuffer方法从缓冲区streambuffer先解析出package的头部和序列号,再从剩余缓冲区中解析出tlv并将其串行化到链表。2)调用package:gettlv方法根据tag从链表中查找具体tlv包,再调用tlv:getvalue方法取得具体值。(5)package:tobuffer方法和package:frombuffer方法主要遍历package:m_tlv_list列表,然后调用tlv:

12、tobuffer方法和tlv:frombuffer方法解析出tlv数据单元。tlv数据包的功能测试(主要是本地测试)鉴于实际通信数据最后都要转换成比特流,故只测试发送字符串类型的变量,仅测试协议能否正确打包、解析。其他类型的普通数据都可以转换成字符串传输,最后,接收方根据m_dwtag确定值类型m_vttag,解析出具体值。对tlv:setvalue_c_string方法填充tlv的测试,需要考虑字节对齐问题。对于长度为4字节倍数的c状态字符串,打包时省去末尾的/0结束标志符。需要测试长度非4倍数的字符串和长度为4倍数的字符串。经本地测试,调用tlv:setvalue_int方法和tlv:setvalue_c_string方法构造整形和字符串时,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论