您好, 访客   登录/注册

试论数据通信设备协议软件研发

来源:用户上传      作者:

  摘要:数据通信设备协议是为保证数据通信网中通信双方能有效的进行可靠通信而规定的一系列约定。本文从数据通信设备协议的角度出发,对协议软件设计的关键环节进行设计,基于数据通信设备协议软件的定位,对商用协议栈和自行开发的有机结合进行了可行性分析,并提出了数据通信设备协议软件可靠性措施,考虑了并总结归纳了开发实践中的重要经验。
  关键字:数据通信;商用协议栈;协议软件;
  引言
  数据通信设备中的协议软件是数据通信设备的根本保障,用来处理通信过程中的数据包,完成协议规定的操作,使设备符合预期的协议功能和性能指标,并为用户提供数据服务实现雨遵守同样协议的其他设备互相通信。所以,数据通信协议软件的研发尤为关键,本文提出了研发过程中一些经验讨论和思考。
  2数据通信设备协议软件定位
  数据通信设备的研发要考虑实际的功能和性能指标对硬件实现的影响。数据通信量的增加导致对带宽的需求也在增加,协议软件在通信设备中起到越来越重要的作用。早期的数据通信设备中,由于数据量少,数据包通信顺畅不会发生阻塞,到了现在路由器需要同时处理的数据包越来越多,硬件也承担一部分的数据包处理。
  由协议软件或硬件完全单独实现所有的产品业务流程是不现实的,根据评估的产品的性能和功能要求,在产品设计中准确定位数据通信协议在产品的业务和控制层面所发挥的作用,是整个流程中重要的环节。产品评估的重要指标是业务的吞吐量要求和控制包吞吐量要求。在一般情况下,如果这两个指标超过协议栈性能指标的百分之八十,则应该考虑使用硬件处理业务包,协议软件只处理控制包。而且考虑到当前数据流量对带宽的高要求,需要有一定的扩展余量,所以这是在业务数据量大的应用中主要采用的可行方案。
  3商用与自行研发结合
  如果要完全自行开发协议栈,则可能会导致性价比不高、可靠性降低、进度进展缓慢等风险,所以可以考虑使用商用协议栈。尽管商用协议栈也存在着一些问题,但是基本可以实现全部的协议功能,而且鲁棒性较高。因此,在商用协议栈的基础上再进行针对应用需求的进一步改进和开发,是适合市场迅速发展节奏的方式。选择商用协议栈的参考依据包括:是否有合理的架构,是否有方便的扩展借口和协议,是否有完善的协议功能,是否适用于一般的硬件平台,端口和协议的增加是否会影响性能等。
  商用协议栈和自行研发的结合过程中,可以采取“三步”策略:第一步运行通畅,第二步改进优化,第三步进行移植。首先运行通畅是基础,运行时可以参考黑盒测试,讲商用协议看做黑盒,只关注协议的输入和输出和产品模块的接口,运行通过的标志时协议的功能全部都验证可以正常运行;其次在改进优化的中参考白盒测试,对商用协议中影响到性能的代码进行优化或者补充,并不断的进行试验改进:最后是移植,移植的过程中要重点关注协议实现层次以及层次接口,提取出可以固定的核心部分,提供通用接口,在新平台协议上达到原有平遥的功能,形成可再移植的协议模块则标志着移植成功。在以上的结合过程中,既需要商用协议供应商去做技术支持和BUG修复,也需要自己去理解协议功能和改进。商用协议栈更新版本时,如果只是进行了漏洞修复和性能优化,则只需要更新现有的设备协议栈版本与新版本保持一致。如果商用协议栈的新版本改动较大,根据改动的功能大小考虑是否需要重新进行“三步”操作。
  4数据通信设备协议软件可靠性措施
  为了提升数据通信设备协议软件的可靠性,可以采取以下三种措施。
  4.1重视协议栈架构
  协议栈的架构是联系协议栈内各个功能模块的重要机制。良好的协议栈架构体现在功能模块间耦合度低,模块间的接口通用度高且简便,消息传递简单可靠,可以使协议栈便于维护,可靠性提升,可以重复使用,方便了功能的扩展和简化。
  4.2重视协议细节开发
  (1)注重异常情况
  协议主要会在数据包的边界值以及格式转换过程中出现问题。协议中,边界值主要指数据包的尺寸,包字段的大小,基值的选择等。这些临界区的边界值选择要慎重。协议层间的接口和不同协议的包格式转换中,字段格式的对应应该精准,不能出现出错。
  对于协议中出现的异常和问题,都要进行严格的捕获和处理,在每个处理模块的入口都要对参数进行精确的检查,对动态资源的分配和申请以及下层处理后返回的结果进行合理性的检查。对异常问题的处理分为资源归还和通知操作者,如果操作造成异常,可以有三种方法在处理:一种是在当前层处理,适用于不承担可靠性保证的模块,简化了逻辑但是其他层操作者无法知道异常;第二种集中處理,可以将异常都集中发送到异常处理模块,适用于集中控制方式的协议,处理逻辑集中;第三种是只完成当前及以下层的处理,这样处理层次分明。
  (4)注重缓冲区和堆栈
  协议的运行中,缓冲区的分配与释放也需要考虑。为了提高协议的稳定性,动态缓冲区管理可以转化使用静态内存管理,减少资源调用产生的问题。在使用动态缓冲区管理的过程中,对于避免分配和释放内存过程中产生的碎片问题,也有两种做法可以解决,一种是内存划块,另一种是将内存组织为字节块不相同的链表,再开辟与资源大小相近的内存空间。
  运行过程中堆栈的溢出会导致系统崩溃,在研发调用代码前,应当合理的分配一定的堆栈空间,考虑成员函数中的成员变量以及输出是传变量值还是传地址的方式,传址可以节省内存空间,但是容易产生差错。
  (5)减少全局变量调用问题
  首先,可以通过划分静态函数与静态变量的方式,在协议实现的过程中有时调用全局变量会造成数据紊乱,可以考虑定义静态函数和静态变量,将变量定义到类里面,避免全局变量的无限制调用。其次,对于全局变量的访问,还可以考虑采用封装访问接口的方式,虽然增加了开销,但是可以在接口处追踪到数据使用者,有助于后期的故障定位调试。
  4.3重视协议软件测试
  协议软件的测试可以分为协议的一致性和可靠性测试。协议的一致性测试是进行软件测试时是否能够按照协议的文本规定,输入特定的值时有正确的响应,即可以保持协议响应的正确和完备。特定的运行条件包括极限条件和异常条件,极限条件是超过协议规定吞吐量的数据包,异常条件是输入数据包异常以及输入数据包的过程异常。
  5结论
  采取合适的开发方案,商用协议栈和自行研发合理的进行组合,构造良好的协议架构、关注协议栈开发过程中需要注意的细节以及完整全面的软件测试是保证数据通信设备中协议软件开发的关键环节,为成功研发一个数据通信设备打下坚实的基础。
转载注明来源:https://www.xzbu.com/1/view-14775640.htm