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
- W. Richard Stevens, "Unix Network Programming. Networking APIs: Sockets and XTI",
Volume 1. Prentice-Hall (1998).
- W. Richard Stevens, "TCP/IP Illustrated, Volume 1". (Recommended, but not required).
- A variety of class handouts.
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
- 90-100 A
- 80-89 B
- 70-79 C
- 60-69 D
- < 60 F
Grading Distribution
- Assignment 1 (5%)
- Project 1 (35%)
- Project 2 (35%)
- Midterm (10%)
- Final exam (10%)
- Class participation (5%)
Tenative Course Syllabus
Note : This is the first time I have taught this course so this schedule is
only a rough estimate.
- Week 1
- Introduction. The big picture of networking.
- Guest lecture : The physical layer.
- Week 2
- Guest lecture : The datalink layer.
- The operating system interface to the network.
- Assignment 1 Due
- Week 3
- TCP/IP. UDP, ICMP, and TCP.
- TCP/IP. TCP.
- Week 4
- TCP/IP. TCP and DNS.
- TCP/IP security.
- Week 5
- Sockets and application level protocols (FTP, Telnet, SMTP, etc...)
- HTTP and the Web.
- Project 1 Due
- Week 6
- Concurrency, performance, reliability, and security issues in sockets.
- Remote procedure call (RPC).
- Week 7
- Remote procedure call (NFS).
- Distributed objects.
- Week 8
- Distributed objects.
- Distributed objects.
- Week 9
- Mobile agents and applets.
- Even more security (restricted execution environments).
- Project 2 Due.
- Week 10
- TBA (Miscellaneous topics).
- TBA (Miscellaneous topics).