## 5 Design Choices for OpenFlow-Based SDN
### Data Plane: Resilience  
Link or node failures are common in networking, and routing protocols are responsible for the recovery from network failures. Failure recovery is mainly classified by restoration and protection; the latter is often referred to as fast reroute. Restoration is provided by almost all network protocols, but generally requires some time until the network has recovered. Protection schemes provide backup paths that locally bypass failed network elements to minimize the packet loss and, in general, have to be activated within 50 ms. Thus, protection schemes are highly desirable. A variety of protection schemes exist on various network layers: optical networks often rely on ring protection; IP fast reroute [25] is usually based on shortest paths and encapsulation, and even protection mechanisms for transport layer protocols, e.g., multipath TCP [89], exist. However, protection schemes always require additional resources to be allocated in the network. Optical networks must reserve additional bandwidth on separate wavelengths, IP fast reroute requires additional forwarding entries in the devices, _etc._ Most importantly, additional forwarding entries can be crucial for OpenFlow networks, due to the fact that forwarding tables have a limited size. Thus, it is important to understand the restoration process in OpenFlow networks, as well as the options and advantages of protection schemes for OpenFlow. When an OpenFlow switch detects that a link has failed, it notifies its controller about the failure. The controller then takes action to reroute the affected traffic by installing different forwarding entries in appropriate nodes, so that the failure is bypassed. This has two major effects: (1) the restoration is delayed due to the necessary controller interaction and round trip time; and (2) causes additional load on the control plane. Since this may happen simultaneously with multiple flows, this may cause overload on the controller and heavily affect the network performance, especially with reactive flow management. The authors of [90] have analyzed OpenFlow in carrier-grade networks and also investigated the restoration process with OpenFlow. In their test setup, they measured a restoration time between 80 and 130 ms. They also emphasize that the restoration time will be a magnitude higher for large networks, and thus, protection schemes are required that mitigate the effect of the separated control and data plane. As an alternative, data plane resilience may be achieved by protection. A protection scheme implies that a switch can forward traffic affected by a failure over an alternative local interface. This minimizes service interruption and makes longer reaction times by the controller acceptable. Section 3.2.2 describes how such backup paths can be pre-established in OpenFlow networks. Backup paths require at least OpenFlow 1.1 and have to be installed in the OpenFlow group table. Each flow having a backup path must refer to a group table entry with the group type \"fast-failover\". The actions for the primary path are installed in the first action bucket of the group entry. The next action bucket describes the actions for the first backup path. Additional backup paths can also be installed in consecutive action buckets of the group entry. The switch will execute the first live action bucket, _i.e._, in the failure-free case, the primary path, and in the failure case, the first live backup path. In [91], two main contributions are made toward the protection for OpenFlow networks. The first contribution handles the liveness of ports, actions and action buckets. The OpenFlow standard states that the liveness of ports and links can be managed outside of the OpenFlow protocol. The authors use Bidirectional Forwarding Detection (BFD) to implement their protection mechanism. A BFD component is added to the OpenFlow switch, and it detects link failures in less than 50 ms and disables the port. Then, the switch activates the backup path defined in the group table entry.