RPL is a distance vector routing protocol (defined in RFC6550). It can operate on top of IEEE802.15.4. The routing layer is responsible for relaying packets across multiple hops separating source and destination nodes. It is divided into a forwarding engine, which uses a routing table to decide which neighbor node is the next hop for that packet, and a routing protocol, which populate that routing table. RPL is a routing protocol.
RPL is designed for Low Power and Lossy Wireless Networks such as Wireless Sensor Networks. It hence it optimized for collection networks (where nodes periodically report measurements to a small number of collection points) with infrequent communication from the collection point to individual nodes. RPL dubs collection traffic Multi-Point-to-Point (MP2P) and configuration traffic Point-To-Multi-Point (P2MP). RPL does not support Point-To-Point (P2P) traffic well, although workarounds can be used.
For MP2P traffic, RPL builds a gradient into the network, grounded at the collection points called Low power and lossy network Border Router (LBR). Each node is assigned a rank such that rank increases as the node is far from the LBR. In RPL, this gradient is called a Destination Oriented Directed Acyclic Graph (DODAG). Forwarding a packet to the LBR roughly consist in picking the neighbor node with the lowest rank. Nodes running RPL exchange signaling information to setup and maintain the DODAG. This information is exchanged as a new type of ICMPv6 message called the RPL Control Message. The 1B code in the ICMPv6 header is used to differentiate between different sub-type. The sub-type used to build the DODAG is called DAG Information Object (DIO). All the nodes in the network regularly issue a DIO which serves as a heartbeat to indicate their rank. The instant at which a node issues a DIO is governed by a Trickle timer which is reset only when an inconsistency arises. This way, when topology is stable, very little DIOs are exchanged.
P2MP is enabled in two forms: Storing Mode and Non-Storing mode. In Non-Storing mode, Source routing (according to RFC6554) is used when issuing a message for a specific node in the network, the LBR prepends the sequence of nodes that need to be traversed to get to the destination to the packet. To learn this sequence, each node in the network is asked to transmit a Destination Advertisement Object (DAO) to the LBR (another subtype of the ICMPv6 RPL Control Message) indicating its parents and children. Storing mode uses intermediate tables in certain nodes in the network. Analogously to the behaviour of a Distributed Hash Table (DHT), routes are computed partially to each intermediate node that is able to route within its subnetwork until the destination is reached.
Referenced by OpenMote