Welcome back. In this module we'll look at network virtualization. The module will have three lessons. The first will look at what Network Virtualization is and how it's implemented. The second lesson we will look at some examples of network virtualization, and various applications for it. And finally we'll look at virtual networking in Mininet. We'll see how Mininet implements network virtualization, and we will get a chance to play around with it a little bit in the Mininet environment. There will also be a quiz and a hands on assignment in Mininet as part of this module. So let's jump in and start exploring this first question. What is network virtualization and how is it implemented? So simply put, network virtualization is a particular abstraction of a physical network that allows the support of multiple logical networks running on a common shared physical substrate. In other words, you can have a common set of physical routers, links, and so forth. That support multiple logical network topologies on top of that physical infrastructure. Another way of viewing it is as, as, as a container of network services from layer two all the way up to layer seven, that can be instantiated on some underlying physical platform. There are various aspects of the network that can be virtualized, and together these technologies support network virtualization. So, on one hand, the nodes need to be virtualized. One technology for virtualizing those nodes is with virtual machines, and we'll look at various examples of virtual machine technology in this lesson. The links themselves also have to be virtualized, and a common way of doing that is with tunnels. And we'll look at various ways of doing that as well. Finally, there are other parts of the network that also can be virtualized such as storage and so forth. And we won't really look at those in this lesson, but they are certainly relevant to network virtualization in general. So here's a pretty good picture describing the analogy of network virtualization. On the left hand side, we have sort of a more conventional virtualization environment which you may be familiar with, which is the virtual machine environment. In this environment, the machine's physical CPU, memory, and IO are essentially abstracted by a hypervisor on top of which multiple virtual machines can run. Each of these virtual machines essentially gives the appearance of running on a dedicated platform, when in fact the hypervisor sitting below the virtual machines is responsible for ensuring isolation and resource control. Now, in the same way that a machine can be virtualized, a physical network can also be virtualized. So, similarly to the hypervisor which virtualizes a single machine, a virtualization layer can provide support so that multiple virtual networks can coexist on top of a single, shared, physical network. And similarly, that virtualization layer is responsible for insuring isolation, and proper resource sharing between these distinct virtual networks. So what's the motivation for network virtualization? Well, one of the original motivations was, The ossification of the internet architecture. And there's lots of work on overlay networks in the 2000s in networking that essentially was trying to make changes to network functions by yielding overlay networks on top of the underlying IP infrastructure. Acknowledging the fact that it was rather difficult to change the underlying IP infrastructure. In the course of doing this work, many people began to realize that a one size fits all architecture is, is actually rather difficult. It's very difficult to design a new network that would be everything to everyone. So the motivation then was to provide some kind of infrastructure that allowed network technologies to evolve so that once that platform was deployed. The technologies could evolve on top of that platform independently of the underlying infrastructure. And in particular the motivation for network virtualization was to create some kind of substrate where 1,000 flowers can bloom. So you could have one particular experimental virtual network running aside the production network, and these virtual networks need not interfere with one another. So these days the promise of network virtualization is significant. One particular promise is rapid innovation, services could be delivered at software speeds. Another is that it makes possible new forms of network control. Since network virtualization makes it possible to instantiate multiple logical networks on top of a single physical network, the ability to deploy and instantiate multiple different kinds of networks makes it possible to explore different kinds of control as well. A third promises vendor choice. So because the logical network is decoupled from the underlying physical infrastructure, in some sense it matters less what the underlying physical infrastructure is in terms of vendors and so forth. Because all the magic is happening at higher layers of extraction. Network Virtualization also provides the promise of simplified programming and operations by allowing the network operator to see the network through a logical abstraction, rather than having to tinker with the details of the underlying physical network. So, in looking at the promise of network virtualization, it's important to recognize a distinction because many of these promises are sometimes touted as the promises of SDN. But, it's important to recognize that SDN itself does not inherently abstract the details of the physical network. Essentially what it does is separate the data plane from the control plane. But network virtualization is the technology that provides the abstraction, so that multiple logical networks can be instantiated on top of that single physical network. So related topic is Virtual Private Networks, which you may have heard of, but it's a, it's a quite a different thing from network virtualization or virtual networks. Virtual private networks are essentially virtual networks that connect distributed sites. So, for example, if you're in an enterprise or company, you may use a virtual private network, or a VPN, to securely tunnel back to different parts of that enterprise network. But, in contrast to the types of network virtualization that we're talking about in this course, VPNs are not designed to let multiple custom architectures run on the same underlying physical infrastructure. So, for example, it would be very tough to run an IPv4 network in parallel with some kind of next generation non-IP network, for example, on conventional VPNs. Virtual networks, on the other hand, are explicitly designed to enable and support that kind of heterogeneity. Let's now have a quick look at some of the design goals of virtual networks. One of the design goals is flexibility. That is, virtual networks should be able to support many different kinds of topologies, routing and forwarding architectures and paradigms, and they should be able to allow each virtual network to be configured independently from the others. Virtual networks should separate policy and mechanism as well, thereby enabling better manageability. And a good virtual network's platform should maximize the number of virtual networks that can co-exist on the same underlying physical substrate. Network virtualization technology should also isolate both the logical networks that are running on top of the shared physical substrate, as well as the resources to ensure that no single virtual network can take more than it's fair share of the underlying physical resources. Or otherwise interfere with resource allocations of other virtual networks. Virtual networks should be programmable. That supports the goal of customizability. And they also should support many different underlying technologies. The idea being that a logical network in some sense should be unaware, or not need to be aware of the underlying physical infrastructure that supports that logical network. So building a virtual network requires, of course, the technology to build virtual nodes or machines. One particular approach for doing that is the Xen Virtual Machine Monitor. Another is User-Mode Linux, with something called network namespaces. Network namespaces were originally an add on to the Linux kernel and they're now part of the main line Linux kernel. The idea with network namespace is, is essentially that each container gets it's own view of the network. It's own network stack. IP addresses, MAC addresses, interfaces, and so forth. KVM is another virtualization technology. And there's certainly others as well. VMWare of course makes their own commercial virtual machine technology. And Virtual Box is one that we'll use in this course. Let's take a closer look at one example virtual machine environment, Xen. So, in this picture, which describes the Xen architecture, you can see that Xen essentially allows multiple what are called guest operating systems to run on the same underlying shared physical hardware. So the hardware here, of course, which is processor memory, the physical network interfaces, and so forth. Is then abstracted away by the Xen hypervisor. And Domain0, which is shown over here on the left, essentially runs the control software that arbitrates how these other guest OSs gain access to the underlying resources. We also need a way of constructing virtual links. And there are many possible ways to do that, all essentially based on different types of tunneling technology. One approach is to take Ethernet frames that are generated by virtual nodes and encapsulate those Ethernet frames in IP packets that may travel multiple hops over an IP network. So, two virtual machines or virtual nodes, have the appearance of being connected by a point to point, layer two Ethernet link. But are in fact sending the frames over a multi-hop IP network. There are other approaches to generating or constructing virtual links, such as VXLAN. Now, each one of these containers or virtual nodes also has virtual interfaces, here denoted as ZTON. Which have to be connected to the physical interfaces on each of these physical network nodes. And that requires some kind of virtual switching technology. The trellis architecture shown here, devised something called a short bridge which was essentially a fast, mechanism for taking Ethernet frames inside a virtual machine, and passing them to the physical interface on the node that was hosting that virtual machine. But, since this architecture was proposed, there have been other technologies to do this. One is Open vSwitch. Now as I mentioned, the problem here is to network these virtual machines together over a Layer 2 topology. VINI or Trellis use shortbridge, which is an extension of Linux bridging. The Open vSwitch basically performs a similar set of glue functions, but also the Open vSwitch can be configured remotely with control protocols like OpenFlow or JSON. So in summary, the motivation for virtual networks is flexible and agile deployment. Thereby enabling rapid innovation, independence from vendors, and scale. There are various technologies that are requirements to support for virtual networks including virtual nodes, links and switch. And we've discussed some of the technologies that have been developed to support each one of those components of a virtual network. We also talked about the distinction between software-defined networks, and virtual networks. So let's review that briefly. SDN effectively separates the data plane and the control plane. Whereas, virtual networks separate logical and physical networks. So, SDN's are in some sense a useful tool for implementing virtual networks, but the two concepts are certainly distinct from one another.