The function of routing in communication networks is to determine a consistent set of local switching decisions at all the nodes such that data can be transported from any source to any destination. In general, routing algorithms can be loosely classified in many ways, for example, unicast versus multicast, centralized versus distributed, proactive versus reactive, single-path versus multipath, and so on, but in practice, routing algorithms can fall in between such simplistic classifications whose discussion is beyond the scope of this chapter. Furthermore, routing is frequently cast as an optimization problem, which can be either static or dynamic in nature (although in some instances routing can and is formulated as a constraint satisfaction problem).This chapter will concentrate on a dynamic, unicast, proactive, link-state routing algorithm only. The aim of the algorithm is to achieve a scalable approach to the representation and exploitation of path diversity in communication networks. By "scalable" we here mean that the number of message updates needed to support adaptation to changes in the state of the network scales well (i.e., as a polynomial) with respect to the number of nodes and links in the network. After a brief critique of wellestablished routing algorithms and their application to communication networks, we discuss the desirable properties of adaptive routing protocols. We then introduce a graph-theoretic framework on which a dynamic routing protocol can be constructed in a scalable fashion. This framework is a recursive abstraction of the physical network topology that can be also employed in analyzing the network path diversity, as well as the applicability of various types of dynamic routing protocols to a network belonging to a specific topology class. Finally, we present our routing protocol, called resilient recursive routing, which is built upon this framework, and demonstrate through simulations that it meets the desirable properties of adaptive routing protocols identified earlier.