# Quality of Service and Congestion Control in Software-Defined Networking Using Policy-Based Routing
## 2 Related Work  
The flexibility and programmability of SDN have introduced new ways to address traditional network challenges, including congestion control and QoS requirements. SDN offers a global view of the network, enabling more informed decisions regarding congestion control and QoS. However, most networks rely on end-host-based congestion control,which is not fully optimized for SDN because the SDN controller primarily interacts with forwarding devices and not the end hosts. To bridge this gap, several solutions have been proposed. For instance, OpenTCP, introduced in [7], installs lightweight agents on end hosts to modify TCP sessions dynamically based on the global network view provided by the SDN controller. This work has inspired various other solutions in which network-wide information is communicated to the sending host to adapt TCP for congestion alleviation [8; 9; 10]. However, these approaches require modifications to the existing SDN paradigm to allow the controller to communicate with end hosts. Moreover, these solutions focus on congestion control by reducing transmission rates, which benefits overall network performance but may not cater to specific flows. A queue-length-based congestion control mechanism is proposed in [11; 12], where the controller is informed of queue length status via OpenFlow protocols. When congestion is detected, the controller adjusts the TCP ACK receive window size for elephant flows in its flow table, prompting the sending host to reduce its transmission rate. Similarly, the authors in [13] add queue length information to the ACK packet, notifying the TCP sender to adjust its transmission rate accordingly. While these mechanisms reduce congestion and packet drops, they do not guarantee low-delay or stable jitter for real-time network flows. In addition to host-based QoS and congestion control solutions, several researchers have explored adapting existing routing protocols for SDN environments, enabling new opportunities for customizing these protocols. In [14], the authors developed RouteFlow, an IP routing service for SDN that uses network function virtualization to deliver traditional IP-based routing services within SDN. The authors in [15] demonstrated the efficiency of using RouteFlow for routing services in SDN, showing its resilience to both single and multiple link failures. Their evaluation of OSPF within RouteFlow revealed that it provides shorter failover times compared to legacy OSPF implementations. In [16], the authors proposed achieving near-zero switchover times by combining Multipath TCP (MPTCP) with SDN. The OpenFlow protocol, which supports meter tables for each flow entry, enables QoS and traffic engineering features like rate limiting, and facilitates faster switchover times than traditional IP routing. Similarly, [17] introduced Smart OSPF (S-OSPF) for congestion control, which manages congestion at edge nodes while maintaining traditional OSPF functionality at intermediate nodes. Although S-OSPF is a promising approach for SDN congestion control, it primarily addresses congestion at the network edges, leaving the potential for congestion between edge nodes unaddressed. An Inter-Domain Management Layer (IML) is introduced in [18], which decouples routing and policy control, aligning next-generation SDN systems with traditional BGP autonomous systems (ASes). While IML focuses on policy and flow control between domains, it does not explicitly address QoS. The existing work, as discussed above, ensures network performance for all flows without providing enhanced QoS for the flows of interest. Additionally, these solutions require the sending host to manage the congestion window based on network conditions communicated by the SDN controller and primarily address link failures by rerouting traffic along the available routes without determining a low-latency path. In contrast, our proposed approach does not involve the sending host to trigger any flow control.