In the current Internet architecture, functions such as addressing, routing, and forwarding are entangled. Among other consequences, this makes it difficult to modify one without affecting the others, and obscures the role of policy at various places in the architecture. This paper considers a network layer designed as a set of separable component mechanisms that work together to provide a best-effort datagram service. Our thesis is that separating concerns makes the architecture more flexible and robust. After presenting the functions that make up the recursive (hierarchical) routing and forwarding service, we discuss the initialization process. The separation and delegation of functions, along with the use of flat, topology-independent identifiers, allows the architecture to be self-configuring as much as possible, leaving the components whose function is affected by policy to be configured.