# An Efficient Void Aware Framework for Enabling Internet of Underwater Things
## 3 The Proposed Efficient Void Aware Routing Protocol for Enabling Internet of Underwater Things
### An Efficient Void Aware Routing Protocol: Design Approach
#### 3.4.3 Void Detection Phase  
This phase is aimed at detecting the actual and initiative void nodes by designing and developing a void detection algorithm. Table 1 shows the notations that used in the void discovery algorithm. In Algorithm 1, each sensor considers itself an actual void node if did not find any sensor in its routing table. The node (i.e., \(n_{i}\)) create a void probe packet containing two fields, called Sender ID and isViod Boolean flag equal to 1 (i.e., True). Then, it inserts its ID and isViod in the packet and broadcast it to its one-hop neighbor sensors. Secondly, neighbors that receive the probe packet (i.e., \(n_{i}\)) extracts and check the ID and match it with its routing table. If did not find it in the routing table, it drops the packet. Else, it changes the value of isViod in its routing table to 1. The receiver node then checks whether it is an intuitive void node. It examines two scenarios: first, if all data in the routing table is void nodes, node \(n_{i}\) become an intuitive void. Second, the node (i.e., \(n_{i}\)) check the number of void and ordinary nodes in its routing table. If the void nodes numbers are higher than the ordinary nodes, it checks its routing table if has one ordinary node with a \"very good link\". If rounds, node \(n_{i}\) become an intuitive void node. It then updates the isViod value in the packet equal to 1 and updates the ID and rebroadcasts it to its one-hop neighbors. Otherwise, it immediately drops the void probe packet. This method is repeated all sensors updated the isViod field in the whole network. The following are the reasons for defining both scenarios as intuitive void nodes. In the first scenario, a node whose neighbors are all void nodes causes the data packet to be dropped since all its neighbors are void nodes, which causes the data packet to be dropped. In the second scenario, a node with a high number of void nodes in its routing table has a higher probability of losing a data packet as most of its neighboring are inside the critical area, causing the data packet to end up at a void node in later hops. As a result, if this node does not have at least one ordinary neighbor with excellent link quality, it is considered unreliable. This causes the data packet to reach the critical area, increasing the chances of losing the data packet, as well as increasing the power consumption of the ordinary neighbors due to the continued employment of these sensors, and causing the ordinary nodes to die early. Furthermore, if this node has at least one ordinary neighbor with very good link quality, it is recognized as an ordinary node since the use of this node could minimize the likelihood of packet loss and causes the data packet to be routed outside from the critical areas' boundary. Figure 4: Table and packets structure in EVA: (**a**) routing table, (**b**) hello packet, (**c**) probe packet, (**d**) data packet. Figure 5 explains the void detection phase of Algorithm 1 in detail. As clearly shown in Figure 5a, node \(n_{1}\) is an actual void node because the RT is empty. Thus, it generates a void probe packet embedded with its ID and isVoid equal to 1 and broadcast it to its one-hop neighbors. Node \(n_{2}\) and \(n_{3}\) obtains this packet because node \(n_{1}\) existed in RT of node \(n_{2}\) and \(n_{3}\). Next, both sensors update its isVoid status in the RT for node \(n_{1}\) equal to 1. Consequently, node \(n_{2}\) and \(n_{3}\) become an intuitive void node as all its neighbors in RT are void nodes. Therefore, these nodes embedded their ID and update the isVoid field in the probe packet and rebroadcast it to its one-hop neighbors. In Figure 5b, node \(n_{1}\), \(n_{4}\), and \(n_{5}\) collects the packet from node \(n_{2}\). Node \(n_{1}\) simply drops the packet because it is not available in its RT. Node \(n_{4}\) and \(n_{5}\) accept the packet as a node \(n_{2}\) are clearly inside the RT of the node \(n_{4}\) and \(n_{5}\). Therefore, it changes the value of isVoid in the RT of node \(n_{2}\) equal to 1.