## 3 Opportunistic Routing Protocol in WSNs  
### Concept of Opportunistic Routing in WSNs  
The main structure of the OR protocol is completely different from conventional routing protocols. In traditional routing, the transmission path is static and fixed before the node starts transmission. On the other hand, in the opportunistic routing protocol, the next hop is decided dynamically after the packet is received by a neighbor node. In OR, the sender broadcasts a packet to a group of forwarders rather than to a single pre-selected node. Usually, these forwarder nodes are ranked on the basis of the routing metric. After the broadcasting of the data packet and its successful reception by the group of forwarders, a coordination protocol is run. This coordination is performed among the successfully received prioritized forwarders in order to select a unique forwarder node to continue the transmission. This process is repeated until the packet reaches its final destination sink. Hence, the basic operation of an opportunistic routing protocol can be divided into four parts:  
* Selecting a prospective group of forwarders;
* Broadcasting data packets to the selected forwarders;
* Finalizing a unique forwarder using a coordination system;
* Forwarding the packet.  
In 2005, [PERSON] and [PERSON] described ExOR [4], wherein they proposed opportunistic routing in WSNs for the first time. Here, they fragmented data packets into small batches during transmission. Each batch had an identification number. The source node set the forwarder among its neighbor nodes and ranked them according to ETX (Expected Number of Transmissions) metrics. The closer the forwarder node was to its destination, the higher was the rank. Each node in the forwarder list managed a local batchmap. A batchmap is the list used for tracking the batch packet that has been forwarded by the node. Every time a node overhears a transmission, it compares its local batchmap with the packet's batchmap, and if the higher ranked entry is found, it updates its local batchmap with that entry. ExOR implements the scheduled transmission of packets to ensure that only one node sends the packet at one time.  
In the network shown in Figure 3, there are four nodes connected to each other, with each given a link delivery probability. Consider a scenario where node \(S\) wants to send a packet to node \(D\); node \(S\) therefore makes a forwarder list with \(M,N\) and \(D\), where \(D\) is the highest priority. After receiving the packet, each node attempts to send an \(ACK\) (Acknowledgement). If node \(N\) does not hear the \(ACK\) from \(D\), it will send its \(ACK\) embedded with its own sender \(ID\) as the highest forwarder. Then, node \(M\), which would hear the \(ACK\) from \(D\), would send its \(ACK\) embedded with \(D\)'s \(ID\) as the highest ranked node. Hence, node \(N\) will not forward the packet, as it knows through \(M\)'s \(ACK\) that the highest ranked node already obtained the data. ExOR showed improved throughput compared with conventional routing. However, it only works with the information available at the time of transmission, without considering update measurements. Hence, incorrect measurements can cause packet duplication. Even after the transmission, the nodes are concerned about the coordination by \(ACK\) among nodes, which causes overhead in the case of a dense network. Moreover, ExOR assumes that all nodes are active at all times. However, in a WSN where nodes are energy constraints, there is a critical bottleneck for load-balancing.