CTP协议的组成原理与具体实现(原理篇,含组件解析)_物联网竞赛挑战赛

简介: CTP协议的组成原理与具体实现(原理篇,含组件解析)_物联网竞赛挑战赛

目录


CTP协议介绍

基本原理

CTP的两种处理路由循环的方法

CTP中包重复问题的解决方案

数据帧图例以及各字段定义

路由帧图例以及各字段定义

链路估计

路由引擎

转发引擎


正文


CTP协议介绍


基本原理


CTP是基于树的汇聚协议,网络中的一些节点将自己设为根节点,节点之间形成到根节点的树的集合。CTP是没有地址的,节点并不是向固定的根节点发送数据包,而是通过选择下一跳隐式地选择根节点,节点根据路由梯度形成到根的路由。


CTP协议假设链路层提供了以下功能:


1. 提供有效的本地广播地址;


2. 为单播包提供同步的确认信息;


3. 提供协议分派字段以支持多种高层协议;


4. 具有单跳的源和目的地址字段。


CTP假设它有一部分附近邻居节点的链路质量估计信息。该信息提供了本节点与某一邻居节点之间的通信过程中成功地传输了单播包的次数。 CTP有一些提高传输可靠性的机制,但它并不保证100%可靠。它是尽力的,但有时即使尽力了也未必能办到。 CTP是为通信量相对较低的网络设计的。带宽有限的系统可能使用别的协议更合适,比如能将多个小的帧组装成单个数据链路层包的协议。

CTP网络拓扑如图所示。

0000000000000000000000000000.png

CTP使用期望传输值(ETX,Expected Transmissions)作为路由梯度。根节点的ETX为0,其它节点的ETX为其父节点的ETX值加上到父节点链路的ETX 值。这种相加的方法需要假设节点使用链路层重传。给出一种有效的路由,CTP 选择ETX值最小的一种。ETX 值用精度为0.01的16位定点实数表示。若ETX 值为451则表示ETX为4.51,同样ETX值为109表示ETX为1.09。


CTP的两种处理路由循环的方法


路由循环是可能在CTP网络中出现的问题之一。路由循环通常发生在节点选择的路由的ETX值比原来的大的多的情况下,这可能是因为与侯选的节点失去连接造成的。如果它是新的路由选择的节点,那就产生了路由循环。


CTP通过两种方法处理路由循环。第一种是每个CTP包含有当前节点的ETX值,如果CTP接收到比自己的ETX值小的数据帧,则说明树中有不一致。CTP通过广播一个信息帧以期解决这种不一致性,希望发送这个数据帧的节点收到并相应地调整它的路由。如果一部分节点被隔开,那么它们会形成ETX值无限增大的死循环。CTP的第二种机制是不考虑ETX值大于一个固定常量的路由,这个值取决于实现。


CTP中包重复问题的解决方案


包重复是CTP中可能发生的另外一个问题。包重复发生在节点收到一个数据帧,并回复一个ACK,但ACK中途丢失的情况。发送者将重传这个包,而接收者又将收到它。这在多跳中是灾难性的,因为重复是指数级的。例如,每跳产生一个重复,则第一跳有两个包,第二跳四个,第三跳八个......


同时路由循环使重复抑制变得更复杂,因为路由循环可能使节点合法地收到一个包一次或多次。因此,如果仅仅根据源地址和顺序号,路由循环中的包可能被丢弃。因此,CTP数据帧具有一个已存活时间(THL,time has lived)字段,每过一跳都对该字段加1。链路层重传具有相同的THL值,但路由循环中的包就不会如此了。


数据帧图例以及各字段定义


CTP数据帧格式如下:

00000000000000.png

各字段定义如下:

P

拉路由位。P位允许节点从其它节点请求路由信息。如果节点收到一个P位置位的包,它应当传输一个路由帧。
C 拥塞标志位。如果节点丢弃了一个CTP数据帧,它必须在下一个传输的数据帧中置C位。
THL 已存活时间。当节点产生一个CTP数据帧时,它必须设THL为0。当节点接收到一个CTP数据帧时,它必须增加THL值。如果节点接收到的数据包THL为255,则将它回绕为0。
ETX 单跳发送者的ETX值。当节点发送一个CTP数据帧时,它必须将到单跳目的地的路由ETX值填入ETX字段。如果节点接收到的路由梯度比自己的小,则它必须准备发送一个路由帧。
origin 包的源地址。转发的节点不可修改这个字段。
swqno 源顺序号。源节点设置了这个字段,转发节点不可修改它。
collect Id 高层协议标识。源节点设置了这个字段,转发节点不可修改它。
data 数据负载。0个或多个字节。转发节点不可修改这个字段。

