“Computer Networks” by Andrew S. Tanenbaum is a comprehensive text-book on the topic written by an author with many popular text-books to his credit. There are more than 800 pages in this book, though the prose is fairly accessible and peppered with the entertaining wit and sarcasm that is the hallmark of the author's text-books. Even though its 2002 vintage shows through every now and then, the book on the whole is fairly up-to-date and still quite relevant. It is therefore a great text-book from which to teach yourself about computer networks.
While the book talks about the seven-layered OSI model for computer networks as well as the much simpler TCP/IP model, it uses a hybrid model to describe the relevant concepts and protocols. This model comprises the Physical Layer, the Data-Link Layer, the Network Layer, the Transport Layer and the Application Layer. I personally feel that the model used in this book is a more natural fit to computer networks as they exist today.
There are enough protocols described here, across all layers, to sate the appetite of almost every person. At times the author describes the politics behind the promotion of some of the protocols and the reasons for some protocols becoming more dominant than others. You also get to appreciate just how much effort has gone into these protocols to cope with all sorts of network errors and the evolving needs of users. The book covers a lot of wireless and mobile networking issues as well in this edition to reflect their increasing importance in the modern world.
The sections on multimedia, cryptography and copyright issues, while no doubt very interesting, seem a little out of place for this book. Some of the figures do not appear anywhere close to their sites of reference, which makes it a bit cumbersome to flip back and forth between the relevant text and the respective figure. The book uses a proportional font for code listings instead of the usual monospace fonts, which makes it difficult to read through the code.
While this book is a great reference for the concepts related to computer networks, it is not so great as an actual network programming reference. You would be much better served for that purpose by one of the books by W. Richard Stevens.