Software-defined networking (SDN) is an approach to computer networking which evolved from work done at UC Berkeley and Stanford University around 2005. SDN allows network administrators to manage network services through abstraction of lower level functionality. This is done by decoupling the system that makes decisions about where traffic is sent (the control plane) from the underlying systems that forwards traffic to the selected destination (the data plane). SDNs shift some of the complexity of developing network protocols from hardware to software. The main idea is that the hardware (switch) implement simple forwarding rules to either drop packets, forward to another switch, or forward to the controller. The controller is a general program implemented in software which reacts to messages from the switches by changing the forwarding rules. SDNs achieve scalability by installing enough rules to prevent frequent needs to forward packets to the controller.
This workshop will allow the students to experience with building software defined networks. The student will implement three basic network features on top of SDNs. The student will start by learning the tools and basic Phyton SDN programming.
The attendees are advised to learn about SDNs using the following references:
Here is an initial description of some projects. More will be offered later.
Create a network router over OpenFlow devices in a large dynamic network with sub-nets and VLANs.
Implement a dynamic load balancer according to current traffic status. An advanced feature might be to turn on\off server Virtual Machines when traffic is very high/low (requires interaction with the visualization platform)
Implement a stateful firewall with a configurable policy. It should be able to enforce policy even when a host changed its position in the network.
Build a controller over OF switches to enable a reliable robust and efficient multicast video streaming across the network. The network contains: video streamer servers and clients. The controller should route the efficiently the video stream from the servers to the clients. The controller should be able to new servers, duplicate servers (servers providing the same data), new clients, server failures etc.
TBD