HACKER Q&A
📣 giulianopz

Good books/courses to learn networking essentials for web developers?


With 'networking essentials' I mean software components which constitute the infrastructure which a webapp lives within: e.g reverse proxy, DMZ, firewall, etc.


  👤 shubik22 Accepted Answer ✓
I’d recommend High Performance Browser Networking by Ilya Grigorik[0]. It’s definitely less in-depth/comprehensive than some of the other suggestions here but I’ve found it to be a really clear, accessible exploration of networking concepts relevant for web development.

[0] https://www.amazon.com/dp/1449344763


👤 scudd
I think Beej's Guide to Network Programming is IMO hands down the best resource I've come across: https://beej.us/guide/bgnet/

It also doubles as a very great introduction to C, if that something you're interested in. It's funny because both C and socket level programming are often a barrier, or at least they were for me. It's an attestant to the quality of Beej's guide that he introduces both simultaneously, and makes it very approachable.

This is one of those sources that helped me disproportionately grow as a programmer in a short period of time.


👤 teleforce
I'd recommend Kurose's Computer Networking: A Top Down Approach (now in 8th edition) book if you want to learn a proper computer networks concepts because this is the definitive textbook.

If you want the practical aspects of computer networks, you can try Niall Manfields' Practical TCP/IP designing, using and troubleshooting TCP/IP networks on Linux and Windows book. Granted it's a bit old (2nd edition is essentially the same 1st edition), but because you are after the essentials it should be more than fine. Here's the review of the book:

https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=122...


👤 oliverx0

👤 ruben81adelaide
Try the CCNA course of CISCO, “The Complete Network Fundamentals”. I did one of those years ago. It’s a great course to achieve a good base of networking. CCNA is just the first step to a good introduction, if you like it, you can expand your knowledge with more.

👤 mattficke
This is a little more idiosyncratic than the other recommendations, but the “Bite Size Networking” zine by Julia Evans is a really nice overview of networking tools on Linux.

https://wizardzines.com/zines/bite-size-networking/


👤 JanMa
When it comes to networking fundamentals I can definitely recommend "Computer Networks" by Andrew Tanenbaum[0].

[0]: https://www.pearson.com/us/higher-education/program/Tanenbau...


👤 jijji
TCP/IP Illustrated, Vol. 1: The Protocols by W. Richard Stevens [0]

[0] https://www.amazon.com/TCP-Illustrated-Vol-Addison-Wesley-Pr...


👤 arman_ashrafian
I really like this textbook that was used in my undergrad networking course.

https://book.systemsapproach.org/index.html

The “perspective” sections at the end of every chapter are really interesting!


👤 stakkur
Not a book, and I only have one (positive) data point from a coworker, but this free Udacity course tackles that subject: https://www.udacity.com/course/networking-for-web-developers...

👤 captn3m0
Udacity has a Networking for Web Developers course[0], but I'd recommend trying out things (such as running a simple web-app on your own server). Things like:

- Running https://certbot.eff.org/instructions

- Trying out a few different web servers (apache/nginx/caddy)

- Playing around with load-balancers on $cloud_provider.

- Spending time with docker networking (https://docs.docker.com/config/containers/container-networki...)

- Playing around with various X-Forwarded header options in the context of your application

For a web developer, the most useful skill is knowing what each and every component on the pipeline is doing before your code executes on the request. As a common eg, if your application seems to be loading stylesheets from `http://` instead of `https://` despite being loaded over HTTPS, it is often because your application didn't honor the X-Forwarded-Proto header (which most frameworks will do for you). Similarly, seeing a local IP address (192.168.x.y for eg) on a log, and realizing that you should be using the X-Forwarded-Ip by "trusting your proxy"[1] and doing it securely[2].[3].

[0]: https://www.udacity.com/course/networking-for-web-developers...

[1]: https://expressjs.com/en/guide/behind-proxies.html

[2]: https://shubs.io/enumerating-ips-in-x-forwarded-headers-to-b...

[3]: https://blog.ircmaxell.com/2012/11/anatomy-of-attack-how-i-h...


👤 rsclient
For networking background and history, I came up with [this list](https://sunriseprogrammer.blogspot.com/2019/09/a-network-rea...) for some new people at work. It includes things "everyone" used to know: a little bit about internet history from the original sources, some of the most useful RFCs, and some stuff about certificates.

👤 orangefox
TCP/IP Guide http://www.tcpipguide.com/ is one of my favorites. Its free at the website and available as a book.

👤 huy-nguyen
This is an oldie but goodie: “ TCP/IP Network Administration (3rd Edition; O'Reilly Networking)” by Craig Hunt. However, I think nothing teaches networking better than making your own network devices from open source components, for example, creating routers/firewalls/access points from barebones Linux/Unix machines.

👤 tootie
Networking is probably not what you're looking for. You are probably more interested in DevOps and architecture. Topics like DNS and edge caching. Reverse proxies are typically web servers (ie nginx) or cloud services like API Gateways. Things like TCP are rarely relevant unless you're doing serious micro optimization.

👤 wonnage
Depending on your interests/needs, you might not find yourself actually writing network code, but dealing with it tangentially when things go weird. Programming blogs where people detail one of these weird edge cases and explain how they debugged them are super interesting and might be more relevant to your day-to-day work.

Here's one I really like, you could learn a lot just reading through all the networking-related posts here: https://jvns.ca/#computer-networking



👤 efortis
This is my 2-server infrastructure (network and firewall) as it's in production. I'd start playing with it in two local VMs.

https://blog.uidrafter.com/engineering/freebsd-jails-network...

As for books, Ivan Ristić's ModSecurity, although old, is full of tips for setting up reverse proxies.


👤 rramadass
I think you are looking for a book which covers details of all the "Hardware Appliances/Software Components" which live in a network serving "Web based Applications". I don't know of any one book which will cover everything but you might find the following useful.

* An Engineering Approach to Computer Networking: ATM Networks, the Internet, and the Telephone Network by S. Keshav - This is a great text on fundamentals of Networking. Nothing to do with the "Web" but everything to do with what underpins it.

* Web Protocols and Practice: HTTP/1.1, Networking Protocols, Caching, and Traffic Measurement by Krishnamurthy and Rexford - Best book i have seen yet which explains the interplay between HTTP and the underlying TCP/IP protocol suite.

* Load Balancing Servers, Firewalls, and Caches by Kopparapu.


👤 sam56718

👤 mobilio
This book is amazing: https://designingforperformance.com because covers things that every designer/webdev should knows.

👤 spicyramen
I would start with Cisco CCNA it never gets old

👤 giantrobot
Basic course: Networks are unreliable. Everyone's life gets worse when you ignore that fact.

Thanks for coming to my TED talk.


👤 paulcole
How to Win Friends & Influence Routers is a classic for a reason.