CTP源码分析1 CTP结构及概述

CTP做了什么

试想一个情景,在一定的物理空间中有很多的传感器,这些传感器会和你的一个手持设备进行通信,返回一些数据供你使用,那么这个通信应该如果做呢。最简单的一种想法就是这些节点和直接和手持设备进行通信,这就要求所有的传感器(通信节点)都在手持设备的通信范围之内,这就大大缩小了传感器可以放置的物理空间。而CTP通过在传感器以及手持设备之间组网,通过传感器与手持设备之间的多跳通信大大扩展了传感器放置的物理空间。换言之传感器既充当了信息的的采集和发送者,又充当了其他传感器信息的转发者,而传感器(普通节点)和手持节点之间就形成了一个汇聚树,手持设备(将信息进行集中汇总的节点)就是这个汇聚树的根。


我们将这个场景抽象出来,就是这样:

左边是最简单的思路,右边是CTP的方式




CTP如何实现

CTP(汇聚树协议)实现了灵活动态的树状拓扑结构,并满足拓扑中其他节点与根节点的单向通信。为了实现灵活动态的拓扑结构变化,CTP蕴含了两个稳定有效的汇聚树原则,这些原则可以让汇聚树得以获得稳定有效的连接质量估计,并且通过连接质量的估计值获得通往根节点的路径。当每个节点都获得通往根节点的路径之后,汇聚树也就形成了。


第一个原则是保证数据通道的有效性原则。CTP协议在数据传输的时候可以动态地进行拓扑结构的探测,快速发现并且修复路由环路。第二个就是自适应信标(beacon)原则,根据CTP协议,每个节点都会定时地发送广播帧,来进行链路质量的估计和拓扑结构的建立。而广播帧发送的时间间隔并不是固定的,CTP扩展了涓流算法(Trickle code),在广播帧的发送的时间间隔方面做了文章,在兼顾了路径修理延迟的基础上可以发送更少的广播帧。


TinyOS实现了CTP协议,旨在达成汇聚树协议的4大目标:

1、可靠性:99.9%的包发送成功率,即便在比较恶劣的条件下也可以达到90%的包发送成功率。

2、健壮性:汇聚树协议可以实现灵活的拓扑调整,可以根据节点的实时位置和网络情况自动变换拓扑而不需要人为的干涉。

3、高效率:只需要发送少量的数据包就可以达到高效性和健壮性的目标。Trickle算法和通过数据包发送成功率来计算链路质量的方式功不可没。

4、硬件独立性


CTP协议在结构上一共分为3层,从下到上分别是:

1、链路质量估计层。在这里有LEEP协议来实现Trickle算法,维护一个链路质量估计表,统计周边节点和此节点的连接质量。

2、路由引擎。这一层将进行路由帧的发送,值得一提的是,路由帧的发送使用的书链路质量估计层提供的发送接口,这个发送接口在路由帧的头部和尾部分别套上了LEEP帧的帧头和帧尾(header and footer)。这意味着路由的形成、链路质量的估计2位一体。

3、转发引擎。这一层主要是进行数据包的发送和其他节点数据包的转发,并且通过ACK帧来计算转发的成功率。将成功率回馈给链路质量估计层。由此来看,汇聚树中所有的数据包都将直接或者间接对链路质量估计值产生影响。此外转发引擎还维护了一个发送队列,这个发送队列提供了阻塞警告。


上面就是CTP结构的示意图。

接着说转发引擎。

CTP之所以可以实现灵活的拓扑主要是因为每个节点都可以灵活地找出在不同的网络环境下的父节点,无论是转发帧还是此节点自己发送的数据帧,都是发往在那个时刻的父节点的。但是这样子很可能会出现被称之为“路由环路”东西。这种情况是绝对不允许存在的,这样子会导致数据包的循环发送,并且数据包永远也到不了根节点,所以在转发引擎中还做了路由环路的侦测工作,一旦发现路由环路,那么发现路由环路的节点就要从路由表选出一个信号强度“合适”的父节点代替现有父节点。


帧类型

CTP一共两种数据帧,一个是路由帧(LEEP帧),还有一种是数据帧,路由帧由路由引擎发送,负责组网工作。数据帧是由转发引擎发送,是基于CTP的数据平台一切功能的基础。

路由帧:


数据帧:


具体功能后面展开。


以上就是CTP三个模块的工作。


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值