Cooperative communication (CC) has been introduced as an effective technique to combat the detrimental effects of channel fading by exploiting spatial diversity gain, resulting in improved throughput and network performance. CC provides an opportunity for single antenna nodes to share their resources and construct a virtual antenna array at a lower cost. As a result, CC is considered an efficient solution for mobile nodes where some difficulties in terms of physical size and energy consumption arise from implanting multiple antennas. However, since CC is a new technology it brings new challenges that should be adequately addressed to render it a viable solution for wireless communication. Parameters such as link reliability, energy efficiency, overall throughput, and network performance are all affected by cooperative transmission. Besides, nodes' operation in physical layer should be coordinated with higher layers, especially with medium access control (MAC), for reliable operation in time varying channels. Accordingly, designing a cooperative MAC protocol that supports node coordination, error recovery and dynamic link optimization is important. In this paper, the most well-known cooperative MAC protocols are classified based on their channel access strategy into two groups: 1) contention-based and 2) contention-free schemes. At first, the preliminaries, constraints, and requirements for designing effective cooperative MAC protocols are illustrated. Then the current state-of-the-art cooperative MAC protocols are surveyed by benchmarking their scheduling schemes, characteristics, benefits, and drawbacks, in line with the suggested taxonomy. The cooperative MAC protocols are classified and analyzed based on their application and network utilized into five subsections, including vehicular networks, cognitive networks, multi-hop protocols, cross-layer protocols, and network coding-based protocols. Finally, challenges, open issues, and solutions are considered, which may be used in improving the available schemes or designing more reliable and effective cooperative MAC protocols in the future.