Computer networks from ISPs to WiFi and cellular networks are a key part of the information economy. These networks are the foundation for the Web, and they enable companies such as Google, Facebook and Amazon. This course introduces the fundamental problems of computer networking, from sending bits over wires to running distributed applications. For each problem, we explore the design strategies that have proven valuable in practice. Topics include error detection and correction, multiple-access, bandwidth allocation, routing, internetworking, reliability, quality of service, naming, content delivery, and security. As we cover these topics, you will learn how the internals of the Internet work to support the Web and other networked applications. You will develop a detailed understanding of widely-used networking technologies such as TCP/IP, HTTP, 802.11, Ethernet, and DNS.
We assume a rudimentary understanding of probability (such as the likelihood of an event) and computer system organization (such as binary representations and arithmetic). You should be comfortable with simple calculations and manipulations using scientific notation. We teach the course at the upper-undergraduate level. To do the optional, hands-on exercises you should be comfortable with installing systems software and running command-line programs.
There is an optional textbook: Computer Networks (5th Edition, either U.S. or International version), by Tanenbaum and Wetherall. We recommend (but do not require) the text if you are serious about mastering the material, as it provides accompanying explanations in greater detail and more depth, as well as extra topics and a reference.
The course consists of two to three hours of video lectures per week, presented in short segments. For those seeking to pass the course, there will be regular, required homeworks of textbook-style problems and optional hands-on exercises to cover the basics of the material. The course has a midterm and final exam.