All networked computers, even workstations, need a routing table in order to direct network traffic to the appropriate location. Standard Linux networking tools, like ifconfig and route , are quite adequate for setting up the routing table in a workstation, a typical server, or even a low-end router. More advanced routers, though, need more sophisticated tools. Linux provides these in several forms. Because the Linux kernel is ultimately responsible for routing, some routing configuration tools require special kernel routing options to be active, so you should check your kernel configuration to be sure it has the tools you need. The iproute2 package is a popular one for providing several advanced routing options, including the ability to manipulate multiple routing tables or set up a QoS scheme to guarantee certain users or networks a particular amount of bandwidth. Assorted routing protocols, and their associated Linux servers, give flexibility in allowing routers to communicate with each other, transferring data on the networks for which they route in order to allow a router to determine the optimal route to any given network.