The focus of this course is the design of computer networks, including hardware, software, physical layer issues, protocol design, wireless, internetworking, routing, congestion control, naming, security, and peer to peer systems. While it is relatively easy to learn how a specific network system works, it is much harder to design a good one. The Internet is a great example — one can learn most of the aspects of how the Internet protocols work in a few weeks, but that won’t help you (much) in understanding how the Internet is evolving over time. The Internet is successful for reasons that are mostly hidden, 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, industry is developing new protocols all the time, often quite poorly. As a recent example, one need look no farther than 802.11 (WiFi) — when first introduced, it had fundamental flaws in security, resource allocation, scalability and management. Added to the fact that the Internet itself is poorly designed for many of these same issues, the need for a better understanding of how to design network systems has never been greater.

Project and Problem Sets

The best way to learn how to design protocols is by practice, and so a key piece of this course is a set of programming assignments called Fishnet, involving building seemingly simple (but in fact, quite difficult to implement) protocols on a simulated ad hoc wireless network. If you have access to a few smart phones, it will be straightforward to port the system to that environment, but we aren’t assuming that for this class. We will provide more details about the project and due dates during the first class. The project is designed to be done individually.

There will also be two problem sets handed out during the quarter.


In our experience, students often learn more from each other than they do from the instructor. Thus, we encourage you to collaborate with your classmates, in all aspects of the course, with only one exception outlined below. The grading in the class is emphatically not curved; we would like nothing better than for all of you to get a 4.0.

To draw a very clear line, you may use any idea from any other person or group in the class or out, provided you clearly state what you have borrowed and from whom. If you do not provide a citation — that is, you turn other people’s work in as your own — that’s cheating. Anything else is fair game. Of course, we’ll be grading you on the ideas you’ve added, but you should always borrow as much as you can as a starting point — there’s no point in reinventing the wheel.

The one exception is that there will be an open book, take home final; the final is to be done individually without consultation with anyone else.


The reading list is a mixture of textbook material and research papers. The textbook material is designed to help you understand the basics of how network systems work today. The research papers have two roles: some of the papers are historical, to help expose you to the underlying motivation behind the network systems we take for granted. The second is to expose you to some of the questions at the state of the art in building network systems and to help identify the limits of the research community’s knowledge — what are the open research problems in networking.


It is a requirement that you do the reading before class, as we will take the research papers as a starting point, not the end point of the class discussion. For each week other than the first, we will post a set of questions to the discussion board, linked off the course web page, based on the reading. You are required to add a unique comment to the discussion of one of the questions before Monday, 5pm, on the day that reading was assigned. (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., if the question is about one of the research papers a blog entry could be: the broader context for the work, a question about some aspect of the paper, an answer to someone else's question, a methodological flaw, a pointer to related work not described by the paper, etc. We will automatically grant one mulligan during the quarter, if you neglect to post.


The take home final will be handed out in the last class of the quarter (Dec 1), and will be due by email one week later (Dec 8 at 9:30pm). The exam will be designed to take no more than two hours to answer.


Blogs: 15%; Homework: 10%; Project: 40%; Final: 35%.


9/29: Tom AndersonIntroduction and Physical Layer
(pptx) (pdf) (ink)
10/6: Tom AndersonMedium access and Local Area Networks
(pptx) (pdf)
10/13: Ratul MahajanInternetworking 1
(pptx) (pdf) (ink)
10/20: Ratul MahajanInternetworking 2
(pptx) (pdf)
10/27: Tom AndersonTransport 1
(pptx) (pdf) (ink)
11/3: Tom AndersonTransport 2 and QoS
(pptx) (pdf) (ink)
11/10: Ratul MahajanFinding machines and content
(pptx) (pdf)
11/17: Ratul Mahajan Building large-scale services
(pptx) (pdf)
11/24: Tom AndersonNetwork Security
(pptx) (pdf)
12/1: Ratul MahajanEvolution and Future Directions