It has been said that building the Internet solved the world’s most complex engineering problem to date. The design and engineering of the Internet started well over 50 years ago. It has been continuously improving and evolving over the past 50 years and will continue to evolve in the future.
The Internet now connects billions of computers using many thousands of routers and link-level connections. The Internet is so complex that it is never fully operational, The Internet is less about being “perfect” and more about adapting to problems, outages, errors, lost data, and many other unforeseen problems. The Internet is designed to be flexible and adapt to whatever problems are encountered.
In order to build an overall solution that works at scale, it was important to break the Internet engineering problems down into four distinct layers:
- The Link/Physical layer includes all of the complex engineering required to move data across a single “hop”, whether the hop is a wireless WiFi, wired Ethernet, fiber optic, or satellite connection.
- The Internetwork Protocol (IP) layer is how data is routed across a series of hops to get quickly and efficiently from one of a billion source computers to any of a billion destination computers. The IP layer dynamically adjusts and reroutes data based on network load, link performance, or network outages. While the IP layer is highly reliable and fast, at times it loses or even throws away data. The IP layer is not responsible for insuring the overall reliability of the network. It just moves the data the best that it can.
- The Transport layer compensates for any imperfections in the IP or Link layers. The Transport layer makes sure that any lost packets are retransmitted and packets that arrive out of order are put back into order before being passed on to the receiving application. The Transport layer also acts as flow control between the sending and receiving applications to make sure that data is moved quickly when the network is fast and the links are not overloaded, and to slow the transfer of data when using slower or heavily loaded links. The data flow and rate limitation in the Transport layer allow the Internet to continue to function smoothly even when it is heavily loaded.
- The other three layers make the use of the network very simple for the Application Layer. An application can make a network connection and send/receive data on that connection with just a few lines of code. By making the use of the network simple, applications can focus on solving the enduser problems they need to solve. Because it is so easy for applications to use the network in new and different ways, we have seen the emergence of a wide range of highly innovative applications that work without any changes required to the Internet protocols.
Without breaking the problem of engineering and building the Internet into these four distinct layers, it would be far more difficult to build and deploy ever-improving versions of the network. And if every single application needed to be fully aware of all of the complex details required to use the Internet, it would greatly limit the richness and diversity of the networked applications that we have today.
It is amazing to realize what has been accomplished in building the Internet over the past 50 years. But in a way, we have only just begun the engineering journey of building networked applications. It does not take much to imagine an Internet where every light switch, lightbulb, refrigerator, table, automobile, roadway, flying drone, and chair has an Internet address and they all want to communicate with one another. New engineering issues will have to be solved, and perhaps even the four-layer network model will need to evolve to meet these new engineering challenges.
But just like brilliant engineers designed and evolved network protocols to move from hundreds of network-connected computers to billions of network-connected computers, our present and future engineers will certainly solve the problems and challenges we will face as the network evolves to connect trillions of computers.