协议栈开发学习总结

近来一直很少些关于技术方面的文章,一来是被工作和生活所累,没有很多闲暇多余的时间,二来呢是觉得一直没有好的case,或则有好的case,但觉得目前在这个case方面,自己还不算很professional。今天心情不错,感觉也很好,就把我近一年来在“协议栈”开发方面的一些经验写下来,算是对自己这一阶段的一个终结,也希望能对后来者能有所帮助。

    首先,不要以为做协议栈开发很难(诚然,商用稳定的协议栈开发的确也不容易协议栈开发学习总结^_^),所以首先一定要有足够的信心,其次如果有前辈带你上手那就好很多,如果没有,自己一个人去“专研”,那么你做的首要的事情还是要有信心,不要有“惧怕”的思绪。好了,开始进入正题,如下:

 

一,阅读协议栈相关文档

    关于单个协议的定义,权威的自然是IETF(互联网工程任务推进组织)的"rfc"文档,虽然是一大堆的英文(呵呵,我英文也一般),开始不太看的明白,不过没关系,先去网络上用"baidu"或则"google"搜索一下关于你要做的这个协议的中文说明,虽然绝大数介绍都很肤浅,但这么做的在于去了解该协议的目的和用途,心中有个大的概念,而后在大致的阅读下该协议"rfc"文档的大体描述和结构。

    需要说明的是在大多数情况下,一个完整的协议栈都有好几个协议组成,所以也有1个或若干个"rfc"文档要去学习和了解,但切记不用把所有"rfc"文档都读的相当仔细和完全明白后再去做,我们的目的在于只把握协议栈的框架和大概信息。

    所以,这个阶段是基础准备阶段。

 

二,设计协议栈结构

    这个阶段也是最核心、最重要的一个阶段,可以说,开发成功与否的关键也全在这个阶段。我们在第一个阶段的基础上,明白了要开发的协议栈的功能及其相关协议后,我们就要来设计这个协议栈框架的实现,一般有注意如下几方面:

    1,功能性:这个很自然,如能实现功能还做什么

    2,可扩展:协议栈最好划分出内核和外围模块,利于将来扩展和维护

    3,模块独立:协议栈内核和外围模块尽量独立,减少耦合

这个阶段虽然说起来容易,但做起来去要看个人的能力和水平,包括代码的机构、风格、易维护、易移植、稳定、健壮性等等。所以,如果连基本程序都写不好,没有好的代码风格和没有把握大结构能力的,最好还是请别人帮忙。

注释:协议栈的设计要看协议栈的特点,比如有的协议栈是对称的(比如rtsp流控协议),有些是不对称的(比如http协议),各有各特点,所以在把握大结构的同时要针对各自的特点来设计。

 

三,编码开发

    框架完成后,开始丰满核心模块和构建基本的外围模块。通常这阶段需要搭建好开发环境,便测试便修改。

注释:很重要的工作,ethereal(抓包软件),做协议这个是一定要用熟的。

 

四,测试与维护

    基本上到这个阶段,协议栈的开发工作就OK了,剩下的就是测试、维护,调整代码,加强协议栈的稳定性和健壮性。

 

五,后记

    由于文字表达上的局限和本人水平的问题,上述只是简要描述了一下开发协议栈的一般常规步骤,算是对自己的一个总结,也希望对读者有所帮助,不当之处,请多包含。

 

个人已做过的协议栈(简要说明):

1, SIP

   会话发起协议,关联SDP\RTP\RTCP等协议

2, TR069

   终端网管协议,关联HTTP\SOAP\XML\TR-111(STUN NAT穿越)\TR-106(外围数据模型)

3, 流控

   多媒体流控协议,管理RTSP\RTP\SDP\MP2T等

 

终于写完了~~真累,哎,中午了,吃饭去,呵呵~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】QGridLayout 详解

转自:https://blog.csdn.net/u013928315/article/details/78123573 一、QGridLayout属性介绍 1、QGridlayout以方格的形式管理窗口部件,先看QGridLayout的属性,如下图 2、各个参数的介绍 layoutLeftMargin ...至layoutBottomMargin在ui_Mai…

java import 出错,Eclipse的java代码出错:The import XXXX cannot be resolved

折腾Eclipse时,经常会遇到这种情况:缺少某个库,找到之后,需要将该库,jar包,加入到当前项目,使得代码中的import xxx得以正常导入。【如何在Eclipse中导入/添加(外部的)库/jar包】基本思路&#…

WCF从理论到实践(14):WCF解决方案模板 (转)

WCF从理论到实践(14):WCF解决方案模板 正所谓磨刀不误砍柴工,虽然VS2008为我们提供了WCFServiceLibrary项目模板,但在实际开发的时候,我们通常更喜欢按照自己的方式来建立WCF项目,通常情况下,我们将服务契约(通常是接口)数据契约,消息契约等契约单独作为一个项目,而将服务的实现…

thinkphp index.php隐藏,thinkphp5怎么隐藏index.php入口文件?

隐藏方法:1、打开apache的http.conf配置文件,开启mod_rewrite.so模块;2、AllowOverride None项中将None改为All;3、修改“.htaccess”的配置内容,将原代码替换为官方手册提供的代码。thinkphp现在的php主流框架之一&am…

