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
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.
Handouts
*All
projects and related materials are developed by, and in
courtesy of Professor
Peter A. Dinda.