Course Outline

This course presents computer networks at a functional level, with strong emphasis on programming distributed applications over a network. Discussion will be based on open networking and application standards such as the TCP/IP protocol suite and the Portable Operating System Interface (POSIX). The basic topics covered are the TCP/ IP architecture and programming, the client-server model, and system programming. We may address advanced topics (such as network file systems, streaming, tunnelling), but the main focus is on programming distributed applications (in C or C++).

The theoretical discussion is kept to a minimum, as the course is primarily about practical aspects. In other words, we are actually interested in programming network (or distributed) applications, and so the main focus of the course is on the Application and Transport layers of the TCP/IP network model, including the TCP and UDP protocols in their incarnation as socket programming. The following is a rough (i.e., subject to change) outline:

Introduction to TCP/IP networking 1 week
The client-server model 1 week
Protocols 1 week
The socket API 1 week
Client software design 1 week
Server software design 1 week
Concurrency 1 week
Multiprotocol and multiservice servers 1 week
Advanced topics 2 weeks
Lower levels of the TCP/IP model 2 weeks

Advanced topics are scheduled to contain elements of distributed algorithms, though this may change depending on how the course progresses. The course will wrap up with a discussion on the underlying network layers, with the main focus on the Network layer (IP). In particular, we discuss how the lossless, connection-oriented features of the TCP protocol are accomplished using the underlying switched network infrastructure.

This course has a heavy programming component (see the section on grading for details). Programming will be done in either C or C++. At a minimum you are expected to know C++ very well and to be able to effectively use C constructs in your C++ programs when this is required by the API being used.