This course is surprisingly enough all about computer networks. The general discussion is kept to a minimum though, as the course is primarily about practical aspects. In other words, we are actually interested in programming network (or distributed) applications, and the principal topic is thus the TCP protocol in its 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 | 2 weeks |
| Concurrency | 1 week |
| Multiprotocol and multiservice servers | 1 week |
| Advanced topics | 2 weeks |
| Underlying network processing and algorithms | 1 week |
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 bridge between the matter considered in earlier courses and the matter considered here. In particular, we discuss how the lossless, connection-oriented features of the TCP protocol we use in this course are accomplished using the underlying switched network infrastructure. You know from previous courses how a network is electrically constructed, this wrap-up will outline the algorithmic features that convert a bunch of wires and machines into a system that allows the use of the TCP protocol to create distributed programs.
This course has a heavy programming component (see the section on grading for details). Programming will be done in either C or C++, although I will stick in my lectures, examples, Web pages, whatnot to C++ (since C is not actually taught here at Bishop's).