TEP119CTP.doc

上传人:scccc 文档编号:12532148 上传时间:2021-12-04 格式:DOC 页数:7 大小:119.50KB
返回 下载 相关 举报
TEP119CTP.doc_第1页
第1页 / 共7页
TEP119CTP.doc_第2页
第2页 / 共7页
TEP119CTP.doc_第3页
第3页 / 共7页
TEP119CTP.doc_第4页
第4页 / 共7页
TEP119CTP.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《TEP119CTP.doc》由会员分享,可在线阅读,更多相关《TEP119CTP.doc(7页珍藏版)》请在三一文库上搜索。

1、TEP119出自TinyOS中文学习交流论坛 wiki站TEP 119 Collection 汇聚协议译:qy80872009年5月23日目录n 1摘要n 2简介n 3 Collection接口n 4汇聚服务n 4.1 CollectionSenderCn 5实现n 5.1 LinkEstimatorPn 5.2 CtpRoutingEnginePn 5.3 CtpForwardingEngineP摘要本文档讲述了 TinyOS 2.x汇聚协议中使用的接口,组件和语义。汇聚协议提供了一种尽力、 多跳将数据包发送到树根结点的方法。网络中可能有多个根节点,所以只要至少有一个根节 点接收到数据就是一

2、次成功的传输,这就是所谓的任意播,结点并不向特定的根发数据。简介汇聚数据到基站是传感器网络应用程序的常见需求。常用的方法是建立至少一棵汇聚树,树 根节点作为基站。当节点产生的数据要汇聚到根结点时,它沿着收集树往上发,当节点收到 数据时,则将它转发给其它节点。有时汇聚协议需要根据汇聚数据的形式,检查过往的数据 包,以便获取统计信息,计算聚合度和抑制重复的传输。当网络中具有不止一个根节点时,就形成了一片森林。汇聚协议通过选择父节点隐式地使节 点加入了其中一棵汇聚树中。汇聚协议提供了到根节点的尽力、多跳传输,它是一个任意播 协议,意味着这个协议会将消息尽力传输到任意节点中的至少一个。但是这个传输并不

3、保证 必定是成功的,另外还有传到多个根节点的问题,而且数据包到达的顺序也没有保证。由于结点的存储空间有限并且建树的算法要求是分布式的,因此简单的协议实现将遇到许多 挑战。这些挑战并不仅仅是针对汇聚协议的,实际上这是网络边缘算法协议簇问题的子集。?路由循环检测:检测节点是否选择了子孙节点作为父节点。?重复抑制:检测并处理网络中重复的包,避免浪费带宽。?链路估计:估计单跳的链路质量。?自干扰:防止转发的包干扰自己产生的包的发送。ht t p: /www. t i nyosst udy. i nf o/ i ndex. php?t i 11 e=TEP1192010- 7- 31Collection

4、接口一个节点在汇聚中可以扮演4种角色:生产者,消费者,侦听者和转发者。根据节点角色的不 同,在Collectio n组件中使用不同的接口。消费者即树的根节点。根节点以及到根节点的路径组成了汇聚网络路由的基础。在实现了汇 聚协议并互相连接的节点集中,只有一个汇聚基础。在该集合中同时激活的根节点是相同基 础的一部分。节点可以通过RootControl接口成为根节点。RootControl.setRoot()必定使当前节点成为汇聚基础的根节点。RootCo ntrol.u nsetRoot()必定使当前节点不再是一个根节点。两个调用必须是同 样地强力。RootCo ntrol.setRoot()可以

