第七章-网络协议要点课件

上传人:cl****1 文档编号:567946240 上传时间:2024-07-22 格式:PPT 页数:28 大小:414.50KB
返回 下载 相关 举报
第七章-网络协议要点课件_第1页
第1页 / 共28页
第七章-网络协议要点课件_第2页
第2页 / 共28页
第七章-网络协议要点课件_第3页
第3页 / 共28页
第七章-网络协议要点课件_第4页
第4页 / 共28页
第七章-网络协议要点课件_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《第七章-网络协议要点课件》由会员分享,可在线阅读,更多相关《第七章-网络协议要点课件(28页珍藏版)》请在金锄头文库上搜索。

1、第七章第七章 网络协议网络协议第七章第七章 网络协议网络协议l介绍两种基本的多跳协议:分发(Dissemination)和收集(Collection)。l分发协议可以可靠地传送小数据项到网络中的每一个节点。l收集协议则可以把网络中每个节点的小数据项传递到指定的根节点。1、分发协议、分发协议l分发协议主要用于实现共享变量的网络一致性。网络中的每一个节点都保存有该共享变量的一个副本。l在任意给定时刻,可能会有2个节点的变量值不相同。但随着时间的流逝,不一致的节点数会越来越少,最终整个网络都将统一于一个相同的变量值。l网络的一致性并不意味着每个节点都能够发现变量值的所有变动,它仅仅表示网络最终会在最

2、新的变量值上达成一致。l能够将小数据分发到整个网络中,这个功能特性对于传感器网络的应用而言是非常有用的。它允许管理员向网络注入小段程序、命令以及配置信息。 分发协议的接口分发协议的接口l两个接口:DisseminationValue和DisseminationUpdate接口。前者适用于分发数据的消费者(接收从网络中分发过来的数据),后者适用于生产者(产生需分发的数据)。 interface DisseminationValue command const t* get(); event void changed();l当分发的变量值发生改变时,就会触发changed()事件,再进行相应处理。

3、消费者能够通过DisseminationValue.get()获取const类型的指针指向数据区域。 interface DisseminationUpdate command void change(t* newVal);l调用change()命令会隐式地使其函数参数成为最新的分发值,并将其分发给网络中的每一个节点。分发协议的组件分发协议的组件lDisseminationValue接口和DisseminationUpdate接口由DisseminatorC组件提供。generic configuration DisseminatorC(typedef t, uint16_t key) /通用

4、组件,需实例化 provides interface DisseminationValue ; provides interface DisseminationUpdate ; l参数t即数据包结构类型,其大小必须能够包含于单个message_t包。 l键值(key)允许创建不同的DisseminatorC实例组件,类似于AM标识号可以虚拟化AM服务。该值一般由unique()函数产生。EasyDissemination实例实例l一个源节点周期性地将其计数值分发给网络中的其它节点。收到该计数值的节点将其显示到LED灯上。 event void Timer.fired() counter = c

5、ounter + 1; post ShowCounter(); / disseminate counter value call Update.change(&counter); /设定分发值 event void Value.changed() /发现分发值变动 const uint16_t* newVal = call Value.get(); / show new counter in Leds counter = *newVal; post ShowCounter(); l注意,所有节点在启动时必须先开启无线电服务。l创建EasyDisseminate文件l创建EasyDissemin

6、ateC.nc文件l编写顶层配置文件l编写makefile文件l仿真测试分发协议的补充说明分发协议的补充说明l在TinyOS 2.x里,对于小数据项的分发协议有两种分发库:Drip和DIP。 lDrip把每个数据项当做分发的单独实体,并提供了很好的粒子性控制,控制何时如何快速地把想要的数据项分发出去。lDIP则把它们当做一个群体,即分发控制和参数可以适用于所有的数据项集体。lDrip应该在你只有少数数据项且不确定每个节点的数据类型时使用。这个灵活性要求你的网络中发出更多的通知消息。lDIP则在所有的节点有统一的数据类型,且需要高效率的消息机制时使用。configuration EasyDiss

7、eminationAppC implementation components MainC; EasyDisseminationC.Boot - MainC; components LedsC; EasyDisseminationC.Leds - LedsC; components new TimerMilliC(); EasyDisseminationC.Timer - TimerMilliC;/part 1 components EasyDisseminationC; components DisseminationC; EasyDisseminationC.DisseminationCo

