Quick links

  • Zoom: Join lectures here!
  • EdStem: Used for announcements, online questions, etc.
  • Gradescope: Submit homework and exams here, and receive grades for all assignments
  • Panopto: View recorded lectures here
  • Hours: Used to manage queuing for all one-on-one office hours
  • Extension request form: Used to manage queuing for all one-on-one office hours

At-a-glance

CSCI 1680 is an undergraduate course in computer networks. We will cover the technologies supporting the Internet, from Ethernet and WiFi through the routing protocols that govern the flow of traffic, and the web technologies that are generating most of it. A major concern is understanding the protocols used on the Internet: how they work, their shortcomings, what the issues are, and what improvements are on the horizon.

Lectures: T/Th 09:00-10:20 EDT (All lectures will be recorded and streamed live via Zoom.)

Location: CIT 368

Prerequisites: Students are expected to have taken an introductory systems course, eg. CSCI 0330, CSCI 0300, CSCI 1310, CSCI1330, or must have consent of the instructor.

If you have questions about whether this course is a good fit for you, please feel free to contact the instructor!

Learning Goals

This course teaches the principles behind the organization of computer networks, from those connecting two computers to one of the largest technological systems we have ever built, the Internet. This knowledge can be useful at multiple levels, from building your own networked programs, designing new communication protocols as new technologies arise, debating whether network providers can treat different types of traffic differently or governments can eavesdrop on conversations, and understanding how, for example, Pakistan could at one point inadvertently bring down Youtube for half of its users.

We teach you about layering and the “end-to-end principle”, about how to encode information to be transmitted by manipulating some physical property of a medium, how to scale communications beyond a few nodes through hierarchy and through more sophisticated lookup structures, how the Internet works at the local and global levels, including how its connected computers can share the capacity of the links between them with some notion of fairness. We teach you how the Web, Bittorrent, Netflix, and other applications work, including how to write your own. We teach you how wireless communications work at a basic level, and how the issues involved in trying to communicate securely.

The course uses two main learning mechanisms: classroom lectures by the instructor with some live demonstrations, and hands-on programming projects. Homework assignments are designed to give you more practice with the “theory” and design aspects of networking. The four projects aim to give you substantial experience in building and using networked programs. Except for the first project, projects are done in pairs, and have, for the most part, little “support code”. These assignments are designed to help train you to work in groups, as in almost no software engineering career will involve working alone, and to help strengthen your software design skills. You can complete projects in any of four systems programming languages (C, C++, Go, or Rust), which all of these have similar networking APIs, to help you build your software skills in a direction of your choosing.

Topics

For a list of topics, see the Schedule.

Expected workload

Coursework consists of 4 programming projects, 6 written homeworks, and weekly post-lecture quizzes. This course does not have exams. For more details on what each assignment entails, see Course Mechanics.

In addition to 3 hours per week in lecture (36 hours total), you should expect to spend 3-4 hours on each homework assignment, with the majority of your time dedicated to the four projects, which are long-term programming assignments. The first and last project should take between 20–30 hours each, and the larger projects should take 50–60 hours each, with the work spread out over several weeks. In total, you should expect your time commitment will be at least 180 hours over the course of the semester.

Perhaps the single most important advice for this class is to start the projects early and work steadily over the assigned time—do not leave the projects to the final week or days before the deadline. Each project has intermediate “milestones” before the final deadline, which aim to provide feedback midway and stimulate early progress.

Capstone: Students may use this course as a capstone, which entails completing extended versions of two projects (IP, TCP). The extensions are open-ended and require a detailed writeup of what you implemented and how it works. Capstone work is graded interactively by demonstrating your work to a TA or the instructor.