Advanced Networking Teunis J. Ott Fall 2004. Wed 6:00 - 9:05 pm. NJIT. CIS786-103 , hopefully also ECE788-yyy . (In the fall 2004 NJIT course listing this course is listed as ``QoS in the Internet'', but the ``real'' title is ``Advanced Networking''.) Course description. 1. Students will be exposed to the Linux code for TCP/IP. Students will learn to make a simple change to the TCP/IP code in the kernel, and to recompile the kernel. There will be a project where students make such a change, and using a sniffer (e.g. tcpdump) document the resulting change in behavior. For this project every student will become superuser in one of the computers in the Internet Laboratory (GITC 4325). 2. Students will be made familiar with ns2. NS is a network simulator. It is freeware from ISI. It has become a de-facto standard for simulations of TCP/IP etc. 3. Students will be exposed to a selection of other topics, to be chosen from: Split TCP; DoS attacks, address spoofing, traceback; Long Range Dependence and Heavy-Tailed behavior; The square root law for TCP; ECN and Differentiated Services; RED, SRED, BLUE, Leaky Buckets, the Firewall implementation in Linux; etc. --- The Linux kernel is written in C. Students who do not know C but do know C++ (even if not expertly) will not have a problem with the programming part. Access to a book on C will be necessary. Also, access to a book on Linux System Administration will be necessary. Students must know TCP/IP at the level of CIS656 or an equivalent ECE course, for example ECE637. Books: Crowcroft and Phillips (2001) TCP/IP and Linux Protocol Implementation Systems Code for the Linux Internet. Wiley. (This book did not give me what I expected from it. Students should borrow it and browse through it, but probably not buy it.) Satchell and Clifford (2000) Linux IP Stacks Commentary, In-Depth Code Annotation Coriolis Open Press (This book is out of print. Amazon has second hand copies for sale. There is a copy in the Internet Lab. Mr Jain read most of it and had the same reaction I had to Crowcroft and Phillips.) W. Richard Stevens TCP/IP Illustrated, Vol I: The Protocols (Addison Wesley, ISBN 0-201-63346-0\9) Gary R. Wright and W. Richard Stevens TCP/IP Illustrated, Vol II: The Implementation (Addison Wesley, ISBN 0-201-63354-X) (These two books are a ``bible'' on the BSD Unix implementation of TCP/IP. Stevens I gives a ``theoretical introduction'', and Stevens II gives a detailed description and explanation of the code. I may decide to make Stevens II compulsory for the fall 2004 Advanced Networking course. If you can afford it, buy both before I make up my mind).) --- Nemeth, Snyder, Hein (with Boggs, Crosby, McClain) (2002) Linux Administration Handbook Prentice Hall. (Access to this book, or a similar book on Linux Administration, will be necessary for a short while. I recommend you buy this book, but you probably can manage with borrowing it.) A ``general'' book on Linux may be useful. There are many, feel free to use your own favorite. --- Kernighan and Ritchie (1988, second edition) The C Programming Language (ANSI C) Prentice Hall. (Unless you are a really good C programmer you will need this book, or a book like this. Make sure you have a book that follows the ANSI standard. I use this book and have found it quite adequate. Feel free to use your own favorite book on C.) --- Students will learn to use tcpdump to observe and analyze packet flows. The modus operandi is: Use tcpdump with option ``-w'' (``write'') to create a raw binary file. Then use tcpdump with option ``-r'' (``read'') to read that file, and to create various (depending on other options) human-readable files. These ``human-reable'' files are not that terribly readable! The next step is to analyze these files, and/or make them more readable. This can be done using C or C++, but use of Perl is recommended. So make sure to have access to ``Perl'' information. Books: Learning Perl. Randal Schwartz and Tom Christiansen O'Reilly. Programming Perl. Larry Wall and Randal Schwartz O'Reilly & Associates, Inc. Perl Cookbook Tom Christiansen and Nathan Torkington O'Reilly. (And more: see the NJIT Library, or see Amazon. There also is a ``Perl for Dummies''.) On the Web (Courtesy Mr Jain): http://www.comp.leeds.ac.uk/Perl/start.html http://cee.carleton.ca/~nholtz/cgi-bin/tutorial/Courses/Grad/1994-95/82.562/perl/index.html http://oopweb.com/Perl/Documents/ppp/VolumeFrames.html http://www.sunsite.ualberta.ca/Documentation/Misc/perl-5.6.0/pod/perlfunc.html http://www.cis.ksu.edu/Systems/Info/develop/perl.info.Top.html Examples of Perl scripts will be given and explained, but this will not be a class on Perl! --- Students will have access to the Linux Operating System Source Code. Pieces of it will be discussed in class. For the time being, no book will be assigned. If I find a book I like it will be assigned. --- There also is a sizable amount of material on the web. See e.g. Bert Hubert et al (2003) Linux Advanced Routing & Traffic Control HOWTO. http://lartc.org Saravanan Radhakrishnan (1999) Linux - Advanced Networking Overview Version 1. http://qos.ittc.ukans.edu/howto/ Glenn Herrin (2000) Linux IP Networking A Guide to the Implementation and Modification of the Linux Protocol Stack http://www.kernelnewbies.org/documents/ (master's project!) I read the last one, and found it not really useful. Students may want to try it and see whether they get more out of it.