第七章-网络协议要点_第1页
第七章-网络协议要点_第2页
第七章-网络协议要点_第3页
第七章-网络协议要点_第4页
第七章-网络协议要点_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

第七章网络协议第七章网络协议介绍两种基本的多跳协议:分发(Dissemination)和收集(Collection)。分发协议可以可靠地传送小数据项到网络中的每一个节点。收集协议则可以把网络中每个节点的小数据项传递到指定的根节点。1.分发协议分发协议主要用于实现共享变量的网络一致性。网络中的每一个节点都保存有该共享变量的一个副本。在任意给定时刻,可能会有2个节点的变量值不相同。但随着时间的流逝,不一致的节点数会越来越少,最终整个网络都将统一于一个相同的变量值。网络的一致性并不意味着每个节点都能够发现变量值的所有变动,它仅仅表示网络最终会在最新的变量值上达成一致。能够将小数据分发到整个网络中,这个功能特性对于传感器网络的应用而言是非常有用的。它允许管理员向网络注入小段程序、命令以及配置信息。分发协议的接口两个接口:DisseminationValue和DisseminationUpdate接口。前者适用于分发数据的消费者(接收从网络中分发过来的数据),后者适用于生产者(产生需分发的数据)。interfaceDisseminationValue<t>{

commandconstt*get();

eventvoidchanged();

}当分发的变量值发生改变时,就会触发changed()事件,再进行相应处理。消费者能够通过DisseminationValue.get()获取const类型的指针指向数据区域。interfaceDisseminationUpdate<t>{

commandvoidchange(t*newVal);

}调用change()命令会隐式地使其函数参数成为最新的分发值,并将其分发给网络中的每一个节点。分发协议的组件DisseminationValue接口和DisseminationUpdate接口由DisseminatorC组件提供。genericconfigurationDisseminatorC(typedeft,uint16_tkey){//通用组件,需实例化providesinterfaceDisseminationValue<t>;providesinterfaceDisseminationUpdate<t>;}参数t即数据包结构类型,其大小必须能够包含于单个message_t包。键值(key)允许创建不同的DisseminatorC实例组件,类似于AM标识号可以虚拟化AM服务。该值一般由unique()函数产生。EasyDissemination实例一个源节点周期性地将其计数值分发给网络中的其它节点。收到该计数值的节点将其显示到LED灯上。

eventvoidTimer.fired(){

counter=counter+1;postShowCounter();

//disseminatecountervalue

callUpdate.change(&counter);//设定分发值

}

eventvoidValue.changed(){//发现分发值变动

constuint16_t*newVal=callValue.get();

//shownewcounterinLeds

counter=*newVal;

postShowCounter();

}

注意,所有节点在启动时必须先开启无线电服务。创建EasyDisseminate文件创建EasyDisseminateC.nc文件编写顶层配置文件编写makefile文件仿真测试分发协议的补充说明在TinyOS2.x里,对于小数据项的分发协议有两种分发库:Drip和DIP。Drip把每个数据项当做分发的单独实体,并提供了很好的粒子性控制,控制何时如何快速地把想要的数据项分发出去。DIP则把它们当做一个群体,即分发控制和参数可以适用于所有的数据项集体。Drip应该在你只有少数数据项且不确定每个节点的数据类型时使用。这个灵活性要求你的网络中发出更多的通知消息。DIP则在所有的节点有统一的数据类型,且需要高效率的消息机制时使用。configurationEasyDisseminationAppC{}implementation{componentsMainC;

EasyDisseminationC.Boot->MainC;componentsLedsC;

EasyDisseminationC.Leds->LedsC;componentsnewTimerMilliC();

EasyDisseminationC.Timer->TimerMilliC; //part1componentsEasyDisseminationC;componentsDisseminationC;

EasyDisseminationC.DisseminationControl->DisseminationC; //part2componentsnewDisseminatorC(uint16_t,0x1234)asDiss16C;EasyDisseminationC.Value1->Diss16C;EasyDisseminationC.Update1->Diss16C; //part3componentsActiveMessageC;

EasyDisseminationC.RadioControl->ActiveMessageC; //part4}configurationEasyDisseminationAppC{}implementation{componentsMainC;

EasyDisseminationC.Boot->MainC;componentsLedsC;

EasyDisseminationC.Leds->LedsC;componentsnewTimerMilliC();

EasyDisseminationC.Timer->TimerMilliC; //part1componentsEasyDisseminationC;componentsDisseminationC;

EasyDisseminationC.DisseminationControl->DisseminationC; //part2componentsnewDisseminatorC(uint16_t,0x1234)asDiss16C;EasyDisseminationC.Value1->Diss16C;EasyDisseminationC.Update1->Diss16C; //part3}DIP在节点启动时就开启了无线电

Drip协议与Dip协议的比较Drip&DipMakefile在应用程序的Makefile里设置相应的分发库:COMPONENT=EasyDisseminationAppCCFLAGS+=-I$(TOSDIR)/lib/netCFLAGS+=-I$(TOSDIR)/lib/net/dripinclude$(MAKERULES)COMPONENT=EasyDisseminationAppCCFLAGS+=-I$(TOSDIR)/lib/netCFLAGS+=-I$(TOSDIR)/lib/net/dipCFLAGS+=-I$(TOSDIR)/lib/net/dip/interfacesinclude$(MAKERULES)2.收集协议收集协议是对分发协议的补充,它要求网络中各节点将采集的数据发送到基站节点。实现方式:建立一棵或多棵以基站节点作为根节点的收集树,当一个节点有数据(自己的采集数据或来自其他节点的转发数据)需要发送到基站节点时,就会沿着收集树将数据发送给它的父节点,直到数据到达基站节点。根据汇聚内容的形式,各中转节点可以检查过往的消息包,以便信息统计或聚合,或抑制重复的传输。注意:该协议只是尽力(best-effort)把消息发送到网络中至少一个根节点。然而,它并不能保证传输必定成功。另外,消息的副本有可能传输到多个根节点。数据包到达根节点的顺序也无法保证。汇聚树协议(CollectionTreeProtocol,CTP)是TinyOS2.x自带的收集协议的一种,为网络中的节点提供到根节点的尽全力的、任意传播的传输机制。CTP协议的接口汇聚服务中,一个节点可以扮演4种角色生产者,消费者、侦听者、网络处理者setRoot()命令设立收集树的根节点。如果一个节点已经是根节点,并调用setRoot命令,则返回SUCCESS。那么接下来的isRoot命令返回TRUE。interfaceRootControl{commanderror_tsetRoot();commanderror_tunsetRoot();commandboolisRoot();}CTP协议的组件--1CTP协议由CollectionC组件提供,其提供了无线通信的大多数基本接口。configurationCollectionC{provides{interfaceStdControl;interfaceSend[uint8_tclient];

interfaceReceive[collection_id_tid];//接收到数据interfaceReceiveasSnoop[collection_id_t];//偷听到数据

interfaceIntercept[collection_id_tid];

interfaceRootControl;//设置根节点interfacePacket;//访问汇聚数据包的各个字段interfaceCollectionPacket;

}uses{interfaceCollectionId[uint8_tclient];

}}CTP协议的组件--2注意:不可以绑定其它组件到CollectionC.Send接口,通用组件CollectionSenderC提供了虚拟化的发送接口。genericconfigurationCollectionSenderC(collection_id_tcollectid){provides{interfaceSend;interfacePacket;}}事实上,CollectionSenderC组件是对CollectionC组件的一种封装,提供了一种多元化访问的机制。类似于AMSenderC组件,只不过用collection_id_t参数代替了am_id_t参数。Receive接口、Snoop接口和Intercept接口必须也都使用相同的collection_id_t参数,才能接收到数据。CTP协议的假设和限制CTP是基于树的汇聚协议。网络中的一些节点将自己设为根节点。节点之间形成到根节点的树的集合。CTP是没有地址的,节点并不是向固定的根节点发送数据包,而是通过选择下一跳隐式地选择根节点。节点根据路由梯度形成到根的路由。CTP协议假设链路层提供了以下功能:1.提供有效的本地广播地址2.为单播包提供同步的确认信息3.提供协议分派字段以支持多种高层协议4.具有单跳的源和目的地址字段CTP协议的假设和限制CTP假设它有一部分附近邻居节点的链路质量估计信息。该信息提供了本节点与某一邻居节点之间的通信过程中成功地传输了单播包的次数。CTP有一些提高传输可靠性的机制,但它并不保证100%可靠。它是尽力的,但有时即使尽力了也未必能办到。CTP是为通信量相对较低的网络设计的。带宽有限的系统可能使用别的协议更合适,比如能将多个小的帧组装成单个数据链路层包的协议汇聚算法问题CTP使用期望传输值(ETX,ExpectedTransmissions)作为路由梯度。根节点的ETX为0,其它节点的ETX为其父节点的ETX值加上到父节点链路的ETX值。这种相加的方法需要假设节点使用链路层重传。如果要给出一种有效的路由,CTP选择ETX值最小的一种。ETX值用精度为0.01的16位定点实数表示。汇聚算法问题路由循环是可能在CTP网络中出现的问题之一。CTP通过两种方法处理路由循环。第一种是每个CTP包含有当前节点的ETX值,如果CTP接收到比自己的ETX值小的数据帧,则说明树中有不一致。CTP通过广播一个信息帧以期解决这种不一致性,希望发送这个数据帧的节点收到并相应地调整它的路由。CTP的第二种机制是不考虑ETX值大于一个固定常量的路由,这个值取决于实现。包重复是CTP中可能发生的另外一个问题。增加存活时间THL,重复的包具有相同的THLCTP协议帧格式CTP数据帧格式如下:CTP路由帧格式如下:CTP实现CTP的一种实现可以在tos/lib/net/ctp目录中找到。三个主要组件链路质量估计器,负责估计单跳的ETX值路由引擎,它根据链路估计和网络层的信息(如拥塞情况)来决定哪个邻居节点作为路由的下一跳转发引擎,它维护发送包队列,决定是否发送和发送的时机。它的名字有点令人混淆:转发引擎不仅要转发从其它节点过来的数据包,同时也要发送自己产生的数据包。链路估计该实现使用两种机制来估计链路质量:周期性的LEEP包和数据包。该实现通过数据传输改变对LEEP的链路估计。估计器通过信息帧的ETX值和数据估计产生的ETX值合并,产生指数权重的移动平均线。CTP收集数据估计的速率与传输速率是成比例的,因此它可以快速地检测到断开的连接并切换到新的侯选邻居节点。组件tos/lib/net/le/LinkEstimatorP实现了链路估计器。它结合了基于LEEP和数据的估计。路由引擎该实现的路由引擎负责选择数据传输的下一跳。它记录了链路估计表中所维护节点的路径ETX值。最小耗费的路由,即路径ETX值和链路ETX值之和最小的那条。路径ETX值就是整条路由的链路ETX值。组件tos/lib/net/ctp/CtpRoutingEngineP实现了该路由引擎。转发

温馨提示

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

评论

0/150

提交评论