【转】extern “C“和__declspec(dllexport)以及__declspec(dllimport) 和def的简单解析

转自:https://blog.csdn.net/xupan_jsj/article/details/9028759 前面的extern "C" __declspec(dllexport) __declspec(dllimport)都是用于函数或者变量,甚至类的声明的(可以把extern "C"放在class的前面,…

【转】extern “C“以及__declspec(dllexport) 讲解和def文件dll导出方法

转自:https://blog.csdn.net/qing666888/article/details/41135245 一,__ declspec(dllexport): 将一个函数声名为导出函数,就是说这个函数要被其他程序调用,即作为DLL的一个对外函数接口。通常…

【转】DICOM医学图像处理:浅析SWF、MWL、SPS、MPPS

转自:https://blog.csdn.net/zssureqh/article/details/40151107 背景: 最近重新花时间阅读了DICOM标准,顺带着看了一下HL7标准和IHE,对标题中提到的SWF、MWL、SPS和MPPS有了更进一步的认识,现将自己的理解整理出来&a…

Php点击更换封面,JavaScript_js实现点击图片改变页面背景图的方法,本文实例讲述了js实现点击图 - phpStudy...

js实现点击图片改变页面背景图的方法本文实例讲述了js实现点击图片改变页面背景图的方法。分享给大家供大家参考。具体实现方法如下:点击图片即改变页面的背景图片希望本文所述对大家的javascript程序设计有所帮助。相关阅读:C语言编程中统计输入的行数以及单词个数…

串口通讯基础及S3C2410 UART控制器

数据通信的基本方式可分为并行通信与串行通信两种: 并行通信:是指利用多条数据传输线将一个资料的各位同时传送。它的特点是传输速度快,适用于短距离通信,但要求通讯速率较高的应用场合。 串行通信:是指利用一条传输线…

几个实用的Servlet应用例子-入门、cookie、session及上传文件

1Servlet可以被认为是服务端的applet,它被WEB服务器加载和执行,前端可以显示页面和获得页面数据,后台可以操纵数据库,能完成JavaBean的很多功能。在这里我较为详细的说说Servlet在Cookie,Session和上传文件上的应用&am…

【转】DICOM医学图像处理:DIMSE消息发送与接收“大同小异”之DCMTK fo-dicom mDCM

转自:https://my.oschina.net/zssure/blog/354816 背景: 从DICOM网络传输一文开始,相继介绍了C-ECHO、C-FIND、C-STORE、C-MOVE等DIMSE-C服务的简单实现,博文中的代码给出的实例都是基于fo-dicom库来实现的,原因只有一…

公司间交易学习笔记---概述

本系列笔记是我在学习公司间交易的过程中的随笔,有些是我自己的想法,内容可能跟教程有所出入,由于对AX的应用部分理解得很浅,所以如果错误还请多多指教。 为了处理集团公司中各个分公司之间的交易,AX采用了InterCompan…

用VS2005开发WinCE程序调试图文教程

一、WinCE 模拟器通过ActiveSync 6.1(即Windows Mobile设备中心)连接PC ActiveSync 6.1:http://www.cr173.com/soft/26994.html 1.启动WinCE模拟器 命令行: start .\DeviceEmulator.exe WINCE镜像\Wince5.bin /memsize 256 /video 480x272x16 /sharedf…

【转】 ADO.NET最佳实践

本文转自:http://blog.csdn.net/spidertan/archive/2003/12/13/17110.aspx 概述: 本文在微软站点资源的基础上加工整理而成,意在介绍在你的ADO.NET应用程序中执行和完成性能优化、稳定性和功能性方面提供最佳的解决方案;同…

php 变量文件间传递,同一文件的两个JS函数之间如何传变量?

满意答案ed_ch2013.11.06采纳率:44% 等级:12已帮助:8801人定义成全局变量就可以了var style_key;function change_mystyle(my){style_keymy.options[my.selectedIndex].value;if(style_key 114la){document.getElementById(shoostyleicon…

获取 Web 设计的免费资源

Web 开发人员可以找到很多免费资源,尽管其中一些资源会比另外一些资源更加自由。如果您正在设计网站或 Web 应用程序,那么不管是静态的还是所有可以想到的动态 Ajax 内容,都能找到减轻您的劳动强度并为网站增色的资源。本文从免费图标到 Web …

设计模式C++实现(1)——工厂模式

软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书&#xff0…

java对象间的转型,详细讲述Java中的对象转型

向上转型:子类对象转为父类,父类可以是接口。公式:Father f new Son();Father是父类或接口,son是子类。向下转型:父类对象转为子类。公式:Son s (Son)f;我们将形参设为父类Animal类型,当执行t…

C++设计模式之一 工厂模式(简单工厂、工厂和抽象工厂)

今天开始这个系列之前,心里有些恐慌,毕竟园子里的高手关于设计模式的经典文章很多很多,特别是大侠李会军、吕震宇 老师的文章更是堪称经典。他们的文笔如行云流水,例子活泼生动,讲解深入浅出。好在他们都是用C#描述&am…

【转】Windows消息传递机制详解

林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka Windows是一个消息(Message)驱动系统。Windows的消息提供了应用程序之间、应用程序与Windows系统之间进行通信的手段。应用程序想要实现的功能由消息来触发,并且靠对消…