CPSC 441:
Computer Networks and Distributed Processing

   Department of Mathematics and Computer Science
   Hobart and William Smith Colleges

   Fall, 2004.

   Instructor:  David J. Eck.

   Monday, Wednesday, Friday, 9:05 to 10:00.
   Room Lansing 300 (except Eaton 116 on most Fridays).

About This Course

It is hardly necessary to explain the importance of computer networking. It's everywhere. Computer networks are very complex systems, with many levels of organization. It is certainly not possible to learn everything in one term. (Probably not in one lifetime, especially since things seem to change as fast as anyone can learn them.) The key to dealing with this complexity is to learn the basic ideas and fundamental theory of computer networking. I hope that the course will make that possible, while at the same time covering a lot of practical material.

The main textbook for this course is Computer Networking: A Top-Down Approach Featuring the Internet, Third Edition, by James F. Kurose and Keith W. Ross. We will cover material from Chapters 1 through 6 of this book, although we will not cover every topic in these chapters. We will use this book for the first twelve weeks of the course. During the last two weeks, we will look at distributed programming using MPI, an API for parallel processing. The reading for this part of the course will consist of handouts and Web pages.

You can expect the course to be a mixture of various elements including: networking theory, details of TCP/IP networking, network configuration, client/server programming, and programming with MPI.

Labs and Assignments

On Fridays (except when an exam is scheduled), the class will meet in Eaton 116 for lab. The labs will include hands-on work with network programming, network configuration, and using network-related software tools. Most of the assignments for the course will begin as exercises in lab that you will finish and turn in later. For this course, Eaton 116 has been set up with 12 computers. The class will be divided into groups, and each group will work on its own small network.

For the MPI programming at the end of the course, we will use the C++ programming language. I would like to use Java as the programming language for basic network programming, since Java has nice networking and threading capabilities, but we can discuss the possibility of using C++ instead. Several of the labs will use Ethereal, a "network sniffer" program that makes it possible to observe the details of the network traffic over a network connection.

Tests and Grading

There will be two in-class tests and a final exam. The tests will be given on Friday, October 1 and Friday, November 6, and the final exam will be during the scheduled final examination period for this course, 8:30 AM on Wednesday, December 15. The final exam will cover material from the entire course, but will concentrate heavily on the last part of the course.

Your grade for the course will be computed as follows:

            First Test:     20%
            Second Test:    20%
            Final Exam:     20%
            Assignments:    40%


I expect you to be present and on time for all classes. There might be extraordinary circumstances that force you to miss a few classes. You should discuss any such cases with me at the earliest possible time. In the absence of such extraordinary circumstances, you can expect any absence to lower your grade for the course.

Office Hours, E-mail, and Web

My office is room 301 in Lansing Hall. My office phone extension is 3398. I am on campus most days, and you are welcome to come in anytime you can find me there. I will announce my official office hours as soon as I schedule them.

My e-mail address is eck@hws.edu. E-mail is good way to communicate with me, since I usually answer messages the day I receive them.

The Web page for this course is at http://math.hws.edu/eck/cs441/index_f04.html. I will post weekly readings and assignments on that page.

Very Tentative Schedule

Dates Topics and Readings Possible Lab
Aug. 30; Sep. 1, 3 Networking and the Internet;
Chapter 1, Sections 1--5
Intro to Linux Networking
Sep. 6, 8, 9 Network Delay, Layered Protocols;
Chapter 1, Sections 6, 7
Ethereal Lab: HTTP
Sep. 13, 15, 17 The Application Layer; HTTP;
Chapter 2, Sections 1, 2
Programming a Network Client
Sep. 20, 22, 24 Socket Programming for TCP;
Chapter 2, Sections 7, 9
Programming a Network Server
Sep. 27, 29; Oct. 1 More Web Applications;
Chapter 2, Sections 3--5
Test on Friday, October 1
Oct. 4, 6, 8 The Transport Layer;
Chapter 3, Sections 1--3
A Multithreaded Server
Oct. 13, 15 TCP: Reliable Connections;
Chapter 3, Sections 4, 5
(Fall Break, Oct. 11)
Oct. 18, 20, 22 TCP: Congestion Control;
Chapter 3, Sections 6, 7
Ethereal Lab: TCP
25, 27, 29 The Network Layer;
Chapter 4, Sections 1, 3, 4
Routing and Masquerading
Nov. 1, 3, 5 Routing;
Chapter 4, Sections 5, 6
Test on Friday, November 5
Nov. 8, 10, 12 The Link Layer;
Chapter 5, Sections 1, 4--6
Mac Addresses and ARP
Nov. 15, 17, 19 Wireless Networking;
Chapter 6, Sections 1--3
Using wireless networks
Nov. 22 MPI
(Thanksgiving, Nov. 24 and 26)
Introduction to MPI
(Lab is on Monday.)
Nov. 29; Dec. 1, 3 Parallel Programming and MPI MPI Programming
Dec. 6, 8, 10 Parallel Programming and MPI More MPI Programming
Dec. 15 Final Exam
Wednesday, December 15, 8:30 AM