CS233/333 Networks and Distributed Systems (Fall 1999)

Meeting time : Ry276, TTh, 1:30
Instructor : Dave Beazley
Office : Ry 257B
Office hours : Whenever I'm around (which is almost always), or by appointment.

Overview

This course focuses on the principles and techniques used to develop networked and distributed software. Topics include programming with sockets, network protocols, remote procedure call (RPC), distributed objects, security, and commonly used network protocols such as TCP/IP, UDP, and HTTP. This is a project oriented course in which students will be required to develop software in the Unix programming environment. Students should be familiar with C programming as well as operating system concepts such as processes and threads.

I'd first like to briefly discuss my intended approach to this class. This class combines elements from two topics which are sometimes taught as different courses. "Networks" as traditionally taught (and as I took it way back when in Internet time) traditionally covers low-level communications theory (signal processing, switching, queuing, etc...) followed by a ton of bit-twiddling, a never-ending stream of arcane network protocols, and a huge assortment of TLAs (Three Letter Acronyms). Needless to say, this makes for a pretty dreadful class (well, I sure didn't like it very much) unless you're an closet network engineering major. "Distributed computing," on the other hand, tends to focus more on the development of software that utilizes the network to split up large computational tasks and the methods used to connect various services such as database servers, web servers, etc... Now, I don't want to get off on a rant here, but about 95% of everything ever written about distributed computing is nothing but embellished marketing hype, fancy terminology, and software engineering religious fervor. If I really wanted to inflict this on you, I would start wearing a suit, giving all of my presentations in PowerPoint, and mumbling an endless stream of complete gibberish--well, more than usual perhaps. Needless to say, I'd much rather focus on the other 5%.

With that said, I'm hoping to tackle networks from a slightly different angle than that found in a traditional class. In particular, I want to approach the topic starting with how the operating system views the network and working towards application level issues in distributed computing. To do this, you will be building a number of the software subsystems needed to have an operational networked computer. Along the way, I will be introducing a wide variety of topics from operating systems, networks, communications theory, security, and software architecture. In the end, I hope that you will walk away from this class with a firm grasp of how the network really works, how to create reliable and efficient networked software, and how to protect yourself in an increasingly hostile computing environment. Of course, I also want you to have fun.

Prerequisites

CS230/330 Operating Systems is a required prerequisite for this course as I will assume that all of the material covered in that class is common knowledge. The programming in this class is going to be fairly technical in nature and parts of it will be comparable in complexity to that of the operating systems project from Spring, 1999 (although I do not anticipate it involving nearly the same level of sleep deprivation). Although I will not force anyone to drop this class, be advised that I will only minimally review relevant operating system topics and that it is up to you to stay on top of things. Please come by and see me if you run into problems.

Also, as this is a graduate level CS course, I fully expect you to be able to read Unix man pages, find information in reference books, and to search for relevant topics on the Web. I also encourage you to have open discussions about the programming projects with your classmates.

Textbook

Note: The above books are primarily for reference.

A Word About Programming

Some of the progamming in this class will require knowledge of C/C++ and Java. However, a majority of the programming will use Python---a high-level object-oriented interpreted language. The reasons for using Python will become abundantly clear in a few weeks when you start to implement some network protocols. More information about Python is available at www.python.org and I will be handing out a variety of Python related material in class. In the meantime, I encourage you to download it and start playing with it. (It should already be installed on the Linux lab computers as well).

The Network Laboratory

For part of this class, we will be utilizing machines in the Professional Program networks laboratory on the 4th floor of Ryerson. This laboratory consists of 10 machines, 2 subnets, and 2 routers on an isolated network. Unlike other computing labs on campus, the network lab gives everyone root access to the machines and allows manipulation of the raw networking hardware. However, the 4th floor of Ryerson requires key access. To get a key, you will need to go see Alma Farias in Ryerson 154. Note: keys can only be issued to be people officially registered for this class.

Due to the lack of security on the Network Lab machines, they should only be used for testing and experimentation. You should not use the machines as a repository for your software or for general purpose use. You should also plan on obtaining an account on the Linux laboratory machines by going to services.cs.uchicago.edu if you have not done so already.

Special Security Notice

Significant portions of this class will focus on topics related to network security and the mechanisms people have developed to defend against attacks. However, in order to discuss such matters effectively, the vulnerabilities and attack strategies used against existing systems will be described in some detail. My intent is for you to be informed about such matters--otherwise you will be doomed to repeat the failures of the past.

Malicious activity related to this class will result in an F for the course and possible legal action! In other words, don't even think about using your network programming skills to break into other systems unless you are prepared to pay the price. I would imagine that the FBI would be somewhat unfriendly on this matter as well.

Academic Dishonesty

Most of the programming in this class is in the form of group programming projects. I encourage you to interact with your classmates, but all of the work handed in must be your own. If you should happen to "borrow" an idea from someone else, you should give them appropriate credit (e.g., "I figured out how to do this from John Doe."). However, be forewarned that blatant copying of code does not fall into this category. Cheating will result in an F for the course and referral to the college administration.

Grading Scale

Grading Distribution

Tenative Course Syllabus

Note : This is the first time I have taught this course so this schedule is only a rough estimate.