1. Introduction

   The Trickle algorithm establishes a density-aware local communication
   primitive with an underlying consistency model that guides when a
   node transmits.  When a node's data does not agree with its
   neighbors, that node communicates quickly to resolve the
   inconsistency (e.g., in milliseconds).  When nodes agree, they slow
   their communication rate exponentially, such that nodes send packets
   very infrequently (e.g., a few packets per hour).  Instead of

Levis, et al.                Standards Track                    [Page 2]

RFC 6206                    Trickle Algorithm                 March 2011

   flooding a network with packets, the algorithm controls the send rate
   so each node hears a small trickle of packets, just enough to stay
   consistent.  Furthermore, by relying only on local communication
   (e.g., broadcast or local multicast), Trickle handles network
   re-population; is robust to network transience, loss, and
   disconnection; is simple to implement; and requires very little
   state.  Current implementations use 4-11 bytes of RAM and are
   50-200 lines of C code [Levis08].

   While Trickle was originally designed for reprogramming protocols
   (where the data is the code of the program being updated), experience
   has shown it to be a powerful mechanism that can be applied to a wide
   range of protocol design problems, including control traffic timing,
   multicast propagation, and route discovery.  This flexibility stems
   from being able to define, on a case-by-case basis, what constitutes
   "agreement" or an "inconsistency"; Section 6.8 presents a few
   examples of how the algorithm can be used.

   This document describes the Trickle algorithm and provides guidelines
   for its use.  It also states requirements for protocol specifications
   that use Trickle.  This document does not provide results regarding
   Trickle's performance or behavior, nor does it explain the
   algorithm's design in detail: interested readers should refer to
   [Levis04] and [Levis08].