origin, seqno, collect id合起来标识了一个唯一个源数据包,而origin, seqno, collect id, THL合起来标识了网络中唯一一个数据包实例。两者的区别在路由循环中的重复抑制是很重要的。如果节点抑制源数据包,则它可能丢弃路由循环中的包;如果它抑制包实例,则它允许转发处于短暂的路由循环中的包,除非THL凑巧回绕到与上次转发时相同的状况。


路由帧图例以及各字段定义


CTP路由帧格式如下:

各字段意义如下:

P

与数据C
C 拥塞标识。如果节点丢弃了一个CTP数据帧,则必须将下一个传输路由帧的C位置位。
parent 节点的当前父节点
metric(ETX) 点的当前ETX值

当节点接收到一个路由帧时,它必须更新路由表相应地址的ETX值。如果节点的ETX值变动很大,那么CTP必须传输一个广播帧以通知其它节点更新它们的路由。与数据帧相比,路由帧用父节点地址代替了源节点地址。父节点可以发现子节点的ETX值远低于自己的ETX值的情况,并准备传输一个路由帧。


CTP的一种实现可以在tos/lib/net/ctp目录中找到,该实现由三个主要的子组件组成,如下图所示。


1. 链路质量估计器,负责估计单跳的ETX值;


2. 路由引擎,它根据链路估计和网络层的信息(如拥塞情况)来决定哪个邻居节点作为路由的下一跳;


3. 转发引擎,它维护发送包队列,决定是否发送和发送的时机。它的名字有点令人混淆:转发引擎不仅要发从其它节点过来的数据包,同时也要发送自己产生的数据包。


下图是CTP协议组成图。

000000000.png


链路估计


该实现使用两种机制来估计链路质量:周期性的LEEP包和数据包。该实现使用LEEP包作为信息帧。这些包中填入邻居节点地址和相应的ETX值。信息帧的发送速率由一种与trikle dissemination协议类似的算法计算,它根据网络的状况动态地计算。信息帧使用一个以指数级随机递增的定时器控制发送,当发生以下状况之一时,该实现重置定时器为一个较小的值。


1. 路由表为空(这也将设置P位)


2. 在>=1次传输后ETX值增大


3. 节点收到一个P位置位的包


该实现通过数据传输改变对LEEP的链路估计,这是计算ETX最直接的方法。当数据通路传输一个数据包时,它告知链路估计器传输的目的地和传输成功与否。估计器对每5次传输产生一个ETX估计值,ETX为6表示一次也没传成。


估计器通过指数权重的移动平均线合并信息帧的ETX值和数据估计产生的ETX值。基于信息帧的估计会填充邻居表。期望的状况是在已稳定的网络中,较低的信息帧速率意味着对选定的路由来来说,数据估计占的比重比信息帧估计的大。


此外,CTP收集数据估计的速率与传输速率是成比例的,因此它可以快速地检测到断开的连接并切换到新的侯选邻居节点。


组件tos/lib/net/le/LinkEstimatorP实现了链路估计器。它结合了基于LEEP和数据的估计。


路由引擎


该实现的路由引擎负责选择数据传输的下一跳。它记录了链路估计表中所维护节点的一个子集的路径ETX值。最小耗费的路由即路径ETX值和连接ETX值之和最小的那条。因此路径ETX值整条路由的连接ETX值。组件tos/lib/net/ctp/CtpRoutingEngineP实现了该路由引擎。


转发引擎


组件tos/lib/net/ctp/CtpForwardingEngineP实现了转发引擎。它具有以下5种职责:


1. 向下一跳传递包,当需要时重传,并根据是否收到ACK向链路估计器传递相应信息;


2. 决定何时向下一跳传递包;


4. 维护需要传输的包队列,它混杂了本地产生的包和需要转发的包;


5. 检测由于丢失ACK引起的单跳重复传输。


转发的四个关键函数为包接收(SubReceive.receive()),包转发(forward()),包传输(SendTask())和决定传完之后做什么(SubSend.sendDone())。


receive函数决定节点是否转发一个包。它有一个缓冲区保存了最近收到的包,通过检查这个缓冲区可以确定它是否是重复的。如果不是,则调用转发函数。


