Routing is the process of selecting a path between two hosts to offer them the possibility of communication. The importance of routing stems from the fact that it is the key component for every communication network with multi-hop paths. Routing protocols are challenged with establishing and maintaining multi-hop routes in the face of mobility, bandwidth limitation, and power constraints. Multicast routing provides a path between specific groups of nodes, it allows for one-to-many, many-to-one, or many-to-many communication. Multipath routing provides multiple paths between mobile hosts and allow mobile hosts to use these paths to best increase their network performance through aggregating the resources of multiple paths. Additionally, multipath routing protocols have great potential to make better use of bandwidth and energy.