Book Review - The Linux TCP/IP Stack: Networking for Embedded Systems
The Linux TCP/IP Stack: Networking for Embedded Systems
Thomas F. Herbert
Charles River Media
Thomas Herbert's book The Linux TCP/IP Stack: Networking for Embedded Systems is a thorough guided tour of the Linux kernel TCP/IP implementation. Herbert builds his description of Linux networking, starting with the device drivers and moving up through memory management, the socket layer and, finally, the TCP/IP stack itself. Each chapter combines brief explanatory sections with almost line-by-line source code readings. The text is cross-referenced heavily to source files, relevant standards and also to other networking books.
This bottom-up approach to explaining the TCP/IP implementation has its limitations. The text frequently refers to topics that will be covered in later sections or even chapters. In fact, the reader is nearly halfway through the book before it focuses on TCP/IP. The early chapters often feel choppy, and the reader is tempted to skim ahead for the good stuff.
Whether the good stuff is really there is a fair question. There's no doubt that Herbert explains the Linux TCP/IP stack and its major code paths in detail. But readers looking for context or comparison of TCP/IP to other implementations are with questions: What is advanced or novel about Linux TCP/IP? What is simply standard practice?
But the biggest surprise, given the book's title, is the small amount of discussion focusing on Linux TCP/IP for embedded systems. As an implementor of embedded, networked systems, I expected a discussion of CPU usage, memory limitations and performance tuning. Compatibility issues with other TCP/IP implementations also might be a concern. Finally, a thorough treatment of common denial-of-service attacks against TCP/IP itself and how the Linux stack protects itself against them, unfortunately, is an absolute must. Some of these topics are mentioned in passing in this book, but there is no focus on embedded systems.
Instead, Herbert focuses on the internals of the kernel TCP/IP stack. Mostly, he describes the data flow through the various layers. There's too little theory of operation, and it's not a kernel programming tutorial. Readers who are not kernel programmers might find the book heavy going. If you want to spend a few hours with a Linux guru reading through the kernel sources together, then this is the book for you. To understand the book, you already should be familiar with IP networking protocols and the basics of kernel programming for Linux or another UNIX operating systems.
The book comes with a CD that includes a comprehensive set of standards documents, as well as source and IPv6 patches for a pre-release of Linux 2.6.0, the specific kernel version discussed in the book. Early chapters on the evolution of data networking feel tacked-on, and readers safely can skip them.