In this blog series we've explored the core networking concepts you will encounter as a software engineer. I hope this has helped demystify networking concepts that you may encounter in your day-to-day work.

Please feel free to bookmark this post as an easy way to access the various posts summarized below:

  • In part 1 we explored why enterprise networking matters and how critical it is to something like an API call from a laptop
  • In part 2 we walked up and down the TCP/IP stack, understanding how data is encapsulated before being sent across the network
  • In part 3 we followed a packet across a number of networking devices, and explored the functionality of each device type.
  • In part 4 we explored enterprise network architecture and how multi-site deployments impact network design
  • In part 5 we took a closer look at IP addresses, reserved ranges, and subnetting. We also reviewed network address translation (NAT) and how it's commonly used
  • In part 6 we reviewed how virtualization impacted network design with the creation of virtual machines and container technologies
  • In part 7 we covered how cloud computing has impacted network design and the importance of understanding the shared responsibility model to create a scalable hybrid network architecture
  • In part 8 we reviewed how network design has changed to account for a more distributed world where the data center is not the central component. We also explored the growing role of identity in networking, and how modern solutions help enable the concept of "zero trust"

While we've covered a lot of ground, there is plenty more to explore about networking out there. As you've seen throughout the posts, the same core concepts hold, but implementations have shifted as new technology waves impacted the industry. Workloads are more distributed, and a solid understanding of networking will make you a more effective software engineer. Whether it's troubleshooting an application problem during an incident or understanding why an API call might be failing to reach a target service during development, the network is a critical component.

I was inspired to write this blog series because most software engineers starting at larger companies may not have taken a formal course in networking and usually haven't encountered something as complex as an enterprise network. Not everyone needs to specialize into being a network engineer, but a foundation of knowledge in the space will serve you well.