CSE logo University of Washington Department of Computer Science & Engineering
 CSEP 561: PMP Network Systems, Fall 2013


Instructor: Arvind Krishnamurthy
Office hours: Tuesday 5:00pm-6:00pm, in CSE544, or by appointment.

TA: Haichen Shen (haichen AT cs DOT washington DOT edu)
Office hours: by appointment (send email)

Lectures: Tuesdays, 6:30pm-9:20pm, in CSE 305.

This course is on how to design (good) computer network protocols. While it is relatively easy to learn how a specific network protocol works, it is surprisingly hard to design a good network protocol. The Internet is a great example - one can learn most of the aspects of how the Internet protocols work in a relatively short period of time, but that won't help you (much) in designing a new protocol. The Internet is successful for reasons that are mostly hidden in its design, embodying specific, debatable tradeoffs in balancing robustness, interoperability, scale, evolution, flexibility, operator incentives and security. And while you might think that we don't need any new protocols beyond the Internet, a quick look inside the Internet shows that it is still evolving rapidly, along with mobile phone networks, wireless and home networks, RFID and sensor networks, and so on; the need for understanding how to design better protocols has never been greater. This course will introduce the different, known design techniques. It will ask you to demonstrate an understanding by synthesizing them and exploring tradeoffs in problems, class discussion, and by discussing research papers.

Prerequisities: the basic prerequisite is to have taken an undergraduate operating systems course (CSE 451 or equivalent) or an undergraduate networks course (CSE 461 or equivalent). If you haven't taken an undergrad OS or networks course, please come talk to Arvind.

Readings: Think of this course as halfway between CSE 461 (undergraduate networks) and CSE 561 (graduate networks). The readings are textbook material and supplemental research papers. The textbook material is designed to help you understand the basics of networking principles; the research papers are to look at some issues more deeply.

Textbook: Computer Networks, 5th edition, Tanenbaum and Wetherall. (You need the 5th edition, it is different than the 4th.)

Blogs: After reading the research paper for the week, you are required to add a unique comment to the discussion of one of the questions for the paper before 2pm on the day of class in which the paper will come up. (This is to give time for everyone to read the blog entries before class.) Note that the earlier you post, the easier it is to be unique. Please keep blog entries short: they can be anything that provides insight into the question being asked, e.g., providing a direct answer, agreeing and elaborating a point in prior answers, disagreeing with prior answers, pointing out related issues, etc. We will automatically grant one mulligan during the quarter, if you neglect to post.

Project: Individual projects. More details coming soon.

Exam: No exams.


Mailing list: When you register for the course, you'll automatically be added to the class mailing list. (csep561a_au13@uw.edu). This list will first be created during the first week of classes. To manage your subscription after then, visit mailing list. You will be subscribed using your u.washington.edu email address. But, you can modify your subscription to use an email address of your choice. Note that you can only post to the mailing list from your subscribed email address.

Useful Links

Here's the link to the class discussion board to post anything of relevance to the course:
and the link to the Hotcrp site for posting blog entries:
and the link to the assignment dropbox:
and the link to the course videos:

Paper schedule

Here is the schedule of textbook and paper readings for the course. This will likely be tweaked as the quarter progresses. Note that you're required to read assigned papers, but the optional additional papers are just that: purely optional, for your interest, if you choose to go deeper on your own.





Oct 1 Introduction/Physical layer intro TW Secs: 1.3-1.4
Oct 8 Physical/Link layer physical TW Secs: 2.1-2.3, 2.5, 3.1-3.3
Oct 15

Link layer

link TW Secs: 3.2, 4.2-4.4
Oct 22 Network layer
  • Network layer: services, internetworking, prefixes, forwarding, ARP/DHCP, fragmentation, errors, ipv6, NAT
  • Routing layer: dijkstra, link state
  • The Revised ARPAnet Routing Metric
IP TW Secs: 5.1, 5.5-5.6
Oct 29 Routing layer Routing TW Secs: 5.2, 5.6
Nov 5 Transport layer Transport TW Secs: 6.4, 6.5
Nov 12 Congestion control Congestion control TW Secs: 6.3, 6.5
Nov 19 Datacenter networks Datacenters
Nov 26 Web/P2P Web/DNS TW Secs: 7.1, 7.3, 7.5
Dec 3 Security Security TW Secs: 8.1-8.6


Everybody registered for the course should already have had an instructional UNIX account created for them by the department support staff, and have been notified of it. Using this account, you can remotely log into (via ssh) the attu.cs.washington.edu compute cluster. You can find more information about instructional resources here.

You should also be able to do the programming assignments on your own personal machines; none of them require large or exceptionally powerful machines. I'd recommend doing your work on Linux; I'd start with a standard Linux Ubuntu distribution. Note that the department has made virtual machine images available with the departmental linux installation on them. You'll need to get ahold of VMware to use them.

A few rules of the road are worth mentioning. For design questions, you should feel free to talk with each other about the question and ideas that you come up with. You should not, however, share your written answers with each other directly. If you do discuss ideas with each other, please cite who you discussed with in your turned in work. This is mostly so that you get in the habit of properly attributing collaborations.

Similarly, you should feel free to talk with each other about the programming assignments, and share ideas as you see fit. You can also make use of Google or other resources. However, you must not share code with each other, or rely on code you find else where, such as the Web, to solve the programming assignment directly: you must implement your own code to solve each programming assignment. Unless the programming assignemnt specifies otherwise (and a few of them will), tou can pick whatever programming environment or tools to build on that you like -- e.g., you can make use of shells, interpreters, and within reason, libraries or other building blocks that don't directly solve the problem for you. As before, if you do discuss a programming assignment with someone else or find useful sources of information (e.g., code or technical descriptions on the Web), please cite or otherwise attribute all of your sources.