# Optimization Algorithms in SDN: Routing, Load Balancing, and Delay Optimization
## 2 State of the Art  
The SDN-controlled networks have to perform in the data plane many functions which are similar to those found in traditional IP networks. The major differences consist in centralized control (by the SDN controller) and the concept of SDN flows installed by the controller in the data plane forwarding elements; this may be executed in provisioning style, or on demand (i.e., a novel packet coming to an SDN forwarder/switch/router interface does not find any match with a previously installed flow. In this case, the incoming packet is sent to the controller on the control channel, via, e.g., OpenFlow protocol. Then, the controller will decide what to execute for this incoming packet: installing a new flow, maybe dropping the packet, directing the packet to an output, etc.). Therefore, the network layer's traditional functions must also be enabled in an SDN-controlled network. Examples are route/path computation, load balancing, QoS procedures (e.g., finding a route which satisfies certain QoS constraints), security-related functions, and so on. Note that in the case of multi-metric paths, or in large networks, the mathematical route-finding task may become a NP-hard problem having a high degree of computation complexity. In such cases, some heuristic algorithms can be chosen, and they might perform more efficiently than the traditional algorithms. Actually, one may select a class of algorithm among the following:  
Exact algorithms: They guarantee that the optimal solution is found if sufficient time and space are allocated. There are many traditional algorithms included in routing protocols which are well known, e.g., distance vector algorithms (implemented and found in RIP, AODV, etc. ), or link-state algorithms implemented in Open Shortest Path First. Generally, the exact algorithms cannot solve NP-hard problems in polynomial time for some classes of problems; there may exist an algorithm that solves the problem instances in a reasonable time. Heuristics algorithms: They typically find relatively quickly feasible solutions sufficiently \"good\". However, there are no guarantees about the solution quality, it can even be \"bad\". The heuristics are tested empirically; based on these experiments, comments about the quality of the heuristic can be made. Heuristics are typically used for solving real-life problems (speed and ability to handle large instances). Metaheuristics provides general frameworks for heuristics that can be applied to many problem classes. High solution quality is often obtained using metaheuristics. Approximation algorithms: They are a special class of heuristics that provide a solution and an error guarantee (e.g., one method could guarantee that the solution obtained is at most k times more expensive than the best solution obtainable). Although in the literature we find articles and papers that addressed the research of various algorithms that can be applied to SDN networks for the improvement of various performance and security metrics, we are not aware of any papers that would have addressed the multitude of algorithms described in this paper in a general way. For example, in [1], load-balancing algorithms were presented with an emphasis on the Joint Load-Balancing Algorithm. The authors used a Dynamic Server Load-Balancing Algorithm combined with the Hybrid Routing Algorithm to select the best path to the selected server. Another work of interest is represented by [2], in which the authors reviewed Traffic Scheduling and management algorithms based on intelligent algorithms. The paper presented in [3] represents a comparative analysis of various research presenting the characteristics of the load-balancing technique, although it does not clearly exemplify how the algorithms can be used in the context of SDN.