## 4 Taxonomy of the Existing Multipath Routing Protocols
### Concurrent Multipath Routing
#### 4.2.1 Multipath Routing Protocols for Reliable Data Transmission
When a source node can provide the data requested by the sink node, it broadcasts _explore data_ packets towards the sink node through the established gradients in the first stage. Upon reception of an _explore data_ packet at an intermediate node, it uses Equations (3) and (4) to calculate the cost of data transmission over the sub-path from which this packet is received:  
\[Path\_Cost = Path\_ETX^{\alpha}\times Path\_Delay^{\beta} \tag{3}\] \[Path\_ETX = \text{Max}_{i=0}^{N-3}(\sum_{j=i}^{i+2}ETX_{j}) \tag{4}\]  
After that, the receiver node only broadcasts the lowest calculated cost to its next-hop neighboring nodes. In Equation (4), \(N\) indicates the number of traversed hops and \(ETX_{j}\)identifies the ETX value of \(j\)th hop. In order to address the route coupling effect, ETX value of each link is estimated according to the experienced Signal-to-Noise Ratio (SNR) over that link. When the sink node receives an _explore data_ packet that cannot meet the delay requirement of the intended application, or whenever the path discovery timer expires, the sink node starts to reinforce multiple node-disjoint paths for data transmission. To satisfy the delay constraint of the intended application, the sink node investigates the end-to-end delay of the _explore data_ packets received through different paths and only reinforces the paths with acceptable end-to-end delays. The path reinforcement is performed through sending _reinforcement_ messages over the selected paths towards the source node. Whenever a _reinforcement_ message is received by an intermediate node, it searches its local candidate table and selects one of its best next-hop neighboring nodes that does not belong to any other path between the source and sink node. When the source node receives the transmitted _reinforcement_ messages by the sink node, it divides its traffic to several streams using the _Multiple Description Coding (MDC)_ algorithm. This algorithm tries to improve data transmission reliability through forwarding each generated stream over two different paths. The utilized path reinforcement strategy and routing metric in this protocol greatly improves the performance of the original Directed Diffusion by constructing multiple high-quality low-delay paths. When the target source node floods an explore data packet to the network, each node estimates the ETX value of its neighboring nodes based on its experienced SNR. Then, in the path reinforcement process, the sink node uses the ETX value of the discovered paths to select minimum interfering paths. However, this technique cannot accurately calculate the exact value of the experienced interference during the data transmission process. The actual interference strength during the data transmission process highly depends on the traffic load of the interfering nodes. If the interfering nodes, which are located near an active path, do not involve in any data forwarding process, these nodes cannot impose any interference on the active path. Furthermore, each generated data stream should be transmitted through two different paths to provide a certain level of data transmission reliability. However, due to the random topology of the wireless sensor networks, constructing a sufficient number of node-disjoint paths to support high-rate multimedia streaming may not be feasible. _Energy-Efficient and QoS-based Multipath Routing Protocol (EQSR)_[66] is one of the recently proposed protocols designed to satisfy the reliability and delay requirements of real-time applications. EQSR improves reliability through using a lightweight XOR-based Forward Error Correction (FEC) mechanism, which introduces data redundancy in the data transmission process. Furthermore, in order to fulfill the delay requirements of various applications, this protocol utilizes a service differentiation technique through employing a queuing model to manage real-time and non-real-time traffic. EQSR initializes through broadcasting a _HELLO_ message by all the sensor nodes.