Readit News logoReadit News
Posted by u/tusharvaswani 4 years ago
Ask HN: Resources for learning networking for back end development
Hello everyone, I am a frontend developer and I am trying to shift to backend development. I am studying directly from Node JS docs but I have realised that most of their networking modules are hard to understand without have a knowledge of networking . So searched google for resources but didnt find a single resource. All resources were in depth covering those OSI layers that a backend developer would not need. So anyone please suggest me some resources(videos, books, articles anything) for studying networking but for a level of backend engineer.
Nextgrid · 4 years ago
For a web frontend dev switching to backend I'd assume you still want to stay within the web space rather than let's say systems programming - in this case I wouldn't worry too much about the lower-level details yet and instead focus on what's relevant for the web:

HTTP - headers, the concept of forward/reverse proxies, etc

TLS - not necessarily the underlying cryptographic primitives but the high-level overview, how certificates are obtained/managed, the data they encode, how are they validated, etc

DNS - the types of records, etc

The best way IMO would be to learn by doing - set up a basic server-side rendered application (you can add a JS frontend later, this will come with its own challenges such as serving it from another domain and setting up CORS, etc) purely on a dedicated server or even self-hosted hardware. It's not that the cloud is always a bad idea (though it can be in some cases), but doing it by hand from scratch will teach you plenty of things that the cloud otherwise abstracts away from you.

Get yourself a Linux VPS from a provider offering fixed, capped pricing (so a mistake can't cause a huge bill) and serve that web app from it, doing everything yourself - no S3, no Cloudflare/AWS ELBs, etc.

You won't learn anything in depth, but you'll get a good high-level overview of how all these concepts fit together and will be able to know how to dig further and where to dig.

isbvhodnvemrwvn · 4 years ago
I would still learn at least basics of TCP and IP, so that you are aware e.g. what firewalls do and how this shows up on the client side (vs when nothing is listening on the port but the port is otherwise open), what private IP ranges are, or what a timeout look like. These are the basics which are going to be extremely relevant when you start troubleshooting. Especially if they slap a docker image on their VPS. There's a frightening number of people who can't tell DNS resolution failure from a timeout, think they are going to get HTTP 500 if server breaks the connection, or don't take those failures into account (and it shows up in how they design their code).
tusharvaswani · 4 years ago
Can you please share some resources which could help me in that!
tusharvaswani · 4 years ago
Thanks a lot for your answer! I agree on the thing that doing something would actually give me knowledge for that. But still if you can share some resources then I would be very grateful to you.
robcohen · 4 years ago
Go get CompTIA Network+ certified. There’s plenty of material (prof Messer in particular). After that, play around with simulated network with GNS3 or similar software. Learn to SSH tunnel through multiple hosts. Play with socat and other low level networking tools. Implement some basic apps with your language of choice. Learn wire shark doing wire shark CTFs. Finally, reimplement a networking protocol from a spec.

Congrats you know networking now.

tusharvaswani · 4 years ago
As I said I dont want to cover the whole networking just I need to learn those things that are required for backend development.
throwaway0asd · 4 years ago
That makes absolutely no sense. Either you want to learn the basics of networking or you don’t. It sounds like you are living in some ignorance qualified fantasy of what networking is.

You need to know theory of networking, all of it. What you don’t need are the instructions to configure a router or switch. Otherwise, I recommend giving up and doing something else.

jmconfuzeus · 4 years ago
Just search for TCP handshake on Youtube.

Then install a program called Wireshark. Search Youtube on how to use it to inspect traffic.

Then read this excellent article on how web frameworks actually work: https://shopify.engineering/building-web-app-ruby-rails

Unless you're looking to build your own web framework or something that's all you need to know for backend development because everything is nicely encapsulated these days.

If you want to build frameworks and stuff then learn C and grab a book called TCP/IP Illustrated.

ryanchants · 4 years ago
The closest I can think of is High Performance Browser Networking:

https://hpbn.co/

But I'm not really sure what backend-specific networking knowledge you need.

tusharvaswani · 4 years ago
Thanks for sharing! I want to know about TCP, UDP and all those fancy terms in backend development like reverse proxies, load balancers.
janstice · 4 years ago
I’d have a look at something like an Udemy CCNA course, but stick to the generic stuff, and skip the Cisco-specific things - this should get you enough of the basics that you can pick up the rest. Udemy is good here in that you can pick & choose from the videos.
floatinglotus · 4 years ago
You really shouldn’t have to learn this stuff these days. If you build your apps for Kubernetes then the routing, DNS and even TLS should be handled automatically.