# DCO-MAC: A Hybrid MAC Protocol for Data Collection in Underwater Acoustic Sensor Networks
## 4 Proposed DCO-MAC Protocol
### CT-MAC Protocol
As a level-1 node belongs to a level-1 sub-network and one of level-2 sub-networks simultaneously, the whole state transition diagram of a level-1 node in the DCO-MAC protocol is shown in Figure 6, where the part in red has been explain in Figure 4.  
The level-1 node starts from the IDLE state at the beginning of the level-2 sub-network transmission phase. When the level-1 node receives an RTS packet from one of its level-2 nodes successfully, it broadcasts an INVITE packet, sets the WF_NOTICE timer, and enters the WF_NOTICE state. The duration of the WF_NOTICE timer is \(T_{\text{WF\_NOTICE}}\)\(=\)\(T_{\text{r\_NOTICE},\text{A}}\). When the WF_NOTICE timer expires and no NOTICE packets are received, the level-1 node goes back to the IDLE state. When a NOTICE packet is received and the receiving period of the NOTICE packets is not finished, the level-1 node keeps the current state. When all of the pre-scheduled DATA packets are received or the WF_NOTICE timer expires, the level-1 node broadcasts an ORDER packet, sets the WF_DATA timer, and enters the WF_DATA state. The duration of the WF_DATA timer is \(T_{\text{WF\_DATA},\text{timer}}\)\(=\)\(T_{\text{r\_DATA},\text{A}}\). When the WF_DATA timer expires and no DATA packets are received, the level-1 node goes back to the IDLE state. When a DATA packet is received and the receiving phase of the DATA packets is not finished, the level-1 node keeps the current state. When all of the pre-scheduled DATA packets are  
Figure 6: The whole state transition diagram of a level-1 node in the data-collection-oriented (DCO)-MAC protocol. received or the WF_DATA timer expires, the level-1 node broadcasts the ACK packet, and goes back to the IDLE state. The level-2 node has eight states in the CT-MAC protocol, namely IDLE, WTS_NOTICE (wait to send NOTICE), WF_INVITE (wait for INVITE), WF_ORDER (wait for ORDER), WTS_DATA (wait to send DATA), WF_ACK (wait for ACK), QUIET_1, and QUIET_2. The state transition diagram of a level-2 node in the CT-MAC protocol is shown in Figure 7.  
The initial state of the level-2 node is the IDLE state. In the beginning, the level-2 node without a data packet to be transmitted keeps silent in the current state. The level-2 node with data packet(s) to be transmitted sends an RTS packet to reserve the channel, sets the WF_INVITE timer, and enters the WF_INVITE state. The duration of the WF_INVITE timer is \(T_{\text{WF\_INVITE\_timer}}=2\tau_{\text{A},k}+2\theta\). When the WF_INVITE timer expires and the INVITE packet is not received, the level-2 node goes back to the IDLE state. When receiving the INVITE packet, the level-2 node with data packet(s) to be transmitted sets the WTS_NOTICE timer and enters the WTS_NOTICE state. The duration of the WTS_NOTICE timer is \(T_{\text{WTS\_NOTICE},\text{timer}}=T_{\text{WTS\_NOTICE},k}-2\tau_{\text{A},k}-\theta\). When the WTS_NOTICE timer expires, the level-2 node sends its NOTICE packet to the level-1 node at the pre-scheduled time, sets the WF_ORDER timer, and enters the WF_ORDER state. The duration of the WF_ORDER timer is \(T_{\text{WF\_ORDER\_timer}}=T_{\text{r\_NOTICE},A}-T_{\text{w\_NOTICE},k}\). When the WF_ORDER timer expires and the ORDER packet is not received, the level-2 node goes back to the IDLE state. When receiving the ORDER packet, the level-2 node sets the WTS_DATA timer and enters the WTS_DATA state. The duration of the WTS_DATA timer is \(T_{\text{WTS\_DATA\_timer},k}=T_{\text{w\_DATA\_k}}-2\tau_{\text{A},k}-\theta\). When the WTS_DATA timer expires, the level-2 node transmits the DATA packet(s) to the level-1 node at the pre-scheduled time, sets the WF_ACK timer, and enters the WF_ACK state. The duration of the WF_ACK timer is \(T_{\text{WF\_ACK\_timer}}=T_{\text{r\_DATA\_A}}-T_{\text{w\_DATA\_k}}\). When the WF_ACK timer expires and the ACK packet is not received, the level-2 node goes back to the IDLE state. Otherwise, if the ACK packet is received before the WF_ACK timer expires, the level-2 node gets the corresponding information from the ACK packet and goes back to the IDLE state.