The Internet is a remarkable engineering triumph. It is one of the few systems of any kind to have successfully scaled in numbers of users by six orders of magnitude while providing (nearly) continuous service over the past three decades. The challenge of building a system that works for hundreds of millions has led the Internet's designers to an overriding focus on robustness and scalability; numerous features have been added since the initial design to cope with increased numbers of users and increased numbers of providers. Even so, future challenges such as Internet telephony and the post-PC era promises even more rapid change in the Internet.
This course is designed to bring students up to the state of the art in networking research, and to provide the tools necessary to allow students to stay current after the course ends. The Internet is not a static target! Our approach is to start by assuming no background, and then to run the course at a very fast pace -- "like drinking from a fire hose". As a rough estimate, the pace of the course will be roughly 2-3 times that of the equivalent undergraduate course (CSE 461). To ensure that everyone in the class understands the basics, there will be a set of programming assignments to build TCP-style transport (due week 4), routing and congestion control (due week 7), and multicast support for a shared whiteboard application (due week 10), on top of a framework we provide. Programming assignments are in Java, but we provide a short tutorial for those who are only familiar with C or C++. There will also be five problem sets. The course has no midterm or final exam.