Topics

This course introduces the basics of networking, ranging from sending bits over wires to the Web and distributed computing. We focus on the networking ground between these two extremes, particularly focusing on the engineering of the Internet - goals, constraints, solutions, and experiences. The outcome of this course for you should be an appreciation of the fundamental challenges of networking, design strategies of proven value, and common implementation technologies. Topics will include: framing, error correction, packet switching, multi-access (Ethernet), addressing and forwarding (IP), distance vector and link state routing, queueing and scheduling, reliable transport, congestion control (TCP), quality of service, naming (DNS), and security.

Course Structure

It's likely that there will be elements of this course that aren't quite what you were expecting. Some explanation of what is going on, structurally, may help in understanding what to concentrate on, should things get murky.

There are basically three main threads to the course. The first is learning the specifics of how the major Internet components are built and operate. This means, for example, learning about IP, BGP, TCP, DNS, and HTTP. Becoming familiar with these specifics is important, they affect and explain a lot about how current systems are built. This thread is most directly addressed by the text and the lectures.

The second thread is a more general set of concepts/problems that arise whenever networking is involved, that is, abstracting from the specific Internet solutions to the more general problem and its potential solutions. You'll confront these problems every time you write any networked code, and so understanding what they are is another important goal. As you see, when you build a networked application you'll have to address many of the same issues that the Internet fabric itself must address. Your understanding of the specific solutions used by the Internet can help you, so long as you can abstract its lessons.

The final thread of the Winter 2016 offering of this course is security and anonymity. The course project will involve those topics, even if they're not the main points of the project.

Pre-requisites

Officially Required

Helpful

I'll assume you have no networking experience, even though there can be some networking in CSE 333. I'll assume as well that you have no experience with concurrency, even though you have had some parallelism in CSE 332 and possibly some concurrency in CSE 333. We won't be covering all the details required to build working networked, concurrent programs, though. There will definitely be things you'll need to look up on your own.

There is a substantial project for this course. You are free to do it in whatever programming language you prefer. That, of course, means that there will be no starter/skeleton code. (We will be supplying pieces of the application, but you interact with them only over the network, not by direct invocation at the programming language level.)

Assignments / Projects

There will be up to three kinds of assignments given throughout the class: This is a 4 credit hour course, meaning that it deserves something like 12-16 hours of your undivided attention per week. Try to reserve hours for the reading and stick to your schedule, even if some programming assignment that isn't going as well as you expected (i.e., all of them, for all of us) is coming due shortly.

Start projects early. There are countless things that can go wrong. Run into those things early, when you can afford to suspend working until you get help, rather than 4 hours before the project is due.

Exams

There will be one midterm and a final exam for this course. The dates are subject to change, with reasonable advance notice. It is especially possible the format and scheduling of the final exam will change. As an example, it could become a take-home exam.

Grading

This might be "fine tuned" later, but grades will be assigned roughly as follows:

Policies