网络协议MPL(3):RFC2606--The Trickle Algorithm文档翻译

来源:互联网 发布:存货管理与优化 编辑:程序博客网 时间:2024/04/28 13:19

The Trickle Algorithm

摘要:
涓流算法使得有损共享介质(如低功耗有损网络)中的节点在进行信息交换时具有:高鲁棒性、高效能,简单且可扩展等特性。传输窗口的动态调整特性使得涓流算法在传输新信息时,当每小时仅发送很少的重复信息时链路层传输次数按比例调整。简单的抵制机制和传送点选择使得涓流算法的通信速率和节点密度间为对数关系。本文描述涓流算法和它的使用。

3、涓流算法概览
涓流算法的基础原语非常简单:一个节点很少传输数据,除非它监听到少数其它传送者指明自己的传输是其它数据。例如这些数据包括路由状态,软件升级版本,最后一个组播包。此原语允许涓流算法相对于网络密度有千倍规模的变化,以进行快速扩散升级、均匀分布传输载荷、提升瞬间断开时的鲁棒性、处理网络重聚集,并以极少工作量维护上述工作:例如,汇聚树协议(CTP)中的路由信标,需要每小时顺序发送少量数据包,但CTP可以在几个毫秒内回应拓扑的改变。

涓流算法的所有信息都是发送给本地通信地址的。精确的地址需要依赖于下层的IP协议以及上层协议如何使用涓流算法。在IPv6中,可以使用链路本地多播地址或其它本地多播地址,而IPv4中可以使用广播地址(255.255.255.255)。

对于一个涓流信息,有两个可能的结果:要不每个节点接收到信息后发现信息数据和它自己的状况一致,要不接收者发现一个不一致。检查可能会收到两个结果:要不一个过时的节点侦听新的节点,要不一个升级了的节点侦听旧的节点。只要任意节点进行通信,无论接收还是发送,其中一些将会检查一个升级需求。

举例,考虑一个简单的案例,“最新式”由版本号(如网络配置)定义。如果节点A发送时使用版本V,但节点B的版本为V+1,这样节点B得知A需要一个升级。类似地,如果节点B发送时使用版本V+1,则节点A则知道自己需要升级了。如果B广播或组播进行升级,则它的所有邻居都可以在没有公告需求的情况下收到信息,其中有些接收者甚至还未收到A发送的信息。在此例中,A或B谁最先发送信息并不重要,无论哪种情况,这种不一致都会被发现。

实际上,涓流通信无论在发送还是接收的情况下都可以实现涓流算法以操作稀疏和稠密的网络。一个单一的、断开的节点必须使用涓流通信速率发送信息。在一个尺寸为n的无损、单跳网络中,每个节点的流发送速率等于涓流发送速率通过所有节点的时间和。涓流算法在以下场景中均衡载荷:每个节点的涓流发送速率是流通讯速率的1/n。稀疏网络中每个节点需要更多的发送,但给定广播域的使用不会增加(如空间无线电信道、共享介质)。对于无线网络和其它共享介质来说这是一个重要的特性,信道是宝贵的共享资源。此外,在稠密网络中减少发送次数可以保护系统能量。

4、涓流算法
本节讲述涓流算法

4.1 参数和变量
涓流计时器在一个指定的时间间隔内运行,有如下三个配置变量:最小时间间隔Imin,最大时间间隔Imax和一个冗余常量k。
  • 最小时间间隔Imin:在时间单元定义(如毫秒、秒)。例如一个协议可能定义最小时间间隔为100毫秒。
  • 最大时间间隔Imax:最小时间间隔的倍数(基于2log(max/min))。例如一个协议可能定义Imax为16。如果最小时间间隔为100毫秒,则最大时间间隔为100ms*65536,6553秒大约为109分钟。(65536为2^16)
  • 冗余常量k:是一个自然数(大于0)。
除了这三个参数之外,涓流还维护了三个变量:
  • I:当前时间间隔大小。
  • t:当前时间间隔内的一个时间。
  • c:一个计时器。

