Computer Networks

Andrew S. Tanenbaum

Mentioned 4

This classic reference for students, and anyone who wants to know more about connectivity, has been totally rewritten to reflect the networks of the 1990s and beyond.

More on Amazon.com

Mentioned in questions and answers.

What concepts in Computer Science do you think have made you a better programmer?

My degree was in Mechanical Engineering so having ended up as a programmer, I'm a bit lacking in the basics. There are a few standard CS concepts which I've learnt recently that have given me a much deeper understanding of what I'm doing, specifically:

Language Features

  • Pointers & Recursion (Thanks Joel!)

Data Structures

  • Linked Lists
  • Hashtables

Algorithms

  • Bubble Sorts

Obviously, the list is a little short at the moment so I was hoping for suggestions as to:

  1. What concepts I should understand,
  2. Any good resources for properly understanding them (as Wikipedia can be a bit dense and academic sometimes).

I find it a little funny that you're looking for computer science subjects, but find wikipedia too academic :D

Anyway, here goes, in no particular order:

As a recent graduate from a computer science degree I'd recommend the following:

Some of the OS concepts

 ( memory, IO, Scheduling, process\Threads, multithreading )

[a good book "Modern Operating Systems, 2nd Edition, Andrew S. Tanenbaum"]

Basic knowledge of Computer networks

[a good book by Tanenbaum

OOPS concepts

Finite autometa

A programming language ( I learnt C first then C++)

Algorithms ( Time\space complexity, sort, search, trees, linked list, stack, queue )

[a good book Introduction to Algorithms]

Question about the MAC-protocol of 802.11 Wifi.

We have learned that when a station has received the data it waits for SIFS time. Then it sends the packet. When searching online the reason that is always mentioned is to give ACK packets a higher priority. This is understandable since a station first has to wait DIFS time when it wants to send normal data (and DIFS is larger than SIFS).

But why wait at all? Why not immediately send the ACK? The station knows the data has arrived and the CRC is correct, so why wait?

It is like that because Distributed Coordination Function (DCF) and Point Coordination Function (PCF) mode can coexist within one cell. That is a base station may use polling while at the same time the cell can use disitributed coordination using CSMA/CA.

So during SIFS, control frames or next fragment may be sent. During PIFS, PCF frames may be sent and during DIFS DCF frames may be sent. During SIFS and PIFS, PCF can work its magic.

Even though not all base stations support PCF all stations must wait since some may support it.

Update:

The way I understand this now is that during SIFS the station may send RTS,CTS or ACK and have enough time to switch back to receiving mode before the sender starts to transmit. If that's correct, it will send ACK during SIFS. Then it will change to receive mode and wait until SIFS elapses. When SIFS has elapsed the transmitter will start sending.

Also, PCF is controlled by PIFS which comes after SIFS and before DIFS and is therefor not relevant for this discussion (my mistake). That is, SIFS < PIFS < DIFS < EIFS.

Sources: This PDF (page 8) and Computer Networks by Andrew S. Tanenbaum

I am trying to write a simple networked chat program in Java. I have almost no networking experience. I was wondering what resources I should begin looking at (beside here of course).

Sticking with the core Java API would be best for now.

I recommend you to first learn networking. If you have time read the Tanenbaum book, the greatest reference in networking. If you want a quick leard, here is a road map:

  • OSI layers
  • UDP and TCP/IP
  • Sockets
  • Broadcast and Multicast
  • Network security

Then go with Java: Socket, ServerSocket, DatagramSocket, RMI, etc.

I wanted to find a good book that explains principles (possibly with some theory) of MAC and routing layers in wireless networks (cellular and wifi). I do not need the bible (classical 800 pages or so books) but, rather, something that focuses on principles, theory, and practical considerations.

I would recommend 'Routing TCP/IP' by Jeff Doyle & Jennifer DeHaven Carroll. You can search through the book on google and purchase it on Amazon here. Note that there is also a kindle edition available.

To cover the cellular topics, I'd recommend 'Wireless Crash Course' by Paul Bedell -- see here. It's a fair bit cheaper than the other one too.

If you like Bedell's writing style (after spending $30 on the Wireless Crash Course), pick up his Telecom book too.

I strongly suggest Computer Networks by Tanenbaum. It is consider bible (in a good way) on the subject since it has really simple and concise explanations.

It explains each of network layers, including good explanations on MAC and routing in wireless and cellular. Here is books review on the amazon.