views:

136

answers:

5

Recently I read a software engineer job description. The requirements included knowing how the web works from HTTP to HTML, improving the performance of the TCP stack in Linux, and knowing how cache-control headers work.

What's the best way to learn about these topics?

+2  A: 

For a thorough understanding of computer networks, Andrew Tannenbaum's Computer Networks is an excellent text. You might also want to check out the HTTP protocol specification. There are a number of references on tuning Linux networking performance. Rather than list them, I'd suggest a Google search: http://www.google.com/search?q=linux+network+performance.

tvanfosson
+2  A: 

I recommend writing your own web server. "Doing" is the best way to learn.

Use any language you want. Start with the simplest possible thing, then work your way up. Have some pages be static and cacheable (e.g. files on disk) and others be dynamic (e.g. generate random text).

Jason Cohen
+2  A: 
  • RFCs (HTTP), RFCs contain the standard on how the protocol should be implemented
  • Packet sniffers (Wireshark), see how your web browser interacts with a website
  • Practice, try programming your own HTTP server and client

Some interesting links:

srand
+4  A: 

TCP-IP Illustrated, Volume I is a great place to start.

Mo Flanagan
+2  A: 

As has been said already, Computer Networks by Tanenbaum, and TCP/IP Illustrated by W. Richard Stevens will cover the vast majority of what you need to know about the lower levels of the stack. For most developers, TCP/IP Illustrated is probably a better pick; Computer Networks is an excellent resource, but focuses more on telecommunications theory which probably isn't directly applicable to most web development roles.

One thing that hasn't been mentioned thus far is DNS. I would argue that anyone developing for the web needs to understand how DNS functions; DNS & BIND is the seminal work here.

In terms of HTTP, SMTP and other upper layer protocols, I'll leave that to people more experienced than I.

Murali Suriar