8、ntrol - DisseminationC;/part 2 components new DisseminatorC(uint16_t, 0x1234) as Diss16C; EasyDisseminationC.Value1 - Diss16C; EasyDisseminationC.Update1 - Diss16C;/part 3 components ActiveMessageC; EasyDisseminationC.RadioControl - ActiveMessageC;/part 4configuration EasyDisseminationAppC implement

9、ation components MainC; EasyDisseminationC.Boot - MainC; components LedsC; EasyDisseminationC.Leds - LedsC; components new TimerMilliC(); EasyDisseminationC.Timer - TimerMilliC;/part 1 components EasyDisseminationC; components DisseminationC; EasyDisseminationC.DisseminationControl - DisseminationC;

10、/part 2 components new DisseminatorC(uint16_t, 0x1234) as Diss16C; EasyDisseminationC.Value1 - Diss16C; EasyDisseminationC.Update1 - Diss16C;/part 3DIP在节点启动时就开启了无线电在节点启动时就开启了无线电 Drip协议与Dip协议的比较Drip & Dip Makefilel在应用程序的Makefile里设置相应的分发库:COMPONENT=EasyDisseminationAppCCFLAGS += -I$(TOSDIR)/lib/netCFL

11、AGS += -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、收集协议、收集协议 l收集协议是对分发协议的补充,它要求网络中各节点将采集的数据发送到基站节点。l实现方式:建立一棵或多棵以基站节点作为根节点的收集树,当一个节点有数据(自己的采集

12、数据或来自其他节点的转发数据)需要发送到基站节点时,就会沿着收集树将数据发送给它的父节点,直到数据到达基站节点。l根据汇聚内容的形式,各中转节点可以检查过往的消息包,以便信息统计或聚合,或抑制重复的传输。 l注意:该协议只是尽力(best-effort)把消息发送到网络中至少一个根节点。然而,它并不能保证传输必定成功。另外,消息的副本有可能传输到多个根节点。数据包到达根节点的顺序也无法保证。l汇聚树协议(Collection Tree Protocol,CTP)是TinyOS 2.x自带的收集协议的一种,为网络中的节点提供到根节点的尽全力的、任意传播的传输机制。CTP协议的接口协议的接口l汇聚

13、服务中,一个节点可以扮演4种角色l生产者,消费者、侦听者、网络处理者lsetRoot()命令设立收集树的根节点。如果一个节点已经是根节点,并调用setRoot命令,则返回SUCCESS。那么接下来的isRoot命令返回TRUE。 interface RootControl command error_t setRoot(); command error_t unsetRoot(); command bool isRoot();CTP协议的组件协议的组件 - 1lCTP协议由CollectionC组件提供,其提供了无线通信的大多数基本接口。configuration CollectionC pr

14、ovides interface StdControl; interface Senduint8_t client; interface Receivecollection_id_t id; /接收到数据 interface Receive as Snoopcollection_id_t; /偷听到数据 interface Interceptcollection_id_t id; interface RootControl; /设置根节点 interface Packet; /访问汇聚数据包的各个字段 interface CollectionPacket; uses interface Col

15、lectionIduint8_t client; CTP协议的组件协议的组件 - 2l注意:不可以绑定其它组件到CollectionC.Send接口,通用组件CollectionSenderC提供了虚拟化的发送接口。generic configuration CollectionSenderC(collection_id_t collectid) provides interface Send; interface Packet; l事实上,CollectionSenderC组件是对CollectionC组件的一种封装,提供了一种多元化访问的机制。类似于AMSenderC组件,只不过用coll

16、ection_id_t参数代替了am_id_t参数。lReceive接口、Snoop接口和Intercept接口必须也都使用相同的collection_id_t参数,才能接收到数据。CTP协议的假设和限制协议的假设和限制lCTP是基于树的汇聚协议。网络中的一些节点将自己设为根节点。节点之间形成到根节点的树的集合。lCTP是没有地址的,节点并不是向固定的根节点发送数据包,而是通过选择下一跳隐式地选择根节点。节点根据路由梯度形成到根的路由。lCTP协议假设链路层提供了以下功能:l1.提供有效的本地广播地址l2.为单播包提供同步的确认信息 l3.提供协议分派字段以支持多种高层协议l4.具有单跳的源和

