Up to this point, we have learned about some of the crucial techniques and principles that help 5G networks significantly improve their performance and help keep some of the ambitious promises that have been made on 5G's behalf. But as it happens, most of those techniques were closely tied to the air interface or the wireless aspect of the functionality. There are other features and improvements as well that are adopted by 5G networks that make 5G networks, in general, more flexible, scalable, and that indirectly also ties in to some tangible performance improvements. Those are some of the broader networking principles that we are going to learn about now. Now, 5G network architecture, although it has many commonalities with network architectures of previous generations, follows certain fundamental guiding principles that are different from the legacy generations, and although the fundamental structure remains similar, once you take a magnifying glass to that generic structure, that is where these key principles come into picture and they have their own ways of making a 5G network deployment different and better as compared to the previous generations. As always, there are multiple principles, but let's try to focus on some of the key principles over here. As you may have guessed, if you eyeballed the next few points, it is mostly about separation of powers, so to speak, as they like to call in political circles, separation of powers between two different parts or entities of the network that were here before, integrated very closely. The first principle is independence of software from hardware. Legacy technologies, be it 4G or Wi-Fi. Most network components are an integrated box, that box is designed and implemented to perform a specific functionality and that box comes with its own hardware and software. Imagine a Wi-Fi router that we all have at home, you just buy that router and it comes with its built-in hardware and software. That kind of integration is okay for a simpler system like Wi-Fi, but as networks get more sophisticated and use cases and service classes expand and become more aggressive, it turn so that that model of tight software and hardware integration doesn't work very well. Imagine a very familiar example. Imagine your cell phones from maybe 15 years ago before the advent of the smartphone, you would have the software and hardware of the phone coming from the same vendor, and imagine how limited the functionality was. On the other hand, imagine the smartphones of today, wherein the hardware on the phone comes from one manufacturer and applications that run on top of the smartphones come from a variety of different software developers or vendors. Imagine how flexible and how versatile the smartphone ecosystem is as compared to the legacy cellphone ecosystem, wherein there was tight integration of software and hardware. This is one small and simple example of what separation of software and hardware can buy you; it is, among other things, flexibility of operation and deployment and with flexibility comes scalability and efficiency of operation. Another point of separation or decoupling is that of between compute and storage resources. Compute resources are the network servers that are responsible for performing high-power computations, for example, encryption, authentication, user management, etc., whereas storage is anything that stores data for the long-term; imagine a video server, an image server, or even a generic database that may be operating within the network premises. Until the previous technologies, you had compute and storage resources on the exact same machine, which may not be problematic until then, but now that use cases and applications are getting more versatile, diverse, and more aggressive in terms of the requirements, this may not fly anymore. Why is it so? Imagine once, again, an everyday example. Let's say that you have a laptop computer allocated to you by your work and you utilize that laptop not only for computational functionalities, let's say you run a specific software that will be the computational functionality and associate it with that software, you store all the data on your same laptop computer, which is okay if your laptop works fine. But what if one day your laptop breaks down, then not only have you lost access to your computational responsibility, but your storage functionality as well because the only machine that had aboard the functionalities is out of operation. Imagine if such a failure occur in a live, a cellular network that is supposed to handle millions of subscribers, you cannot afford to have such a single point of failure. That is where separation of compute and resources buys you certain redundancy, so to speak, in that, imagine the same laptop example, but in this case, you had all your data backed up on a cloud somewhere. What you can do is just borrow another laptop, access your cloud repository or Internet and download all your data from the cloud and start working on that new laptop as if nothing happened. This is the power of separating compute and storage resources, compute resource meaning your laptop, and in this case, storage resource, meaning your cloud. It gives you protection from real-time failures that are bound to occur in any real networks and by doing so, it offers your system some unprecedented amount of resiliency that otherwise wouldn't be possible. The third point is about separation of user plane and control plane. I hope at this point we all know what user plane is. It is application data, what you see on your phone whereas control plane is under the hood background signaling that goes on in order to set up a user plane data session. For the reasons that are very similar to the couple of points that I made earlier, separation of user plane and control plane also has its undeniable and unprecedented benefits. All of these points, as we will see shortly, ultimately lead to the 5G design be cloud-compatible, in that, up to current cellular generations, operators have mostly deployed all the core network functionalities on dedicated server boxes and those servers are resided on the operator premises. But as we are going to see shortly because of certain modifications 5G makes, all the 5G core network design becomes so flexible and so generic that it can be deployed in event, not just on the operator premises, maybe somewhere in the cloud. That is what makes the general 5G design cloud-compatible and with cloud deployment come all the benefits with respect to flexibility, ease of deployment, scalability, and cost-effectiveness. These principles, although they sound theoretical, are actuated by some of the networking fundamentals that have existed for quite some time, they are not exclusive to 5G. But nonetheless, these existing network fundamentals help us implement these theoretical principles in reality. Those networking principles being network slicing, software-defined networking, network function virtualization, and mobile edge computing. In upcoming few slides, we are going to look at some of the high-level details of each of them.