This course introduces software defined networking, an emerging paradigm in computer networking that allows a logically centralized software program to control the behavior of an entire network.
Separating a network's control logic from the underlying physical routers and switches that forward traffic allows network operators to write high-level control programs that specify the behavior of an entire network, in contrast to conventional networks, whereby network operators must codify functionality in terms of low-level device configuration.
Logically centralized network control makes it possible for operators to specify more complex tasks that involve integrating many disjoint network functions (e.g., security, resource control, prioritization) into a single control framework, allowing network operators to create more sophisticated policies, and making network configurations easier to configure, manage, troubleshoot, and debug.
This course will cover 8 modules (one per week).
Module 1: History and evolution of SDN
Module 2: Control and data plane separation
Module 3: Control Plane
Module 4: Network Virtualization
Module 5: Data Plane
Module 6: Programming SDNs
Modules 7: Verification and Debugging
Module 8: Use Cases and Looking Forward
Students should have taken at least an undergraduate-level networking course and have programming experience in Python. Experience with virtual machines and other virtual networking environments may also be useful.
There are some useful videos available online; these might be a good starting point for many people:
The course will consist of a series of video lectures, each about 10 minutes in length.
Assignments for the course are lab-based programming assignments, many of which build off of the Mininet software developed at Stanford University, which can run SDNs in emulated environments on networks of virtual machines.
resources will I need for this class?
We will use the mininet programming environment for many of the assignments for this course. You will want to develop some proficiency setting up virtual networks in this environment. In the first portion of the course, we will provide simple mininet tutorials, so it should be fairly easy to come up to speed. You should, however, have proficiency with basic networking concepts and facility with configuring networking in Linux environments.
What is the coolest thing I'll learn if I take this class?
You’ll learn how to use software programs to perform varying and complex networking tasks, ranging from usage management and resource control to implementation of more complicated network security policies.
Does Princeton award credentials or reports regarding my work in this course?
No certificates, statements of accomplishment, or other credentials will be awarded in connection with this course.