NOX: Towards an Operating System for Networks
Natasha Gude
Nicira Networks
Teemu Koponen
HIIT
Justin Pettit
Nicira Networks
Ben Pfaff
Nicira Networks
Martín Casado
Nicira Networks
Nick McKeown
Stanford University
Scott Shenker
University of California,
Berkeley
ThisarticleisaneditorialnotesubmittedtoCCR.IthasNOTbeenpeerreviewed.
Authorstakefullresponsibilityforthisarticle’stechnicalcontent. Comments can be posted through CCR Online.
Categories and Subject Descriptors
C.2.1 [
Computer-Communication Networks
]: Network
Architecture and Design
General Terms
Design, Experimentation, Performance
Keywords
Architecture, Management, Network, Security
1 Introduction
As anyone who has operated a large network can attest,
enterprise networks are difficult to manage. That they have
remained so despite significant commercial and academic
efforts suggests the need for a different network manage-
ment paradigm. Here we turn to operating systems as an
instructive example in taming management complexity.
In the early days of computing, programs were written
in machine languages that had no common abstractions for
the underlying physical resources. This made programs hard
to write, port, reason about, and debug. Modern operating
systems facilitate program development by providing con-
trolled access to high-level abstractions for resources (e.g.,
memory, storage, communication) and information (e.g., files,
directories). These abstractions enable programs to carry
out complicated tasks safely and efficiently on a wide variety
of computing hardware.
In contrast, networks are managed through low-level con-
figuration of individual components. Moreover, these configu-
rations often depend on the underlying network; for example,
blocking a user’s access with an ACL entry requires knowing
the user’s current IP address. More complicated tasks re-
quire more extensive network knowledge; forcing guest users’
port 80 traffic to traverse an HTTP proxy requires knowing
the current network topology and the location of each guest.
In this way, an enterprise network resembles a computer
without an operating system, with network-dependent com-
ponent configuration playing the role of hardware-dependent
machine-language programming.
What we clearly need is an “operating system” for networks,
one that provides a uniform and centralized programmatic
interface to the entire network.
1
Analogous to the read
and write access to various resources provided by computer
operating systems, a network operating system provides the
ability to observe and control a network.
A network operating system does not manage the network
itself; it merely provides a programmatic interface. Applica-
tions implemented on top of the network operating system
perform the actual management tasks.
2
The programmatic
interface should be general enough to support a broad spec-
trum of network management applications.
Such a network operating system represents two major
conceptual departures from the status quo. First, the net-
work operating system presents programs with a centralized
programming model
3
; programs are written as if the entire
network were present on a single machine (i.e., one would use
Dijkstra to compute shortest paths, not Bellman-Ford). This
requires (as in [3, 8, 14] and elsewhere) centralizing network
state. Second, programs are written in terms of high-level
abstractions (e.g., user and host names), not low-level con-
figuration parameters (e.g., IP and MAC addresses). This
allows management directives to be enforced independent
of the underlying network topology, but it requires that the
network operating system carefully maintain the bindings
(i.e., mappings) between these abstractions and the low-level
configurations.
Thus, a network operating system allows management
applications to be written as centralized programs over high-
level names as opposed to the distributed algorithms over
low-level addresses we are forced to use today. While clearly a
desirable goal, achieving this transformation from distributed
algorithms to centralized programming presents significant
technical challenges, and the question we pose here is: Can
one build a network operating system at significant scale?
1
In the past, the term network operating system referred to
operating systems that incorporated networking (e.g., Novell
NetWare), but this usage is now obsolete. We are resurrect-
ing the term to denote systems that provide an execution
environment for programmatic control of the network.
2
In the rest of this paper, the term applications will refer
exclusively to management programs running on a network
operating system.
3
By centralized we allude to a shared memory programming
model. However, as we discuss in Section 3, different memory
locations may have different access overheads.
ACM SIGCOMM Computer Communication Review 105 Volume 38, Number 3, July 2008