“No man but a blockhead ever wrote, except for money.” - Samuel Johnson
The textbook world is changing. On the one hand, open source software and creative-commons licensing have been great successes; on the other hand, unauthorized PDFs of popular textbooks are widely available, and it is time to consider flowing with rather than fighting the tide. Hence this book, released for free under the Creative Commons license described below. Mene, mene, tekel pharsin.
Perhaps the last straw, for me, was patent 8195571 for a roundabout method to force students to purchase textbooks. (A simpler strategy might be to include the price of the book in the course.) At some point, faculty have to be advocates for their students rather than, well, Hirudinea.
This is not to say that I have anything against for-profit publishing. It is just that this particular book does not – and will not – belong to that category. In this it is in good company: there is Wikipedia, there is Gnu/Linux, and there is an increasing number of other free online textbooks out there. The market inefficiencies of traditional publishing are sobering: the return to authors of advanced textbooks is at best modest, and costs to users are quite high.
This text is released under the Creative Commons license Attribution-NonCommercial-NoDerivs; this text is like a conventional book, in other words, except that it is free. You may copy the work and distribute it to others, but reuse requires attribution. Creation of derivative works – eg modifying chapters or creating additional chapters and distributing them as part of this work – also requires permission.
The work may not be used for commercial purposes without permission. Permission is likely to be granted for use and distribution of the work in for-profit and commercial training programs, provided there is no direct charge to recipients for the work and provided the free nature of the work is made clear to recipients. However, such permission must always be requested. Alternatively, participants in commercial programs may be instructed to download the work individually.
The official book website (potentially subject to change) is intronetworks.cs.luc.edu. The book is available there as online html, as a zipped archive of html files, in .pdf format, and in other formats as may prove useful.
This book is meant as a serious and more-or-less thorough text for an introductory college or graduate course in computer networks, carefully researched, with consistent notation and style, and complete with diagrams and exercises. My intent is to create a text that covers to a reasonable extent why the Internet is the way it is, to avoid the endless dreary focus on TLA’s (Three-Letter Acronyms), and to remain not too mathematical. For the last, I have avoided calculus, linear algebra, and, for that matter, quadratic terms (though some inequalities do sneak in at times). That said, the book includes a large number of back-of-the-envelope calculations – in settings as concrete as I could make them – illustrating various networking concepts.
Overall, I tried to find a happy medium between practical matters and underlying principles. My goal has been to create a book that is useful to a broad audience, including those interested in network management, in high-performance networking, in software development, or just in how the Internet is put together.
The book can also be used as a networks supplement or companion to other resources for a variety of other courses that overlap to some greater or lesser degree with networking. At Loyola, earlier versions of this material have been used – coupled with a second textbook – in courses in computer security, network management, telecommunications, and even introduction-to-computing courses for non-majors. Another possibility is an alternative or nontraditional presentation of networking itself. It is when used in concert with other works, in particular, that this book’s being free is of marked advantage.
Finally, I hope the book may also be useful as a reference work. To this end, I have attempted to ensure that the indexing and cross-referencing is sufficient to support the drop-in reader. Similarly, obscure notation is kept to a minimum.
Much is sometimes made, in the world of networking textbooks, about top-down versus bottom-up sequencing. This book is not really either, although the chapters are mostly numbered in bottom-up fashion. Instead, the first chapter provides a relatively complete overview of the LAN, IP and transport network layers (along with a few other things), allowing subsequent chapters to refer to all network layers without forward reference, and, more importantly, allowing the chapters to be covered in a variety of different orders. As a practical matter, when I use this text to teach Loyola’s Introduction to Computer Networks course, I cover the IP and TCP material more or less in parallel.
A distinctive feature of the book is the extensive coverage of TCP: TCP dynamics, newer versions of TCP such as TCP Cubic, and a chapter on using the ns-2 simulator to explore actual TCP behavior. This has its roots in a longstanding goal to find better ways to present competition and congestion in the classroom. Another feature is the detailed chapter on queuing disciplines.
One thing this book does not make an attempt to cover is the application layer. There are simply too many directions there in which to go; my recommendation is that, to the extent that application coverage is desired, the instructor can combine this text with appropriate application documentation.
For those interested in using the book for a “traditional” networks course, I with some trepidation offer the following set of core material. In solidarity with those who prefer alternatives to a bottom-up ordering, I emphasize that this represents a set and not a sequence.
With some care in the topic-selection details, the above can be covered in one semester along with a survey of selected important network applications, or the basics of network programming, or the introductory configuration of switches and routers, or coverage of additional material from this book, or some other set of additional topics. Of course, non-traditional networks courses may focus on a quite different sets of topics.
As of March 2014 I am declaring that the first edition is complete. There remains some things I would like to add, but for now they will wait.
Going forward, the intronetworks.cs.luc.edu website will carry both the completed first edition and also the current 1.x edition, x>0. My plan is to make sure, as far as is possible, that the two editions are classroom-compatible: existing exercises will not be renumbered (though new exercises may be introduced with fractional numbers), and section renumbering will be avoided to the extent practical.
At this point I am actively seeking reviewers – either for style or for technical accuracy.
In order to read this book online in html format you will need the appropriate unicode character set installed. At a minimum, the following characters must display properly:
⟨⟩ √∞≃≤≥×−≠ 𝛼𝛽𝛾µ𝜑→←─│┌┐└┘┬┴├┤┼
The diagrams in the body of the text are now all in bitmap .png format, although a few diagrams rendered with line-drawing characters still appear in the exercises. I would prefer to use the vector-graphics .svg format, but as of January 2014 most browsers do not appear to support zooming in on .svg images, which is really the whole point.
The book was prepared in reStructuredText using the linux Sphinx package.