Networking knowledge every software developer should have

** WORK IN PROGRESS **

Dear Eleonora,

In the today’s world, where nearly everything is interconnected in some way, every software developer should have at least a basic knowledge of how networking protocols and connected devices work, especially if the software they are working on depends on them. This knowledge goes beyond just understanding what an IP address is or having a vague idea of how HTTP works. Software developers should have a comprehensive grasp of how different level of networking protocols work, how they interact and the implications this has within software development.

Now, what does it mean “knowing something”? The depth of understanding is the key factor. A too light knowledge is useless while overly detailed knowledge might be a potential waste of time. Why “potential”? Because deep knowledge is never truly useless but time is not infinite. Knowing every detailed nuances of every network protocol would likely be a waste of time.

So, which is a good level of knowledge? How can I understand if my knowledge is enough? In my opinion, the turning point is when you are able to explain what is happening beneath the surface without skipping any layers or macro-steps. And for each layer and step, you should have a basic knowledge that highlights the main behaviors and interactions.

For example, consider the IP protocol. You should understand where it is placed in the protocols hierarchy, what an IP address is, its structure, what a network mask is, a default gateway is, what happens when your computer needs to send an IP packet (default gateway yes or no, ARP, etc.). While it’s not necessary to know the intricate details of the ARP Request/ARP Reply sequence, the use of MAC address/broadcast, the ARP spoofing attack, etc. you should known at least that ARP is involved in transmitting an IP packet over a LAN.

General knowledge list:

  • General
    • protocols are layered: e.g. HTTP runs on top of TCP that runs on top of IP that can run on top of Ethernet/802.3, etc.
    • what is link speed, latency and effective throughput.
    • the OSI model layers
  • Ethernet/802.3
    • OSI Level 1 and 2
    • Link speeds: 10/100/1000/… mbit/s
    • MAC address
    • devices: switch, hub (dead), wifi access point, etc.
  • VLAN
    • behaviour, tags, etc.
  • IP
    • OSI Level 3
    • address structure
    • public / local addresses
    • subnet mask
    • default gateway
    • routing (just the basic idea)
    • devices: router, L3 switch
  • DHCP
    • how it works, information delivered, why using it, basic configuration parameters
    • device: dhcp server, “router” in SOHO
  • TCP/UDP
    • OSI Level 4
    • connected (tcp) / not connected (udp)
    • port number and socket
  • ICMP
    • general usage and being aware of misleading feedbacks
  • NAT
    • general operations and when used
  • DNS
    • general behaviour
    • HOSTS file
    • multiple DNS (internal/external) in complex environments
  • HTTP
    • request/response behaviour
    • content type / length and other headers
    • verbs
    • timeouts
  • HTTPS
    • X509 certificates: public/private info, chain, expiration, revocation, etc.
    • handshaking information
    • SNI
    • X509 Client certificates
  • SMB
    • general behaviour, ports used, security
  • Firewalls
    • high level behaviour
    • how rules work: source/destination IP addresses, networks and ports
  • VPN
    • general overview and how they work
  • Mobile connectivity
    • GSM, 2G, 3G, etc.
    • speeds, behaviour, pros and cons
  • Misc
    • How to check network connectivity and troubleshoot connectivity/visibility issues
    • Useful command line tools: ping, tracert/traceroute, nslookup, curl, etc.