Project.

An important component of the course has been a significant project including design and implementation of an (almost) real protocol. The cornerstone of each project has been either a reliable transport protocol or a reliable link level protocol, operating in an unreliable network environment. There are two problems which had to be dealt with in designing such a project. First, the only available network environment has been a highly reliable local area network. Second, students use UNIX-based workstations and may only work at user level. To deal with the first problem, a special program, called the "troll," has been implemented, by M. Solomon and M. Tasman, to introduce the required unreliability at user level. Students send their packets to the troll process which introduces the desired unreliability. The troll uses UDP to transmit packets between workstations. It allows one to introduce packet loss, duplication, reordering, delay and garbling. Source code for the troll is available upon request to the author of this paper.

In addition to the reliable transport protocol, students have also implemented one or more applications, including a file transfer, a multi-participant conferencing system and a talk program.

A key feature of the project is the requirement that students work in teams of two or three. For many students this is their first experience working in teams. Their first task is to formulate a plan for completing the project including appointment of a team leader, division of responsibility and agreement on programming conventions.

There are a number of project reviews. The first involves submission of a preliminary design document. The design must include protocol features such as flow control procedures (e.g., window procedures), error control procedures (e.g., checksum, retransmission strategy), connection setup and tear-down and details such as header and packet formats. The design must also describe implementation details such as buffer allocation strategies, timer handling mechanisms and programming interface specifications. The preliminary design is critiqued after which it is modified and resubmitted.

The second project review usually involves demonstration of some protocol functionality such as establishment and tear-down of a connection. The third project review occurs several weeks before the end of the semester. At this time, significant functionality must be demonstrated. At the final demonstration, students submit a final design document and fully documented code. To receive an A on the project, they must first demonstrate required functionality. The instructor is then allowed to try out the code and it must not break. In addition, such features as run-time status information and quality of user interface are considered.

It is worth noting that performance is generally not considered important in evaluating projects. Projects are written at the user level. Furthermore, all data generally resides on file servers. Hence, except within very wide bounds, performance differences are not very meaningful.

The project has been remarkably successful. Most groups complete the project and many are outstanding.