4.2 算法描述
涓流算法的6个规则:
  1. 当算法开始执行时,将会把变量I设置为[Imin,Imax]间的一个值-----大于等于Imin,小于等于Imax。算法开始于第一个时间间隔。
  2. 当一个时间间隔开始时,涓流将变量c重设为0,并将变量t设置为当前时间间隔中的一个随机数,范围为[I/2,I),也就是大于等于I/2,小于I。时间间隔止于I。
  3. 无论何时,只要涓流监听到一个“一致”的传输,计数器c将加1。
  4. 在时间到达t时,当且仅当计数器c小于冗余常量k时,涓流才会发送信息。
  5. 当时间间隔I到期,涓流加倍时间间隔长度。如果新的时间间隔长度大于Imax所指定的时间,涓流将设置时间间隔长度为Imax所指定时间。
  6. 如果涓流监听到“不一致”的传输,且变量I大于Imin,它将重设涓流计时器。在重设计时器时,涓流将设置I的值为Imin,并按2的步骤开始一个新的时间间隔。如果涓流监听到一个“不一致”的传输时I的值等于Imin,涓流将不做任何处理。涓流在响应一个外部事件时也会重设它的计时器。
术语“一致”、“不一致”、“事件”放在引号内,因为这意味着它们依赖于一个协议如何使用涓流。

涓流算法只有在上述算法的第4步才会进行发送操作。这意味着在检测到一个不一致(将I缩减至Imin)和响应不一致(在新时间间隔范围内的时间t时发送数据)间存在一个固有延迟。为了立即响应检测到一个不一致,会导致一个广播风暴,也就是很多节点以同步的方式同时响应。通过使用最小时间间隔响应涓流算法,一个协议会从涓流的抑制机制和按比例跨越大范围节点密度中受益。

5、使用涓流
一个使用涓流的协议规范必须指定:
  • Imin、Imax和k的默认值。因为链路层属性变化范围非常大,Imin默认值需要根据链路层传输时的最大延迟来指定。例如,一个规范将说明Imin默认值是最坏情况下链路层延迟的4倍,而不是说Imin默认值是500毫秒。最坏情况下延迟大约等于首个链路层帧传输时间,假定一个空闲的信道(不包括补偿、虚拟传送等场景)。
  • “一致”的传输有哪些东西构成。
  • “不一致”的传输有哪些东西构成。
  • 除不一致传输和重启计时器之外还有哪些事件。
  • 一个节点传输的涓流信息有哪些信息。
  • 当发现不一致时,除算法外,协议还要执行哪些动作。

6、操作注意事项
当一个协议使用涓流算法时推荐使用运行时节点参数配置通知机制,尽管有时无法满足。在这种情况下,当不同的节点有不同的参数配置时,涓流算法会出现意想不到的行为。本节讲述这些行为和操作注意事项。

6.1  不匹配冗余常量
如果节点有不同的冗余常量k,那么那些k值更大的节点将会比k值小的节点发送更为频繁。在某些场景,这些增加的载荷跟网络密度不相关。例如,假设一个网络中所有的节点k=1,只有一个节点的k=2。其它节点可以在每个间隔周期结束发送:但只有一个涓流通讯速率独自保持为2。因此k值的不匹配的危险在于不一致的通信载荷,在低功耗网络中,这将耗尽一些节点的能量。

6.2 不匹配Imin
如果节点有不同的Imin,那么一些节点在监听到不一致的信息时,将比别的节点发送得更快。这些更快的节点将增加它们的时间间隔至拥有更长的时间间隔的更慢的节点,但在这一时期将抑制更慢的节点。尽管,当节点普遍接受此时间间隔时,这种抑制将在首个慢周期结束。因此,不匹配的Imin值和倍增常量Imax值将导致不匹配的最长时间间隔长度。

6.3 不匹配Imax
如果节点有不同的Imax,将会在传输载荷上导致长期问题。拥有小的Imax值的节点将会发送得更快,抑制那些拥有更大Imax值的节点。这些拥有更大Imax值的节点总是被抑制,将永远无法发送。在一般情况下,当网络是一致的,这将导致能量消耗上长期的不公平。

