## 3 Proposed Scheme
### Distributed and Reliable Data Transmission: DRDT
#### Transmission Phase  
A helper node selected transmits an RTS packet once to determine if the receiver node needs retransmissions of the data packet and prevent other nodes from selecting themselves as helper nodes. If the receiver node that has not received the data packet, receives the RTS packet of the helper node, it transmits the clear to send (CTS) packet to the helper node. After receiving the CTS packet, the helper node begins its transmission phase. When it receives several RTS packets, the receiver node only executes the transmission phase for the first RTS packet, and ignores the others, in order to solve the duplicated retransmission problem by several helper nodes. The transmission phase is generally divided into two steps: the control packet transmission step which prevents the retransmission of the sender node and the data packet retransmission step which retransmits the data packet to the receiver node. In \begin{table}
\begin{tabular}{|p{142.3 pt}|} \hline Input: sender id (\(s\_id\)), receiver id (\(r\_id\)), PRR between current and sender nodes (\(PRR_{c\to s}\), \(PRR_{s\to c}\)), PRR between current and receiver nodes (\(PRR_{c\to r}\), \(PRR_{r\to c}\)), \(flag\) bit (flag) \\ Output: helper node id (\(h\_id\)) \\ \hline HELPER NODE SELECTION (\(s\_id\), \(r\_id\), \(PRR_{c\to s}\),\(PRR_{s\to c}\), \(PRR_{c\to r}\), \(PRR_{r\to c}\), \(flag\)) \\ // When a current node overhears the data packet, it starts helper node selection phase \\
1 \(H,\ W,\ h\_id\ \leftarrow\ 0\) \\
2 **if**\(r\_id=\) one of neighbor nodes id of current node **and** flag! = 0 \\ // If \(flag\) value is 1, it means that the data packet is transmitted from helper node \\
3 **then**\(H_{PRR}(c,s)\gets 1-min(1,-\log_{10}PRR_{c\to s}\times PRR_{s\to c})\) \\
4 \(H_{PRR}(c,r)\gets 1-min(1,-\log_{10}PRR_{c\to r}\times PRR_{r\to c})\) \\
5 \(H\gets w_{1}H_{PRR}(c,s)+w_{2}H_{PRR}(c,r)\) \\ // Helper value calculation \\
6 **else** drop the data packet \\
7 **exit** \\
8 **if**\(H!=0\) \\
9 **then**\(W\leftarrow(1-H)\times\delta\) \\  // Set waiting time based on helper value \\
10 **TIMER(\(W\)) \\  // Start timer with waiting time \\
11 **else** drop the data packet \\
12 **exit** \\
13 **while**\(W>0\) \\
14 **do if** overhearing the data packet again **or** overhearing the RTS packet \\
15 **then** drop the data packet \\
16 **exit** \\
17 \(h\_id\leftarrow\) current node id \\
18 **BROADCAST(\(h\_id\))** \\  // Current node becomes the helper node and broadcasts RTS packet \\  // once with its id to neighbor node \\ \hline \end{tabular}
\end{table} 
Table 1: Pseudo-code of helper node selection phase. the control packet transmission step, the helper node sends out the control packet to the sender node to prevent data packet duplication due to retransmissions of the sender node. The helper node considers the PRR of the sender node, and the number of control packet retransmissions is effectively reduced. This step should be started before the data packet retransmission step since the sender node possibly retransmits the data packet during retransmission of the helper node. In the data packet retransmission step, the helper node on behalf of the sender node that has a low PRR value, retransmits the data packet to the receiver node. At this time the \(flag\) bit set to 1 is added in the data packet. Consequently, the helper node reduces the number of retransmissions by delegating the retransmission task from the sender node. Figure 5 shows the data packet retransmission and the control packet transmission by helper node \(a\). First, after receiving the CTS packet from the receiver node, helper node \(a\) retransmits the data packet to the receiver node. Helper node \(a\) also transmits the control packet to the sender node and the sender node transmits an ACK packet to the helper node, after receiving the control packet.