转发函数格式化需要转发的包。它检查收到的包是否有路由循环,检查传输队列中是否有足够的空间,如果没有,则丢弃该包并置C位。如果传输队列为空,则post Send任务。


Send任务检查位于传输队列头部的包,为到下一跳的传输作好准备(请求路由层的路由信息),并提交到AM层。


当发送结束时,sendDone检查发送的结果。如果包被确认,则将包从传输队列中拽出。 如果包是本地产生的,则将sendDone信号向上传。如果包是转发的,则将包返回到转发消息缓冲池。如果队列中还有剩余的包(比如没有被确认的),它启动一个随机定时器以重新post这个任务。该定时器实质上用于限制CTP的传输速率,不让它尽快地发包,这是为了防止在通路上自我冲突。

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
12天前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
30 3
|
19天前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
96 2
|
2天前
|
前端开发 JavaScript 开发者
揭秘前端高手的秘密武器:深度解析递归组件与动态组件的奥妙,让你代码效率翻倍!
【10月更文挑战第23天】在Web开发中,组件化已成为主流。本文深入探讨了递归组件与动态组件的概念、应用及实现方式。递归组件通过在组件内部调用自身,适用于处理层级结构数据,如菜单和树形控件。动态组件则根据数据变化动态切换组件显示,适用于不同业务逻辑下的组件展示。通过示例,展示了这两种组件的实现方法及其在实际开发中的应用价值。
8 1
|
5天前
|
数据采集 存储 编解码
一份简明的 Base64 原理解析
Base64 编码器的原理,其实很简单,花一点点时间学会它,你就又消除了一个知识盲点。
23 3
|
3天前
|
数据采集 边缘计算 物联网
聊一聊物联网多协议数采盒
聊一聊物联网多协议数采盒
|
8天前
|
网络协议 物联网 网络性能优化
物联网协议比较 MQTT CoAP RESTful/HTTP XMPP
【10月更文挑战第18天】本文介绍了物联网领域中四种主要的通信协议:MQTT、CoAP、RESTful/HTTP和XMPP,分别从其特点、应用场景及优缺点进行了详细对比,并提供了简单的示例代码。适合开发者根据具体需求选择合适的协议。
26 5
|
12天前
|
存储 JavaScript 前端开发
Vue3权限控制全攻略:路由与组件层面的用户角色与权限管理方法深度解析
Vue3权限控制全攻略:路由与组件层面的用户角色与权限管理方法深度解析
55 2
|
14天前
|
机器学习/深度学习 编解码 算法
深入解析MaxFrame:关键技术组件及其对视频体验的影响
【10月更文挑战第12天】随着流媒体服务和高清视频内容的普及,用户对于视频质量的要求越来越高。为了满足这些需求,许多技术被开发出来以提升视频播放的质量。其中,MaxFrame是一种旨在通过一系列先进的图像处理算法来优化视频帧的技术。本文将深入探讨构成MaxFrame的核心组件,包括运动估计、超分辨率重建以及时间插值算法,并讨论这些技术如何协同工作以改善视频播放效果。
25 1
|
20天前
|
开发框架 缓存 前端开发
electron-builder 解析:你了解其背后的构建原理吗?
本文首发于微信公众号“前端徐徐”,详细解析了 electron-builder 的工作原理。electron-builder 是一个专为整合前端项目与 Electron 应用的打包工具,负责管理依赖、生成配置文件及多平台构建。文章介绍了前端项目的构建流程、配置信息收集、依赖处理、asar 打包、附加资源准备、Electron 打包、代码签名、资源压缩、卸载程序生成、安装程序生成及最终安装包输出等环节。通过剖析 electron-builder 的原理,帮助开发者更好地理解和掌握跨端桌面应用的构建流程。
49 2
|
2天前
|
供应链 安全 分布式数据库
探索区块链技术:从原理到应用的全面解析
【10月更文挑战第22天】 本文旨在深入浅出地探讨区块链技术,一种近年来引起广泛关注的分布式账本技术。我们将从区块链的基本概念入手,逐步深入到其工作原理、关键技术特点以及在金融、供应链管理等多个领域的实际应用案例。通过这篇文章,读者不仅能够理解区块链技术的核心价值和潜力,还能获得关于如何评估和选择适合自己需求的区块链解决方案的实用建议。
8 0

相关产品

  • 物联网平台
  • 推荐镜像

    更多