This course focuses on the principles and techniques used in the design of networks and development of networked and distributed software. Topics include programming with sockets, remote procedure calls (RPC), interprocess communication (IPC), distributed objects, and commonly used network protocols including TCP/IP, UDP, FTP, and HTTP. In addition, data encoding, encryption, and compression algorithms are presented. This is a project-oriented course in which students are required to develop software in the Unix programming environment, for example a web server. Design and diagnosis of networks will also be covered. The theory and methodology of developing distributed applications will be discussed and applied in homework.
While other protocols, such as DecNet and AppleTalk, will be mentioned from a historical perspective, the course will primarily focus on the Internet protocol, TCP/IP.
In additon to programming assignments students will be exposed to standard network design tools, and diagnostic tools, such as packet monitors and performance analysis tools.
Familiarity with the LINUX/UNIX operating system and knowledge of a programming language, preferably C, CS 23000 (Operating Systems) or consent of instructor.
You will need a CS department student account, see http://www.cs.uchicago.edu/info/services if you do not already have an account.
Computer Networks, 4th edition, by Andrew Tanenbaum, Prentice Hall, ISBN 0-13-349945-6
Distributed Systems: Principles and Paradigms, by Andrew Tanenbaum and Maarten van Steen, Prentice Hall
A number of network programming texts will be placed on reserve in Eckart Library.
An Engineering Approach to Computer Networks, S. Keshav, ISBN 0-201-63442-2
High Performance Communication Networks, Jean Walrand, Pravin Varaiya, ISBN 1-55860-341-7
Internetworking Multimedia, Jon Crowcroft, Mark Handley and Ian Wakeman ISBN 1-55860-584-3
The C Programming Language, by Kernighan and Ritchie (a.k.a, the famous "K&R" book).
Tuesday, 3:00-4:30. Ry 163
I spend most of my time in my office in the loop at 111 W Monroe, so you are welcome to make an appointment to see me there at a mutually agreeable time.
When I produce electronic materials for handout or electronic presentation, I will generally provide electronic copies, in Acrobat form, on the web page. However, I do not feel it is my responsibility to document everything said in class. If you miss a class, be sure to get notes from another student as everything covered in class is fair game for the exams.
There will be weekly homeworks, which will sometimes consist of reading and written questions and sometimes consist of laboratory/programming problems. Homework will generally be assigned on Tuesday and due the following Tuesday. Homework which is not turned in by the beginning of class only qualifies for half credit. Non-programming/labratory homework turned in after solutions are published receives no credit. Note that the homework and programming/labs are more than half of the course grade, so be sure to keep up. No matter how well you do on the exams, it is not numerically possible to pass without turning in a significant part of the homeworks.
The last several programming assignments will accumulate in the creation of a web server or other major system. Extra credit will be available for additional features beyond those in the assignment.
Homework is due at the beginning of the class in paper form. In some cases, a link to online binary and source code will also be requested. There should be a makefile and all elements necessary to complile and link the program should also be present.
Instructor: Todd Nugent, firstname.lastname@example.org, 312-917-7645
Blackberry wireless pager, for urgent issues, email@example.com. (don't send code to this address!)
Office Hours: Tuesday, 3:00-4:00pm, Ry 163
Tutor/gradersJing Cao, firstname.lastname@example.org,Ry 257, Office Hours Friday 3-4 pm.
Chuang Liu, email@example.com, Office Hours Wed 5-6:00pm in Theory area lobby.
Homework 60%, midterm 15%, Final 20%, class participation 5%
Books or electronic resources are not permitted to be used during the Midterm and Final exams, but up to 4 pages of notes may be used.
The programming assignments in this class will start fairly simply but will be cumulative until by the end of the class you will have constructed substantial distributed systems. Failure to complete the early assignments will consequently cause you serious problems at the end of the course, so don't get behind. While I will often hand out protocol information and sample code to save you from some tedious low level details, this is an advanced course and you are expected to find the necessary information to complete the assignment even if I don't give you all the details in class.
The assignments and sample code will all be in C. While object languages, such as Java, are often used for distributed systems, dealing with the object aspects would take up too much time for a one quarter class. However, if you are already an expert Java programmer and want to use Java for some of the later projects, you can talk to me about it.
The class mailing list is firstname.lastname@example.org. Feel free to post questions to the list. Answering other students questions on the mailing list counts as class participation.
You are encouraged to interact with your classmates and to discuss programming assignments and even solve problems in groups. .However, the work you hand in must be your own. Blatant copying or sharing of solutions or source code will result in an F in the course and referral to the college administration. While you can probably find sample code and answer to other questions on the web, we can find them as well. We also have access to simple online tools which can be used to compare your solutions to your classmates and online solutions and determine the degree of difference in the form of a script to change one into the other. If the length of that script is short, you are in trouble!
No additional work is required to receive credit for the graduate version of this course, however, the grading standard, especially for the programming, is much higher.