This course ended
December 17, 2018

CPSC 441
Networking and Distributed Processing

   Department of Mathematics and Computer Science
   Hobart and William Smith Colleges

   Fall 2018.

   Instructor:  David J. Eck  (

   Course Handout:

   Monday, Wednesday, Friday, 12:20–1:15
   Room Gulick 2000
Lab Worksheets
Lab 1, September3
Basic Network Tools
Lab 2, September10
Mostly HTTP
Lab 3, September17
Writing a Web Server
Lab 4, September 24
Web Serving
Due October 15
Lab 5, October 15
Mostly TCP
Lab 6, October 22
NFS / iptables
Lab 7, October 29
ARP / Mandelbrot
Lab 8, November 5
Java Distributed BigPrime
Lab 9a, November 28
MPI,Part 1
Lab 9b, November 28
MPI,Part 2

First Week: August 27, 29, and 31

Welcome to the course!

We will spend the first week trying to get an overview of computer networking. You should read as much of Chapter 1 in the textbook as you can. The most important part is Section 1.5, which discusses layered protocols; we will continue that topic next week. Sections 1.1 to 1.3 are useful as a general introduction to the overall structure of networks. Section 1.4 is rather technical; I will talk about some of the ideas from that section, but you shouldn't worry too much about the details. Sections 1.6 and 1.7 are interesting, but you aren't responsible for the material in those two sections, and it will not be covered in class.

Second Week: September 3, 5, and 7

On Monday, we meet in Rosenberg 009 for the first lab. You should read the lab worksheet before class.

On Wednesday and Friday, we will begin our discussion of the application layer of the Internet protocol stack, with HTTP and SMTP as our first examples. The reading in Chapter 2, Sections 1 to 3.

Third Week: September 10, 12, and 14

As usual, Monday's class will be a lab in Rosenberg 009. On Wednesday, I will have a little more to say about HTTP and SMTP, and then we will look at network programming using "sockets." The book covers socket programming in Section 2.7, using the Python programming language. You can read that section, but you will be programming in Java. You can read about Java's implementation of sockets in my Java programming textbook, Section 11.4, subsections 11.4.3 to 11.4.5. And you can read about writing multi-threaded network applications in Section 12.4, subsections 12.4.3 and 12.4.4.

Fourth Week: September 17, 19, and 21

Monday's class will be in Rosenberg 009 for Lab 3, which asks you to write a multi-threaded web browser. The program is due in two weeks, but you should have substantial progress made by next week.

The reading for the week is Sections 2.4 to 2.6 in the textbook. Section 2.4 covers DNS, and we will spend some substantial time on it. Sections 2.5 and 2.6 cover peer-to-peer applications, video streaming, and content distribution networks. We will not cover everything in those sections, but it would be useful to read them in their entirety. In particular, I will not talk about BitTorrent (but I will talk about how peer-ro-peer applications can work in general).

Fifth Week: September 24. 26. and 27

In the lab this Monday, you will install a self-signed certificate in the Apache web server on your virtual machine, so that it can do https. You will also learn about "daemons" and how to run your own web server program Lab 3 as a daemon on your server. The web server program itself is due next Monday, along with the virtual machine setup from Lab 4.

We begin Chapter 3 this week, which covers the transport layer, primarily TCP. The reading for this week is Chapter 3, Sections 1, 2, 3, and 4. Note that we will cover just some basic ideas from Section 4, which deals with principles of reliable data transfer. When we move on to Section 5, we will cover reliable data transfer in TCP in some detail. However, Section 5 is not included on the test.

There is a test in class next Wednesday, October 3. Because of the test, there is no lab next Monday.

Sixth Week: October 1, 3, and 5

There is a test on Wednesday. A study guide was handed out in class on Friday, Sept. 21.

Information about the final project was also handed out on Friday.

Aside from the test, we will continue with TCP. The reading is Chapter 5, Sections 5, 6, and 7. Chapter 5 covers the implementation of reliable communication in TCP. Sections 6 and 7 are about congestion control. As with reliable communication, we are more interested in the TCP implementation of congestion control than in the general principles, so you are only responsible for general ideas from Section 6. We will probably continue with congestion control for part of next week, before moving on to the network layer.

There is no class next Monday because of Fall break, and we will not have a lab next week.

Seventh Week: October 10 and 12

There is no class on Monday because of Fall break.

On Wednesday, we will look at congestion control in TCP, which will complete our discussion of TCP and of the Transport layer. On Friday, we will move on to the Network Layer. The reading for the week is Sections 3.6.2, 3.7, and 4.1. I also suggest going back and reading Section 1.3.3, which is about the structure of the Internet.

My solution to the web server programming assignment (Lab 3) can be found in the file /classes/cs441/

There is a homework assignment due in class next MOnday.

Eighth Week: October 15, 17, and 19

On Monday, we will be back in Rosenberg 009 for Lab 5. On Wednesday, Steve Short, from the IT Department, will visit the class to talk about networking and the HWS network. Aside from that, we will continue with our discussion of the IP protocol, Chapter 4. The reading from Chapter 4 is sections 4.1, 4.2, and 4.3.

Ninth Week: October 22, 24, and 26

After a few last words on Chapter 4, we will move on to Chapter 5, which mainly covers routing algorithms. There are also short sections on ICMP and SNMP. We will not cover a lot of details in this chapter. On Friday, I plan to briefly talk about ARP, Section 6.4.1, in preparation for next Monday's lab.

Tenth Week: October 29 and 31; November 2

We discussed the link layer. The reading was Sections 6.1, 6.3, and 6.4. (But there is other interesting material in the chapter. I encourage you to read the whole chapter even though it is not required.) The main topics were point-to-point versus multiple access media, types of multiple access, MAC addresses, and Ethernet.

The lab was about ARP, but it also introduced the idea of distributed processing, using the Mandelbrot set as an example.

Eleventh Week: November 5, 7, and 9

The lab this week asks you to write a distributed processing application in Java. The program will be due Friday of next week, November 16. We will spend some time on Wednesday discussing the program. After that, we will finish up Ethernet, and we will begin talking about wireless and mobile networks, which is covered in the textbook in Chapter 7.

There is a test next Wednesday, November 14.

Written final project proposals are due next Monday, November 12.

Twelfth Week: November 12, 14, and 16

There is a test on Wednesday, November 14. A study guide was distributed in class.

Aside from the test, we will look very briefly at WiFi and cellular networks (Chapter 7). And on Friday, we will discuss MPI (Message Passing Interface), an API for distributed computing. We will use MPI in the last two labs. There will be a handout about MPI on Friday.

There is no class next week because of Thanksgiving break. Have a great Thanksgiving!

The first class after Thanksgiving will be an MPI lab in Rosenberg 009.

Thirteenth Week: November 26, 28, and 30

Aside from your final projects, the remaining work for the semester will be two labs using the OpenMPI distributed programming API. The first MPI lab will be this Wednesday, November 28, in Rosenberg 009. The second lab will be next Monday. Be sure to read the MPI handout before the lab on Wednesday!

I will spend some time on Monday talking about distributed/parallel processing in general and about some of the peculiarities of C that that you need to know about to use MPI. For the rest of the week, I will be talking about network security.

Fourteenth Week: December 3, 5, and 7

On Monday, the class meets in Rosenberg 009 for the final lab of the semester. This lab is the second part of the MPI lab from last week. Both parts of the lab are due this Friday (but won't actually be collected until early Saturday morning.

I will continue talking about security for part of the class on Wednesday, followed by some discussion of clusters and "warehouse scale computing." After that, we shall see...

I am hoping to have more volunteers to do their final project presentations next Monday, on the last day of class, or even this Friday.

Fifteenth Week and End of Semester

The last day of class for this course is Monday, December 10. The day will be devoted to several final project presentations. The remaining final project presentations will take place during the scheduled final exam period for this course, 8:30 to 11:30 AM on Monday, December 17.

          Tuesday,  December 11:   12:00 – 3:00
          Thursday, December 13:   12:00 – 3:00
          Sunday,   December 16:   11:00 – 3:00
          Monday,   December 17:   12:00 – 3:00
          Tuesday,  December 18:   11:00 – 3:00