views:

106

answers:

6

I understand the basics of networking such as Lan and stuff. I know what many of the protocols are and how to build a client/server socket program in C. But what I really want is a very good understanding of how networks actually work. Not only from a programming aspect but also from a application aspect. I am looking for some material(preferably a book) which will give me a very good foundation to go off of. I am in the middle of wanting to be a programmer or a UNIX admin, so I really should learn and know how to apply networking fundamentals.

Does any such a concise resource exist? Would it be better going the more academic route by buying a networking book(such as those from Tanenbaum or Kurose), or is it better to go the It route possibly looking into network admin text or certification books.

Thank you all so much.

A: 

It sounds like the kind of understanding you're looking for is the kind that can only really be reached through experience. Each and every person will have a different way of looking at things, depending on what makes sense to them -- explanations can help, but there's no substitute for learning by actually solving problems.

andersop
+1  A: 

Whoa .. networking is a seriously big field. To truly understand everything will require a PHD, or several PHD's.

Here are some of the aspects I think you need to learn.

1) You need to learn the history of networking. Many of the policies built into protocols were made due to limitations of the time. Learn the history of protocols to learn the "Why" of how it works.

2) Programming is an excellent source of knowledge on how a network works on the lowest level. Learn to write some socket code in C. BSD sockets is a good place to start. You can find alot of references for BSD sockets on the Internet.

3) *nix commands offer a wealth of knowledge on configuring and managing networks. Good network admins know a lot of tricks on how to build complicated networking operations using just the most basic network tools. The GNU networking tools is a good place to start.

4) If your up to it, there are several certificates like MCSE and CCNA which have modules on networking. These papers can be useful to gain knowledge on a particular type of network. I learnt alot about windows NT domain models from sitting for the MCSE paper even though i never really played around with domains much.

There are more aspects. Ask yourself, which do you like more ?

a bit of personal experience. I have worked as a software developer for 10 years. I am also the "unpaid" network guru in my office. Somehow , i have to wear more than 1 hat as a developer because networking is part of the software i work on.

Andrew Keith
+2  A: 

The late Richard Stevens' book is a masterpiece -- much more practical and immediately applicable than Tanenbaum's (haven't studied Kurose). Btw, by the same author, I just as warmly recommend the books in the "TCP/IP Illustrated" series, and Advanced Programming in the Unix Environment -- few books are more crucial to the wanna-be "programmer or Unix admin", save perhaps ESR's!

Alex Martelli
+1  A: 

Its kind of unclear to me what exactly you're looking for, so I'm just going to throw this out there:

Start networking your own stuff together. Create a LAN. Go figure out how to create and manage a Linux firewall instead of a consumer one. Install Active Directory just for grins. Run your own DHCP and DNS servers on that Active Directory server.

Once you get that far, if you're still interested, start thinking about how you would plan your LAN if you had 500 computers. Learn about Virtual LANs (VLANs).

I think networking in particular is a great place to start tinkering because A) no one gets hurt, B) its mostly free.

popester
+1  A: 

For fundamentals, you may want to get the W. Richard Stevens Classic, TCP/IP Illustrated, and possibly his other books as well. There will not be any more of them, either.

DigitalRoss
+2  A: 

Here is the way I would recommend:

  • Learn how Internet Evolved, this would give you the reason why they needed it
  • Learn the different protocols - HTTP, telnet, ssh esp the secure ones SFTP, HTTPS etc
  • Learn what are sockets and types of sockets
  • Learn how you can do socket programming. I suggest you to use Python sockets to do the programming
  • Learn the TCP/IP network stack. That would be beneficial
  • Learn how routing works, this is important for learning
  • Try to have a sound knowledge of topics like DNS, it is very important
  • Get VirtualBox and install various OS and try to internetwork them. Play around with the networking stack of the OS.
Manish Sinha