6.4 不匹配的定义
如果节点有不同的一致或不一致的构成,将会导致涓流无法进行正确操作。例如,如果一个接收者认为传输是一致的,但发送者以为它是不一致的(站在接收者的立场),那么接收者将不会正确回应并通知传送者。这将导致网络无法达到一致状态。据此,常量k、Imin、Imax配置,必须在协议中明确一致,且不能在运行进行配置。

6.5 指定常量k
有一些个例,当一个协议希望使用禁止抑制的涓流(k值设为无穷大)。通常情况下,这种方法高度危险且不推荐使用。禁止抑制意味着每个节点在每个周期都会发送信息,这会导致稠密网络的拥堵。当很多节点在同一时间开始新周期时,这种方法尤其危险。通常情况下,把k值设得高一些比设为无穷大会更好些(比如5或10)。k的典型值为1~5:这在冗余和低功耗间达到一个很好的平衡[Levis08]。

尽管如此,有些情况下,协议仍需要关掉涓流抑制。因为k是一个自然数,k=0表示不使用k值。如果一个协议允许k值进行动态配置,一个0值保留为不能使用。为了易于调试和包检测,把参数描述为k-1比k更容易令人困惑。此时则推荐协议关掉抑制,并保留k=0,意思是k值为无穷大。

6.6 k和Imin间的关系
最终,一个协议会这样设置k和Imin,Imin最少是传送k个数据包所花时间的2到3倍。否则的话,如果超过k个节点重设它们的时间间隔至Imin,将导致通信中的拥堵和重要包的丢失。实验结果表明,拥堵所导致的丢包将降低涓流的效率。

6.7 涓流的调整和改良
涓流基于少量的简单、牢固完整机制来挑战高网络环境的鲁棒性。具我们以往使用涓流的经验,试图调整它的行为常常入不敷出。本算法已经非常高效:进一步减少了少数失败情况下传输和回应的次数。基于经验,我们极力主张协议设计者在没有大量实验证明这些改变不会违反设想及破坏算法的情况下抑制调整或提高涓流的冲动。

尽管如此,涓流离完美还相去甚远。例如涓流抑制通常会导致稀疏节点比稠密节点传送得更多。在极小覆盖情况下它离最优计算量有很大的距离。尽管如此,在动态网络环境下,如无线低功耗有损网络,去协调计算传输集的最优化所付出的通常会大于其所带来的好处。涓流的好处之一是实现如此简单、仅需少量代码便可高效执行。改善它的同时需权衡复杂性增加所带来的花费。

6.8 涓流的使用
涓流算法已经使用于各种实际运行的和学术背景的协议。下面给出一些实际应用的简要概述,并提供例子以演示如何及何时可以使用它。这些例子并非考虑周全的。

可靠的洪泛/散播:协议使用涓流周期性地公告最近收到的数据,通常使用一个版本号。当一个节点监听到一个新版本号或收到一个新数据时发生不一致。当节点监听到一个更旧的或相同的版本号发生一致。当监听到一个更旧的版本号,节点发送一个升级,而不是重设自身的涓流计时器。拥有旧版本号的节点在收到升级后将重设它的计时器,从而使得新数据可以更快传播。这些应用例子包括:广播[Hui08a],网络配置[Lin08] [Dang09],安装新的应用程序[Hui04] [Levis04]

路由器流量控制:一个使用涓流控制信标及路由状态发送的协议。当路由拓扑在某种程度上改变时,导致回路或重大变形时发生不一致:例子包括路由层发现一个路由环路或一个节点的路由成本发生重大改变。当路由拓扑运行良好且成功传送数据包,发生一致。当拓扑结构稳定时将Imin值设小一些,这样使用涓流算法使得路由协议只需要送少量信标就可对出现的问题进行快速反应。这类例子包括IPv6低功耗有损网络路由协议(RPL)[RPL],CTP[Gnawali09],和一些商业IPv6路由层[Hui08b]

0 0
原创粉丝点击