I’ve had two main areas of interest in my IT career. Professionally, I’ve been a network guy. Designing, building, and supporting IP networks is what pays my bills. On the other side, I’m a Unix geek. Building, tinkering, and hacking code on Unix systems and related open source software has always been fun and challenging for me. Recently I was reflecting on my career and realized that my Unix and open source experience has played a big role in my career as a network engineer. Here’s some of the ways I believe network engineers can benefit from Unix experience.
Instantly familiar with Unix servers – In the larger, more mature environments there’s typically Unix systems that exist to support network operations. From trusted hosts/jump boxes to syslog and RADIUS/TACACS servers, Unix is typically the platform of choice. When coming into an environment like this, where others would face a learning curve in dealing with these systems, network engineers with Unix knowledge are able to start using them right away with little effort. Additionally, being familiar with daemons such as syslogd, tftpd, radiusd, etc, makes it really easy to start using these tools in support of the network. Whereas other network engineers likely stop learning about the Unix systems once they’ve learned how to login and do essential tasks only, a Unix background allows the engineer to swiftly navigate through the system and leverage the tools and services that are there to do a better job of maintaining the network.
Leg up in understanding Unix-based network operating systems – From Arista’s EOS to Juniper’s Junos, lots of network operating systems can trace their roots back to open source Unix. Sure they all have their own CLI shell that mostly hides the hard, Unix-y center, but underneath it’s still there. Being able to understand process management, memory management, file system mount points, heck, even the root user and what it’s capable of gives a network engineer an immediate advantage on these OSes even though they might not have seen them before.
Scripting and automation – Part of Unix culture is being able to create scripts and bits of code to help administer a system or automate a repetitive task. Those ideals are really valuable in the networking world too. Having the ability to create scripts which help manage network devices makes a network engineer more efficient and all but eliminates the likelihood of human error. Knowledge of PERL, shell scripts and even PHP enables the creation of tools for doing bulk config changes, mass backups, and automated reporting. This enables an engineer to concentrate on high-value tasks such as building out the network rather than tedious, low-value (but still important!) tasks.
Hands-on experience with ports, packets, and protocols – Considering that Unix is a very network-centric operating system, it’s very hard to learn Unix and not pick up network knowledge at the same time. Learning what a TCP/UDP port is, understanding how sockets are opened and closed, even something very simple like memorizing the TCP/UDP port number of common services (Pick a random port number and ask a Unix person what it’s used for. I bet they know the answer) are all byproducts of working on Unix systems.
Most Unix systems have at least one network sniffer installed (tcpdump, Wireshark, etc) which makes them easy to play with and learn about. They also give you experience troubleshooting bits on the wire and help to visualize how multilayer network models (like the OSI model) work in practice. Sniffer experience also helps drive home the theory of how certain protocols work such as TCP with its 3-way handshake; nothing breeds understanding like seeing it in action, or better yet, troubleshooting it. Having quick access to a sniffer on a Unix system makes it really effortless to pick it up and start using.
Most Unix systems also come with some sort of firewall software. Cutting your teeth on these firewalls can gain you valuable experience and knowledge in understanding traffic flows, writing firewall policies, and further understanding of the TCP 3-way handshake, windowing, and sequence numbers. That knowledge will help you in both managing enterprise firewall systems and talking with security/firewall teams in a language that they understand.
Lastly, since Unix boxes are able to run just about every network service under the sun — ftp, smtp, dns, dhcp, tftp, www, ntp, snmp, various databases, and so on — it’s convenient (and dare I say fun??) to play with these tools and gain experience and knowledge of these services and application layer protocols. This experience is invaluable when it comes to troubleshooting issues in a production environment because you’re able to understand how the service works right from the lowest network layers all the way up through the stack to the application layer. This understanding combined with firewall experience can be a killer combination when it comes to provisioning and troubleshooting.
Professional advancement – So far I’ve talked only about the technical and knowledge benefits of being a network engineer and Unix geek but there’s a whole other aspect: career advancement. Unix experience allows you to set yourself apart from others by solving problems they can not, bringing value to your team and department by way of writing scripts and tools, and demonstrating deep understanding of ports, packets, and protocols. By standing out from the crowd you make youself more valuable to your employer which increases your job security and also your chances of promotions, raises, etc. WIN!
Summary – Although I didn’t realize any of these things at the time they were happening, I can see it now looking back. Unix has made me a better network engineer and I believe all network engineers would benefit from a moderate level of Unix experience. These two seemingly unrelated areas of skill and knowledge are actually more related than they first appear and can be mutually beneficial to those that claim both as part of their overall skill set.