(一)
当我们学习网络协议的时候,很多朋友都将协议栈和协议弄混了。那么这次我们就来解释一下协议栈是什么。相信大家通过阅读文章后就能找到答案,现在就让我们一起来看看具体的内容吧。
协议栈
协议栈是什么?协议栈是指网络中各层协议的总和,其形象的反映了一个网络中文件传输的过程:由上层协议到底层协议,再由底层协议到上层协议.使用最广泛的是英特网协议栈,由上到下的协议分别是:应用层(HTTP,TELNET,DNS,EMAIL等),运输层(TCP,UDP),网络层(IP),链路层(WI-FI,以太网,令牌环,FDDI等)
tcp/ip协议栈
TCP/IP协议,或称为TCP/IP协议栈,或互联网协议系列.
TCP/IP协议栈
(按TCP/IP参考模型划分)
应用层 FTP SMTP HTTP ...
传输层 TCP UDP
网络层 IP ICMP ARP
链路层 以太网 令牌环 FDDI ...
包含了一系列构成互联网基础的网络协议.
这些协议最早发源于美国国防部的DARPA互联网项目.
TCP/IP字面上代表了两个协议:TCP传输控制协议和IP互联网协议.
时间回放到1983年1月1日,在这天,互联网的前身Arpanet中,TCP/IP协议取代了旧的网络核心协议NCP(Network Core Protocol),从而成为今天的互联网的基石.最早的的TCP/IP由Vinton Cerf和Robert Kahn两位开发,慢慢地通过竞争战胜了其它一些网络协议的方案,比如国际标准化组织ISO的OSI模型.TCP/IP的蓬勃发展发生在上世纪的90年代中期.当时一些重要而可靠的工具的出世,例如页面描述语言HTML和浏览器Mosaic,导致了互联网应用的飞束发展.
随着互联网的发展,目前流行的IPv4协议(IP Version 4,IP版本四)已经接近它的功能上限.IPv4最致命的两个缺陷在于:
地址只有32位,IP地址空间有限;
不支持服务等级(Quality of Service, Qos)的想法,无法管理带宽和优先级,故而不能很好的支持现今越来越多的实时的语音和视频应用.因此IPv6 (IP Version 6, IP版本六) 浮出海面,用以取代IPv4.
TCP/IP成功的另一个因素在与对为数众多的低层协议的支持.这些低层协议对应与OSI模型 中的第一层(物理层)和第二层(数据链路层).每层的所有协议几乎都有一半数量的支持TCP/IP,例如: 以太网(Ethernet),令牌环(Token Ring),光纤数据分布接口(FDDI),端对端协议( PPP),X.25,帧中继(Frame. Relay),ATM,Sonet, SDH等.
TCP/IP协议栈组成
我了解了协议栈是什么,现在就来看看它的组成。整个通信网络的任务,可以划分成不同的功能块,即抽象成所谓的 " 层" .用于互联网的协议可以比照TCP/IP参考模型进行分类.TCP/IP协议栈起始于第三层协议IP(互联网协议) .所有这些协议都在相应的RFC文档中讨论及标准化.重要的协议在相应的RFC文档中均标记了状态: "必须" (required) ,"推荐" (recommended) ,"可选" (elective) .其它的协议还可能有" 试验"(experimental) 或" 历史"(historic) 的状态.
必须协议
所有的TCP/IP应用都必须实现IP和ICMP.对于一个路由器(router) 而言,有这两个协议就可以运作了,虽然从应用的角度来看,这样一个路由器 意义不大.实际的路由器一般还需要运行许多"推荐"使用的协议,以及一些其它的协议.
在几乎所有连接到互联网上的计算机上都存在的IPv4 协议出生在1981年,今天的版本和最早的版本并没有多少改变.升级版IPv6 的工作始于1995年,目的在与取代IPv4.ICMP 协议主要用于收集有关网络的信息查找错误等工作.
现在相信大家都了解了协议栈是什么,并且对于它的结构也有所掌握了。希望本文的资料对您有所帮助。
协议栈,英语名称为Protocol stack,又称协议堆叠,是计算机网络协议套件的一个具体的软件实现。协议套件中的一个协议通常是只为一个目的而设计的,这样可以使得设计更容易。因为每个协议模块通常都要和其他两个通信,它们通常可以想象成是协议栈中的层。最低级的协议总是描述与硬件的物理交互。每个高级的层次增加更多的特性。
协议栈是指网络中各层协议的总和,其形象的反映了一个网络中文件传输的过程,由上层协议到底层协议,再由底层协议到上层协议。协议栈主要分为以下几种:
OSI协议栈:OSI协议栈是由国际标准化组织为提倡世界范围的互操作性而定义的。它通常被用于其它协议栈进行比较的标准。
TCP/IP协议组:传输控制协议/因特网协议(TCP/IP)是最早的网络协议栈之一。其中IP部分提供了一种对互联网络连接的最好定义,并且被许多厂商用于在局域或广域互联产品。
ZigBee协议栈是在IEEE 802.15.4标准基础上建立的,定义了协议的MAC和PHY层。ZigBee设备应该包括IEEE802.15.4的PHY和MAC层,以及ZigBee堆栈层:网络层、应用层和安全服务提供层。
协议是个标准,是约定;协议栈是协议的实现,可以理解为代码、函数库、供上层应用调用。商业化的协议栈就是给你写好了底层的代码,符合协议标准,提供给你一个功能模块给你调用。你需要关心的就是你的应用逻辑,数据从哪里到哪里,怎么存储,处理还有系统里的设备之间的通信顺序什么的。所以当你做具体应用时,不需要关心协议栈是怎么写的,里面的每条代码是什么意思。
(二)
来自牛哥的经验之谈
1,协议栈
协议栈是指网络中各层协议的总和,其形象的反映了一个网络中文件传输的过程:由上层协议到底层协议,再由底层协议到上层协议。使用最广泛的是英特网协议栈,由上到下的协议分别是:应用层(HTTP,TELNET,DNS,EMAIL等),运输层(TCP,UDP),网络层(IP),链路层(WI-FI,以太网,令牌环,FDDI等),物理层。
如果不参考下面进行数据交换的协议或通信过程的讨论,那么就不可能讨论计算机的互联。对协议的任何讨论通常都会牵涉到与开放式系统互联(OSI)协议栈的比较。OSI协议栈定义了厂商们如何才能生产可以与其它厂商的产品一起工作的产品。然而,由于缺乏工业界的承认,今天,OSI更象是一个模型,而不是一个被接受的标准。这是因为许多公司已经在他们的产品中实现了另外一些协议。
协议定义与其它系统通信的方式。它描述信号的时序和通信数据的结构。在协议栈的较低层定义了厂商们可以遵循规则以使他们的设备可以与其它厂商的设备进行互联。较高层定义如何管理不同类型的通信会话,用户应用程序如何才能相互操作。你在协议栈中走得越高,协议也越复杂。
让我们利用OSI标准来比较厂商的操作系统及产品间网络互联和互操作性。在这个OSI模型中,在协议栈中有七层,每个都在不同的硬件和软件级别进行工作。你可以检查协议栈的每一层来观察系统是怎样在局域网(LAN)上进行通信的。互联或协议栈的OSI模型如图P-17所示。
如以前所述,许多厂商并不完全跟随OSI协议栈。他们使用很接近OSI协议栈的其它协议栈,或者将一些独立的协议组合成一个协议组。图P-18对一些最流行的协议栈进行了比较。使用一种协议栈的产品不能与使用另外一种协议栈的产品直接相连或相互操作。然而,使用不同的“封装”技术和协议转换,是可能在它们之间做到一些级别的互操作性的。下面列出了一些主要的协议栈:
OSI协议栈:OSI协议栈是由国际标准化组织(ISO)为提倡世界范围的互操作性而定义的。它通常被用于其它协议栈进行比较的标准。
NetWare SPX/IPX协议:NetWare串行分组交换/网间分组交换(SPX/IPX)协议,是由NovellNetWare使用的一种本质性协议(nativeprotocol)。它源于Xerox网络系统(XNS)协议栈。
TCP/IP协议组:传输控制协议/因特网协议(TCP/IP)是最早的网络协议栈之一。它最初是由美国国防部为将多厂商网络产品连接在一起而实现的。其中IP部分提供了一种对互联网络连接的最好定义,并且被许多厂商用于在局域或广域互联产品。
AppleTalk协议:AppleTalk协议是由Apple Computer为互联Apple Macintosh系统而定义的。
IBM/Microsoft协议组:IBM和Microsoft进行互联的产品通常是结合在一起的,这是因为这两个公司联合起来开发使用他们的产品,例如,L管理器和OS/2。
2,协议栈开发步骤经验
一,阅读协议栈相关文档
关于单个协议的定义,权威的自然是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等
(三)
简析开原协议栈
在开源系统中,可能一些协议栈的使用会稍许不同,那么下面我们就讲解了几个常用的开源协议栈,来为大家详细讲解和对比一下。具体内容,还请大家从下文来了解吧,首先让我们看看BSD TCP/IP协议栈。
1、BSD TCP/IP协议栈
BSD栈历史上是其他商业栈的起点,大多数专业TCP/IP栈(VxWorks内嵌的TCP/IP栈)是BSD栈派生的.这是因为BSD栈在BSD许可协议下提供了这些专业栈的雏形,BSD许用证允许BSD栈以修改或未修改的形式结合这些专业栈的代码而无须向创建者付版税.同时,BSD也是许多TCP/IP协议中的创新(如广域网中饿拥塞控制和避免)的开始点.
2、uC/IP
uC/IP是由Guy Lancaster编写的一套基于uC/OS且TCP/IP开源协议栈,亦可移植到其它操作系统,是一套完全免费的、可供研究的TCP/IP协议栈,uC/IP大部分源码是从公开源码BSD发布站点和KA9Q(一个基于DOS单任务环境运行的TCP/IP协议栈)移植过来.uC/IP具有如下一些特点:带身份验证和报头压缩支持的PPP协议,优化的单一请求/回复交互过程,支持IP/TCP/UDP协议,可实现的网络功能较为强大,并可裁减.UCIP协议栈被设计为一个带最小化用户接口及可应用串行链路网络模块.根据采用CPU、编译器和系统所需实现协议的多少,协议栈需要的代码容量空间在30-60KB之间.
3、LwIP
LwIP是瑞士计算机科学院(Swedish Institute of Computer Science)的Adam Dunkels等开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈.LwIP的含义是Light Weight(轻型)IP协议,相对于uip.LwIP可以移植到操作系统上,也可以在无操作系统的情况下独立运行.LwIP TCP/IP实现的重点是在保持TCP协议主要功能的基础上减少对RAM的占用,一般它只需要几十K的RAM和40K左右的ROM就可以运行,这使LwIP协议栈适合在低端嵌入式系统中使用.LwIP的特性如下:支持多网络接口下的IP转发,支持ICMP协议 ,包括实验性扩展的的UDP(用户数据报协议),包括阻塞控制,RTT估算和快速恢复和快速转发的TCP(传输控制协议),提供专门的内部回调接口(Raw API)用于提高应用程序性能,并提供了可选择的Berkeley接口API.
4、uIP
uIP是专门为8位和16位控制器设计的一个非常小的TCP/IP栈.完全用C编写,因此可移植到各种不同的结构和操作系统上,一个编译过的栈可以在几KB ROM或几百字节RAM中运行.uIP中还包括一个HTTP服务器作为服务内容.许可:BSD许用证
5、TinyTcp
TinyTcp 栈是TCP/IP的一个非常小和简单的实现,它包括一个FTP客户.TinyTcp是为了烧入ROM设计的并且现在开始对大端结构似乎是有用的(初始目标是68000芯片).TinyTcp也包括一个简单的以太网驱动器用于3COM多总线卡
选择一个开源协议栈可以从四个方面来考虑:
一个是是否提供易用的底层硬件API,即与硬件平台的无关性;
一个是与操作系统的内核API.协议栈需要调用的系统函数接口是否容易构造,
另一个对于应用支持程度.
最关键的是占用的系统资源是否在可接受范围内,有裁减优化的空间否?
其中,BSD 栈可完整实现TCP/IP协议,但代码庞大,70KB-150KB之间,裁减优化有难度,uIP和TinyTcp代码容量小巧,实现功能精简,限制了在一些较高要求场合下的应用,如可靠性与大容量数据传输.
LwIP和uC/IP是同量级别的两个开源协议栈,两者代码容量和实现功能相似,LwIP没有操作系统针对性,它将协议栈与平台相关的代码抽象出来,用户如果要移植到自己的系统,需要完成该部分代码的封装,并为网络应用支持提供了API接口的可选性.uC/IP协议最初是针对uC/OS设计,为方便用户移植实现,同样也抽象了协议栈与平台相关代码,但是协议栈所需调用的系统函数大多参照uC/OS内核函数原型设计,并提供了协议栈的测试函数,方便用户参考,其不足在于该协议栈对网络应用支持不足.
根据以上分析,从应用和开发的角度看,似乎LWIP更得到了网上很多朋友使用的青睐;uC/IP在文档支持与软件升级管理上有很多不足,但是它最初是针对UC/OS而设计,如果选用UC/OS作为软件基础的话,在系统函数构造方面有优势.当然你选择其他操作系统的话,可参照OS_NULL文件夹下的文件修改. 以上的这些开源协议栈也并非免费,拿来就可以用,据我所知,UC/OS的母公司推出UC/OS-TCP/IP花了6人*2年的工作量,国内某公司使用LWIP作为移植的参照,花了4-5人*2年的工作量来测试与优化协议,使用商用TCP/IP栈的高费用就不足为奇了. 作为广大的爱好者学习而言,如果只是跑跑原型,实验一下效果,以上的几种开源协议栈都提供了测试的例子,应该是不错的选择.
个人的看法:LWIP可优先考虑,至少网上有很多的人一块研究,参考的资料较多;UC/IP其次,如果你想深入学习TCP/IP的话,移植UC/IP是一种挑战性的工作,它尚需完善.
(四)
在开源系统中,也是比较常见SIP协议栈的使用。那么这里我们就来讲述一下开元的SIP协议栈都有哪些吧。希望本文的总结和介绍能够让大家对此有一定的了解。好了,现在就来看正文内容吧。
开源的SIP协议栈-Vocal、OSIP
SIP是由IETF提出的一套用户IP电话的通信协议,它用来建立,改变和终止基于IP网络的用户间的呼叫.该协议建立在SMTP(简单邮件传送协议)和 HTTP(超文本传送协议)等协议基础之上.为了提供电话业务它还需要结合其他几种不同的标准和协议:特别是需要确保传输(RTP),与当前电话网络的信 令互连,能够确保语音质量(RSVP),能够提供目录(LDAP),能够鉴权用户(RADIUS)等等.
由于是计算机界提出的一项电话标准,因此它显露出许多计算机业界的许多特点,比如,它尽可能的大量采用现有的协议,而不是重建标准,如HTTP、 LDAP、RADIUS等,都是技术成熟、应用广泛的协议标准.其次,就是它的开发较其他协议栈(如它的竞争协议H.323)难度较低,而且,相关的开源 项目也比较多,如VOCAL、OSIP都是比较成熟的、可商业化的SIP协议栈.
VOCAL(即Vovida开源通信应用程序库)它是由Vovida社区开发的一套SIP协议栈,OSIP则是由老牌开源社区GNU组织开发的一款SIP协议栈软件,下面对这两个协议栈进行一下简单的比较:
开源的H.323协议栈-OpenH323
H.323和SIP一起,并成VOIP领域的两大标准.不同的是SIP是由计算机界(IETF)定义的,而H.323则由电信界(ITU)定义的.从应用 上来说,SIP更适合企业应用,而H.323比较适合电信级应用.从开发的难度来说,H.323远比SIP复杂,如果要从头做起的话,其开发周期将会非常 久.不过,有了OpenH323,一切都不一样了,我们完全可以在短期内做出一套电信级的VOIP系统.
OpenH323是通信领域名气最大的一款开发源代码的通信协议栈软件,该项目是澳大利亚的EquivalencePtyLtd公司组织开发的,它从 1998 年开始,到了2000 年底基本的H.323 协议框架已经实现,主要是免费面向所有想从事VOIP 和网络视频传输的软件开发商使用,这个协议库是完全符合H.323 协议的,能和任何符合该协议的软件进行视频和语音的通讯,例如Microsoft 的NetMeeting等.很多商业的H.323协议栈就是基于OpenH323基础开发的.
OpenH323的优势在于它比较完整的实现了ITU关于H.323的建议,可以实现基于IP的各种电话应用,包括语音、视频、会议以及传真等.通过该协 议栈,我们很容易的就可以定制出自己需要的包括终端、网守、网关或MCU等各种H.323实体.而且,它不需要任何付费,对商业用户和个人开发者来说都具 有很大的诱惑力.
OpenH.323支持但前流行的各种平台,包括Linux、Windows和MacOS和Unix,编程语言采用了面向对象的C++语言.关于它的具体技术细节,请参考卢政的《如何成功的运用OPENH323来开发商业的H.323协议栈》.
总结
通信软件开源的目的之一就是降低通信技术的门槛,普及通信知识,让通信行业的一些核心技术能被更多的人掌握、运用,同时,也可以减少一些通信项目重复开发 的投入,因此,意义非常重大.但是,目前通信行业的开源项目数量有限,能真正被人利用的更是屈指可数.因此,需要有更多的通信专用人士投身这一领域,使开 源思想在通信领域也能落地生根.
(六)doubango开源框架中封装的一些协议栈讲解
????????后续更新………………