17、目的地址字段 CTP协议的假设和限制协议的假设和限制lCTP假设它有一部分附近邻居节点的链路质量估计信息。该信息提供了本节点与某一邻居节点之间的通信过程中成功地传输了单播包的次数。 lCTP有一些提高传输可靠性的机制,但它并不保证100%可靠。它是尽力的,但有时即使尽力了也未必能办到。 lCTP是为通信量相对较低的网络设计的。带宽有限的系统可能使用别的协议更合适,比如能将多个小的帧组装成单个数据链路层包的协议汇聚算法问题汇聚算法问题lCTP使用期望传输值(ETX,Expected Transmissions)作为路由梯度。l根节点 的ETX为0,其它节点的ETX为其父节点的ETX值加上到父节点

18、链路的ETX值。l这种相加的方法需要假设节点使用链路层重传。l如果要给出一种有效的路由,CTP选择ETX值最小的一种。lETX值用精度为0.01的16位定点实数表示。汇聚算法问题汇聚算法问题l路由循环是可能在CTP网络中出现的问题之一。CTP通过两种方法处理路由循环。l第一种是每个CTP包含有当前节点的ETX值,如果CTP接收到比自己的ETX值小的数据帧,则说明树中有不一致。CTP通过广播一个信息帧以期解决这种不一致性,希望发送这个数据帧的节点收到并相应地调整它的路由。lCTP的第二种机制是不考虑ETX值大于一个固定常量的路由,这个值取决于实现。l包重复是CTP中可能发生的另外一个问题。l增加

19、存活时间THL,重复的包具有相同的THLCTP协议帧格式协议帧格式lCTP数据帧格式如下:lCTP路由帧格式如下:CTP实现实现lCTP的一种实现可以在tos/lib/net/ctp目录中找到。l三个主要组件l链路质量估计器,负责估计单跳的ETX值l路由引擎,它根据链路估计和网络层的信息(如拥塞情况)来决定哪个邻居节点作为路由的下一跳l转发引擎,它维护发送包队列,决定是否发送和发送的时机。它的名字有点令人混淆:转发引擎不仅要转发从其它节点过来的数据包,同时也要发送自己产生的数据包。链路估计链路估计 l该实现使用两种机制来估计链路质量:周期性的LEEP包和数据包。l该实现通过数据传输改变对LEE

20、P的链路估计。l估计器通过信息帧的ETX值和数据估计产生的ETX值合并,产生指数权重的移动平均线。lCTP收集数据估计的速率与传输速率是成比例的,因此它可以快速地检测到断开的连接并切换到新的侯选邻居节点。l组件tos/lib/net/le/LinkEstimatorP实现了链路估计器。它结合了基于LEEP和数据的估计。路由引擎路由引擎 l该实现的路由引擎负责选择数据传输的下一跳。l它记录了链路估计表中所维护节点的路径ETX值。l最小耗费的路由,即路径ETX值和链路ETX值之和最小的那条。l路径ETX值就是整条路由的链路ETX值。l组件tos/lib/net/ctp/CtpRoutingEngi

21、neP实现了该路由引擎。转发引擎转发引擎 l组件tos/lib/net/ctp/CtpForwardingEngineP实现了转发引擎。l它具有以下5种职责:l1.向下一跳传递包,当需要时重传,并根据是否收到ACK向链路估计器传递相应信息。l2.决定何时向下一跳传递包l3.检测路由中的不一致性,并通知路由引擎l4.维护需要传输的包队列,它混杂了本地产生的包和需要转发的包。l5.检测由于丢失ACK引起的单跳重复传输转发引擎转发引擎 l转发的四个关键函数为l包接收(SubReceive.receive(),l包转发(forward(),l包传输(SendTask(),l决定传完之后做什么(SubS

22、end.sendDone()。EasyCollection实例实例 l网络中的节点周期性地发送信息到基站,基站节点负责收集网络中所有的数据。if (TOS_NODE_ID = 1) /设置节点1为根节点 call RootControl.setRoot();if (call Send.send(&packet, sizeof(EasyCollectionMsg) != SUCCESS) /非根节点周期性发送数据event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len) /根节点会触发receive事件l创建EasyCollection文件l创建EasyCollectionC.nc文件l编写EasyCollectionAppC.nc文件l编写makefile文件

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号