Chapter 1
INTRODUCTION
Here are some ideas of projects in the Networking area. Some of these are new, and
some are ideas that have run before but could be run again. Note that, unlike the
normal project ideas, these ideas do not have a contact listed against them. They are
there to give you ideas of the sort of things that could be done. If a project idea
seems interesting, and you would like to pursue it further, then you should discuss it
with one of the lecturers who are experienced in the Networking area: Bill Buchanan,
Gordon Russell, Ahmed Al-Dubai, Imed Romdhani, Jim Jackson, Robert Ludwiniak
or Neil Urquhart. They may not be able to help you directly, but will at least be able to
point you to somebody better placed, perhaps because their specialist knowledge is
in the area of the project.
This introduces the underlying concepts behind networking using the
Internet and its protocols as examples. There are two goals:
(1) to give you an understanding of how networks, especially the Internet, work,
(2) to teach you network programming.
We will cover the first five chapters of Kurose in detail, working our way down
the network stack from the application layer to the data-link layer. Concurrent
with the lectures, you (in groups of two) will be building a functional TCP/IP
stack and a small web server that will run on it. What you build will be “real” –
your code will interoperate with other TCP/IP stacks and you’ll be able to talk to
your web server using any browser on any TCP/IP stack.
This is a learn-by-doing kind of class. You will get your hands dirty by
examining parts of our Internet infrastructure and building other parts. It will be
a lot of work, but it will also be a lot of fun, provided you enjoy this sort of thing.
We will assume that you do and that you will make a good faith effort. We don’t
want to have to spend too much time measuring your performance. If you care
about what we’re teaching, you’ll do a better job of that yourself, and if you don’t
care, then you should take some course that you do care about.
The goal of the networking project is to enable you to do the following:
Build implementations of the Internet protocols
Generalize this knowledge to other networking protocols.
Be a competent network and systems programmer.
Think like a networking practitioner
Read and judge articles on networking in trade magazines
Begin to read and judge research and technical articles on networking
Create simplicity and reliability out of complexity and unreliability
Structure and design software systems to achieve that simplicity and
Reliability