5、在当前节点己经是根节点的时候调用,同样RootCo ntrol.u nsetRoot(也可以在当前节点不是根节点的时候调用。interface RootControl :command error_t setRoot();i command error_t unsetRoot();:command bool isRoot();通过汇聚标识,汇聚基础可以在独立的程序间复用。数据流是可以复用的,但控制流不能复用。 产生要发送到根节点数据的节点是生产者,它使用Sene接口发送数据到根。汇聚标识就是在实例化Sene时指定的参数。从网络中接收数据的根节点是消费者。消费者通过 识即实例化Receive时指

6、定的参数。Receive接 口接收汇聚上来的信息。汇聚标无意中收到传输中的消息的节点称侦听者。它使用 识即实例化Receive时指定的参数。Receive接 口接收侦听到的消息。其汇聚标能处理转发正在传输中的包的节点称网络处理者。它使用 汇聚标识是实例化Intercept时指定的参数。In tercept接 口接收并更新数据包。其汇聚服务汇聚服务必须提供组件CollectionC,它的形式如下:configuration CollectionC -provides i interface StdControl;i interface Senduint8_t client;i interface

7、 Receivecollection_id_t id;i interface Receive as Snoopcollection_id_t;:interface lnterceptcollection_id_t id;:interface RootControl;:interface Packet;!i interface CollectionPacket;i;uses i interface Collectionlduint8_t client;i一Collectio nC可能有更多的接口,但它们必须实现外部调用(命令,事件)的默认函数,从而ht t p: /www. t i nyosst

8、 udy. i nf o/ i ndex. php?t i 11 e=TEP1192010- 7- 31使接口在没有被连接的情况下也能正常工作。组件不可以连接到CollectionC.Send,通用组件CollectionSenderC提供了虚拟化的发送接口Receive, Snoop, Intercept 都使用 collection id t 作为参数。每个 collection id t 对应一个在汇聚 协议之上的协议来操作,这与活跃消息中使用不同的am id t值来对应不同的上层协议是类似的。用特定的collection id t发送的包有相同的格式,从而侦听者,处理者,接收者都可以恰

9、 当地处理它。在非根节点上不能触发Receive.receive信号。CollectionC只在根节点成功地收到包时触发该 信号。如果根节点调用Send,则必须把它作为一个已接收到的包来处理。注意Receive.receive的缓冲区交换问题,当出现上述情况时,要求CollectionC在发出Receive. receive信号时复制一份缓冲区如果Collectio nC接收到一份需要转发的包并且当前节点并不是根节点,则它发出一个In tercept.forward 信号。Collecti onC不能将一个节点默认配置为根节如果Collectio nC接收到的数据包应当是由其它节点转发的,则发

10、出Sno op.receive信号Packet和Collectio nPacket接口用于让组件访问汇聚数据包的各个字段RootCo ntrol可以使节点成为汇聚树的根节点 占 八、CollectionSenderCCollection有一个虚拟化的抽象,通用组件Collectio nSe nderC:generic configuration CollectionSenderC(collection_id_t collectid) ;provides i interface Send;;interface Packet;这种抽象类似于AMSenderC的虚拟化方法,只不过用collectio

11、n id t代替了 am id t。与am id t 类似,每个collection id t需要有一种包格式,从而接收者可以根据 collection ID分析它的内 容。实现本TEP的实现在 tinyos-2.x/tos/lib/net/ctp与tinyos-2.x/tos/lib/net/le 中,属于 CTP 协议。完整地讲 述CTP将超出本TEP的范围,这里只列出主要的组件。CTP协议将在后面的TEP中描述。这只 是一种参考实现,并不是唯一的。它包含 3个主要的组件,相互连接起来构成 CollectionC : LinkEstimatorP, CtpRoutingEngineP 和C

12、tpForwardingEngineP。这种分解试图支持构件演 化,并通过模块化的方法使其更易使用。邻居管理和链路估计与路由协议分开;转发策略如 转发队列和定时同步与路由选择和路由协议分开。LinkEstimatorPLin kEstimatorP为每个邻居节点估计从本节点到邻居节点的双向链路质量。链路估计可以用多 种方法实现,在这儿我们不指定是哪种。它与路由的建立分离开。Lin kEstimator是链路估计y1»-器和路由引擎的窄接口,唯一的要求是它的返回值应该是标准化的。对Li nkEstimator.getQuality()、LinkEstimator.getForwardQ

13、uality()、LinkEstimator.getReverse- Quality。的返回 值有以下要求:越小的值表示链路质量越好。这个值应当在0,255之间,在该范围内值的变化应当是线性的。链路质量估计的实现方法可以是使用无线模块提供的LQI或RSI值,或者是通过信息帧计算ETX值,或者是两者的结合。LinkEstimator可以有自己的控制信息来计算双向链路质量。它提供调用txAck(), txNoAck(), clearDLQ(),根据到邻居节点的数据传 输成功与否来更新链路估计。LinkEstimatorP的使用者可以调用insertNeighbor()来手工地在邻居节点表中插入一项

14、,pi nN eighbor()可以阻止邻居被剔除,un pi nNeighbor()可以恢复剔除 策略。typedef uint16_t neighbor_table_entry_t-inkEstimatorP ;provides :interface StdControl; interface AMSend as Send;:interface Receive; interface LinkEstimator; interface Init; interface Packet; interface LinkSrcPacket;iinterface LinkEstimator command

15、 uint8_t getLinkQuality(uint16_t neighbor); command uint8_t getReverseQuality(uint16_t neighbor); command uint8_t getForwardQuality(uint16_t neighbor); command error_t insertNeighbor(am_addr_t neighbor);:command error_t pinNeighbor(am_addr_t neighbor);:command error_t unpinNeighbor(am_addr_t neighbo

16、r);:command error_t txAck(am_addr_t neighbor); command error_t txNoAck(am_addr_t neighbor);:command error_t clearDLQ(am_addr_t neighbor); event void evicted(am_addr_t neighbor);CtpRoutingEnginePCtpRoutingE ngi neP负责计算到根的路由。在传统的网络术语中,这属于网络控制层面的部 分,它并不直接转发数据包,那是 CtpForwardi ngE ngi neP的职责。两者间的接口是Uni c

17、astNameFreeRouti ngCtpRoutingEngineP通过使用LinkEstimator接口来取得LinkEstimatorP维护的邻居节点表信息 和与邻居节点的双向链路质量。汇聚协议中实现的路由协议必须是基于树的并且至少有一个 树根。CtpRoutingEngineP允许节点被动态地配置为根或非根节点。CtpRouti ngEn gi neP维护了多个侯选的下一跳。generic module CtpRoutingEngineP(uint8_t routingTableSize,uint16_t minInterval,uint16_t maxinterval) - - -

18、:provides interface UnicastNameFreeRouting as Routing;:interface RootControl; interface Ctpinfo;:interface StdControl;:interface CtpRoutingPacket;:interface Init;: :uses :interface AMSend as BeaconSend;:interface Receive as BeaconReceive;:interface LinkEstimator;:interface AMPacket;:interface SplitC

19、ontrol as RadioControl;:interface Timer<TMilli> as BeaconTimer;:interface Timer<TMilli> as RouteTimer;:interface Random;:interface CollectionDebug;j interface CtpCongestion;i interface Comparebit;interface UnicastNameFreeRouting command am_addr_t nextHop(); command bool hasRoute();event

20、void routeFound();:event void noRoute();CtpForwardingEnginePCtpForwardingEngineP提供了所有的顶层接口(除了 RootControl)供CollectionC和应用程序使 用。它处理重传,重复抑制,包同步,路由循环检测,并将传输是否成功的结果反馈给Li nkEstimator 使用。generic module CtpForwardingEngineP。 provides j interface Init;j interface StdControl;j interface Senduint8_t client;i

21、interface Receivecollection_id_t id;:interface Receive as Snoopcollection_id_t id;i interface Interceptcollection_id_t id;:interface Packet;i interface CollectionPacket;:interface CtpPacket;i interface CtpCongestion;uses i interface SplitControl as RadioControl;i interface AMSend as SubSend;i interf

22、ace Receive as SubReceive;i interface Receive as SubSnoop;i interface Packet as SubPacket;i interface UnicastNameFreeRouting;i interface Queue<fe_queue_entry_t*> as SendQueue;i interface Pool<fe_queue_entry_t> as QEntryPool;i interface Pool<message_t> as MessagePool;i interface Tim

23、er<TMilli> as RetxmitTimer;i interface LinkEstimator;i interface Timer<TMilli> as CongestionTimer;i interface Cache<message_t*> as SentCache;i interface CtpInfo;i interface PacketAcknowledgements;i interface Random;i interface RootControl;i interface CollectionIduint8_t client;i in

24、terface AMPacket;i interface CollectionDebug;CtpForwardi ngE ngi neP使用了大量的接口,可以根据功能分为几组:?单跳通信:SubSend,SubReceive, SubSnoop,SubPacket,PacketAcknowledgement. AMPacket?路由:UnicastNameFreeRouting,RootControl,Ctplnfo,CollectionId,SentCache?队列和缓冲区管理:SendQueue, MessagePool, QEntryPool?包定时同步:Random, RetxmitTimer取自"http:/www.tinyosstudy.info/index.php?title=TEP119"n这页的最后修订在 2009年 12月25日(星期五)01:30ht t p: /www. t i nyosst udy. i nf o/ i ndex. php?t i 11 e=TEP1192010- 7- 31

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1