Control plane component of the network layer is the network-wide logic that controls not only how a datagram is routed along an end-to-end path from the source to the destination host, but also how network-layer components and services are configured and managed.
The forwarding table is the principle element that linked the network layer’s data and control planes. It specify the local data-plane forwarding behavior of a router. And in this section, we will examine how those tables are computed, maintained and installed.
The controller interacts with a control agent(CA) in each of the routers via a well-defined protocol to configure and manage that router’s flow table. CA’s job is to communicate with the controller, and to do as the controller commands.
By “logically centralized” control we mean that the routing control service is accessed as if it were a single central service point, even though the service is likely to be implemented via multiple servers.
The goal of routing algorithms is to determine good paths from sender to receivers, through the network of routers. Typically, a “good” path is one that has the least cost. However, in real life scenarios, other factors might affect
A graph is used to formulate routing problems. The nodes in the graph would represent routers, and the edges would represent the physical links between theses routers. And when it comes to BSD inter-domain routing protocol (which will be studied later), each node will represent networks, and the edge represent direction connectivity(peering) between the 2 networks.
One way to classify the algorithms is to see if it’s “centralized”
Another way to classify routing algorithms is according to whether they are static or dynamic. In static routing algorithms, routes change very slowly over time, often as a result of human intervention(i.e. human manually editing link costs). Dynamic routing algorithms change the routing paths as the network traffic loads or topology change. It can be run periodically or in response to topology or link cost changes. While they are more responsive to network changes, they are also more susceptible to problems such as routing loops and route oscillation.
A third way to classify routing algorithms is according to whether they are load-sensitive or load-insensitive algorithm. In a load-sensitive algorithm, link costs vary dynamically to reflect the current level of congestion in the underlying link. If a high cost is associated with a link that is currently congested, a routing algorithm will tend to choose routes around such a congested link. Most of today’s algorithm are load-insensitive, as a link’s cost does not explicitly reflect its current or recent past level of congestion.
In such algorithms, all the network topology and all link costs are known and available as input. In practice, this is done by having each node broadcast link-state packets to all other nodes in the network. And this action is accomplished by
One classic example of link-state routing algorithm is the Dijkstra’s algorithm, and a closely related one is the Prim’s algorithm. It basically selects the nearest neighbor greedily and add that to the graph. The algorithm’s complexity is $O(logn)$ and to broadcast messages, it’s $O(n^2)$T h
When link costs are depend on traffic volume, route oscillations might occur too. That’s why people adapted to use hop count as eventual cost for edges.