## 4 TB-RPL Mechanism
### Presentation of TB-RPL Mechanism
\"1:DAO(E, C)\" here means the originator of the whole DAOs set is node E, and the preferred parent of the originator is node C, and the number 1 before \":\" refers to that it is the first DAO message in the DAOs set. \"2:DAO(E, C)\" and \"3:DAO(E, C)\" follow the same rule. In Figure 5b, node E is the originator, nodes C and B are producers, and node A is the root. \"1:DAO(E, C)\" here means the originator of the whole DAOs set is node E, and the preferred parent of the originator is node C. \"2:DAO(E, B)\" means that the originator is node E and the preferred parent of the current producer is node B. \"3:DAO(E, A)\" indicates that the originator is node E, and the preferred parent of the current producer is node A. Specifically, for node E, all the DAOs shown in Figure 5 are necessary. If any DAO in the logical set is missed, then the downward routing of node E cannot be established. They form the indivisible whole. Each node performs the role of originator (in both modes) and forwarder (in the non-storing mode)/producer (in the storing mode) and sends corresponding types of DAO to its preferred parent periodically by the control of a DAO timer. The node, of which the memory space for storing downward routing table runs out, is defined as a weak node. A weak node will set a weak flag that is defined as the indicator that the current DAO is produced by a weak node. Figure 4 shows the usage of this flag in a DAO message. The function of the weak flag is to tell the receiver of this DAO that it should read and store the content of TIO field in the provided order for producing a source routing header in the future (the mechanism to implement this step is the same as the source routing mechanism of the root in the non-storing mode). One or more TO(s) must be followed by one or more TIO(s). In this designated option sequence, a TIO represents a DODAG parent, while a TO describes a child node [13]. A typical non-storing node operates multiple TIOs and sends DAO message directly to the root. A typical storing node employs one TIO without a parent address subfield and sends the DAO message to the preferred parent. Assume that _Trg_(\(T\)) represents a TO for a target T, and _Trust_(\(P\)) refers to a TIO including a parent P. Then, a complete DAO message is defined as follows:  
\[\text{DAO}=[\{\textit{Trg}(\textit{T}_{i})\mid i\in(1,2,3,...,n)\},\{\textit{ Trust}(\textit{P}_{j})\mid j\in(1,2,3,...,m)\}], \tag{1}\]  
where \(m\geq n\) in standard RPL and thus the set _Trg_(\(T\)) is defined to own parents _Trust_(\(P\)). The DAO producer itself also belongs to _Trg_(\(T\)). Even though the two MOPs have the same DAO structure, the contents are different. In the non-storing mode, the parent address subfield must be filled in for LBR to generate source routing header. However, this subfield is empty in the storing mode. Because the DAO message is processed by the sender's direct parent itself, there is no need to set parent information in the DAO message. The receiver just stores the originator address and next-hop address information, which is enough for implementing a hop-by-hop routing function. It is worth noting that the next-hop address is not included in DAO message, while it is implicitly the sender address in the IPv6 header. In summary, both MOPs use the same DAO message structure, which involves one base object, one or more TO, and one or more TIO. However, the parent address subfield must be written in the non-storing mode, while it is empty in the storing mode. In summary, each node performs:  
* In the storing mode by default;
* If the memory space used to store downward routing table runs out, this node becomes a weak node;
* Then, a weak flag is set in the currently produced DAO, with the corresponding content of TO and TIO;* In detail, the content of TIO contains the segment of the path to originator that the middle weak node(s) cannot store.