It's a description of lower levels of the network stack. Covers layers up to 3 (IP etc + ICMP). Not much about layer 4+ and socket interface. Detailed. Requires (basic) knowledge of kernel internals and at least general idea how the networking protocols work.
I wish I had that book long time ago when I was starting digging in Linux networking code...
What's hard when staring reading networking code is the amount of it. There are really many (often complicated) structures and the code uses many functions from different places. That makes the process of learning how the things work exactly quite a time-consuming one.
"Understanding Linux Networking Internals" makes the first days (weeks?) much easier. It gives a solid background and prepares the reader to his or her own studies of the Linux networking code. The book shows many concepts which would take long time to understand. It also shows the reasons.
The book starts with general networking and kernel introduction (not enough if that's the reader's first contact with one or both). Then it goes through layers, staring from the bottom (ie. close to hardware): network devices. Then it covers bridging. Next part covers IP protocol in version 4 (with one chapter about ICMP), with advanced topics like fragmentation. Then there comes neighboring subsystem (with ARP protocol) and the book finishes with routing.
The choice of topics is good (but lacks certain things, see below). Popular (and, at the same time, important) protocols are shown. Descriptions are very detailed and that is visible in the size of the book: 1000 pages long.
The text is clearly written, with enough examples. There are also many diagrams (for nearly all more complicated algorithms presented in the book) making it easier to follow the descriptions.
One warning here: when it comes the IP code, knowledge of the protocol is important That part may be hard to understand without it. I highly recommend a book about protocols first. The discussion is detailed and also not so well-known features are discussed.
Book structure is logical and clean, it's quite easy to find an interesting topic. Index helps, too.
It'd be nice, however, to know from which version of the kernel comes the code and which version is described in the book, it's not clearly stated.
It's a very valuable resource, but you always want more. So... To be a complete guide to Linux networking stack the book lacks certain important pieces, however. Level 4 protocols are not shown. This is not a very serious issue, as IP description is detailed and TCP would take no less than 300 pages (UDP, on the other hand, would fit just fine). What's more important for me is the lack of chapters about sockets. It's an important interface, its' internals are not that simple and show some important concepts and tricks. Understanding sockets is also important when adding a new protocol. I'd like more about topics like locking and performance.
The lack of IPv6, IPSec, QoS (Quality of Service) is understandable, as they're all quite complicated. The content of the book makes it easier to understand their code.
It's a book I recommend (with a more general kernel and protocol books and/or specifications) to everyone beginning with networking code. In fact, the book is also valuable for those who're approaching *BSD network stacks - there are differences, but the general ideas and design are more or less the same. Good for developers or students who want to get familiar with a state-of-art network stack.