There will be two kinds of homework assignments: reading assignments and textbook-style questions. You should have finished the assigned reading before coming to lecture. In addition, there will be about four sets of written homework.



Over the course of the quarter, you will implement a user-level TCP/IP stack and a small web server that runs on top of it. Your code will not implement the full functionality of HTTP or TCP/IP, but it will implement enough of it to be able to interoperate with other, complete implementations. In keeping with the top-down approach of Kurose and Ross, you will build this from the web server down instead of from the network card up. I will initially provide you with the whole stack (as object code) and you will implement the web server. Next, I will peal away the layers of the stack, leaving you to implement your own versions. Each layer will have well-defined interfaces that you will fill out. Here are the layers, as well as each one’s percentage of the project grade. Note that the layers in italics will be supplied to you and are included only for completeness.


The implementation language will be C++ and the platform will be Red Hat Linux. You may also find that the C++ standard template library will make your life easier. You’ll be using the PCs in the TLAB, which will be specially configured for this class. You are welcome to use other machines, but we must be able to compile and run your code on our machines. Note that the Ethernet layer of the code requires that your kernel supports the Berkeley packet filter interface and that you can run your Ethernet card in promiscuous mode to extract and inject raw packets of such testcases.


To evaluate your project, we will spot-check your source code, compile it, and run randomized testcases on it. When appropriate, we will supply you with examples. All the projects are to be done by teams of two students. Each team should work cooperatively on the design, implementation, and testing of their solutions. And the work should be shared in a fair manner. The submissions need to include a simple specification of work undertaken by each party.


        01/03 Project 1, due 11:59pm 01/18

        01/18 Project 2, due 11:59pm 02/22

        02/23 Project 3, due 11:59pm 03/12


        Minet Sockets 

        The TLab Cluster

        The Minet TCP/IP Stack

        Sockets in a Nutshell 

        UNIX System Programming on a Nutshell 

        Useful UNIX Tools

*All projects and related materials are developed by, and in courtesy of Professor Peter A. Dinda.