When IT novices begin to learn networking fundamentals, the first step is always the hardest.
Because of technology's prominence in society, it's easy for novices to assume they know a great deal about technology's operations -- like how computers work or how the internet functions -- when, in fact, they have barely scratched the surface. For those who want to know more but don't know where to start, taking time to study the internet or networking fundamentals piece by piece is the easiest way to begin, author and software professional Matthew Justice said.
In Justice's book, How Computers Really Work, readers can take that first step and explore everything from computer hardware and software to learning networking fundamentals, which are the foundational aspects of computing.
Editor's note: The following interview was edited for length and clarity.
When you began to learn networking fundamentals, which aspect was the most difficult?
Matthew Justice: The most difficult aspect would be understanding how you get from low-level aspects of how devices physically connect to the network up to the software stack and how software interacts with the network. You look at a network as a layered model, and I didn't understand any of that. So, understanding hardware works this way, software works that way and filling in the dots between those two helped me understand a lot about the network.
What helped me understand it better was being able to see the data being sent over the network. The first time someone showed me a network protocol analyzer, I looked at the bytes being sent over the network. Being able to interpret that in a meaningful way, you realize it's not magic -- it's a system designed by humans. It works because people agreed we're going to make it work this way.
As I moved into different areas of my career, the network was often a more important part of what was going on. It wasn't uncommon for software engineers or IT folks focused on other areas to not know the nuts and bolts of the network. And that was OK for a lot of them to do the basics of their jobs, but when something goes wrong with the network and your software gives you an error outside your control, you have to look at the network itself.
Having some fundamental understanding of how networking works is super valuable anytime you troubleshoot a software problem that has to do with the underlying network.
What common things do people generally misunderstand about the internet and networking?
Justice: People tend to conflate the internet and networking in general. If you're connected to a network, people assume you're connected to the internet, [but] they're not the same. You can have networks that are not part of the internet. For most people, that's not a meaningful distinction because the only reason they want to be on a network is to be on the internet. But, for someone troubleshooting or setting things up, it's important because you could have a perfectly good connection to the local network without an internet connection.
A general lack of understanding in recent years is where local computing begins and ends versus remote computing on the internet. You use an app or software, and some things are happening on the internet, and some things are happening on your device. People don't often understand the distinction of what happens locally versus what happens remotely.
And that's intentional. People writing software don't want people to have to think about that, but it's a problem when something breaks, and people don't understand why. It's hard for people to understand what they can do offline. A lot of times, people view their devices as windows to the internet primarily when, in fact, your device can do a lot offline. But it's getting harder because more software is designed with the understanding that you're online all the time.
What common questions do you get about networking fundamentals, such as network protocols?
Justice: When I worked as a software engineer, I was also a manager interviewing software engineers. A lot of times, I asked questions about networking to see how deep people could go with their understanding of the network stack.
People tended to understand things in name only. They understood computers have IP addresses; they may know they have MAC addresses. But [then I'd] start asking, 'Walk me through exactly how that works. You connected a computer to a network; how does it get an IP address? How does it communicate with a remote server?' They knew certain things were in place but didn't understand the interrelationship between them and the order of operations things need to occur in for communication.
So, it's good to know you need an IP address, but what if you don't have one? Why might that be? What can go wrong? People had gaps in their knowledge about how different things work together and especially what to do when they don't work together. How would you begin troubleshooting it? There's often an expectation that it just works. If it doesn't, then it's difficult for people to know where to begin.
And, at least on the software engineering side, people have a decent understanding of the application layer protocol because that's what they work with. If you're a web developer, you transmit stuff over HTTP, and you get that because that's your job to understand. But, once that application layer protocol is handed off to a lower-level protocol -- TCP, then to IP, then to a link layer protocol -- that's where people get fuzzy because, usually, it just works and the operating system handles it for you.
In fact, most development doesn't require any coding related to those protocols because APIs are written that allow you to send and receive HTTP, for example, and take care of all that for you. It's good that people aren't having to come up with their own implementation of how to talk to TCP/IP, but again, when it breaks, you need to know how it works.