Computer networks are collections of computers that exchange information with each other. The most prominent example that comes to mind is the Internet, which is itself a collection of autonomously-administered and independently-run networks. Today, we use computer networks to communicate with other humans, educate ourselves, perform commercial transactions, process vast quantities of data in a small amount of time, entertain ourselves, ... the list goes on.
This course studies the science of data communication between machines. We will study various questions fundamental to computer networking, such as:
To answer these questions, we discuss the principles and algorithms by which the software and hardware for data communication is organized. In the process, we will tie these principles to the design of foundational artifacts of the largest computer networks in existence today, namely the Internet and data center networks. Finishing the course involves a number of technical readings and immersive programming assignments. The topics we will cover include the basics of Internet architecture, the design of transport protocols, the network data plane and control plane, and network verification. You will implement congestion control protocols, write software-defined network data and control plane programs, configure distributed routing protocols to achieve specified goals, and extend the functionality of the operating system kernel's network stack with safety-verified programs. A more detailed syllabus is available.
This course will use Canvas and Piazza.
Lecture materials and the full class schedule will be available on the syllabus page.
All course announcements will occur on Canvas.
Pre-requisites: It is helpful if you've taken undergraduate level computer networks (Rutgers CS 352 or equivalent) or operating systems (Rutgers CS 416 or equivalent). We will cover some of this background as necessary in this course, but you may find the course moving a bit fast if you've never met some of those concepts before. Talk to me for auxiliary materials to help you prepare. And you are of course welcome to attend a few lectures before you decide either way.
Your final course grade will be based on the following components:
This course uses absolute grading thresholds; there is no curve. Any materials due on a specific day are due at 8 pm Eastern Time on that day.
There are four in-class quizzes. They will be held for between 45 minutes to an hour during lecture. The exam covers lectures and assigned readings. The quizzes are open-book, but only paper-based materials are allowed. You can bring any amount of paper-based material (e.g. textbook, printed readings) or your own notes. No ipads, laptops, or mobile phones permitted. Only you can use the materials you bring (no sharing during the exam). No Internet access is permitted during the exam. The assigned readings cover a sequence of technical papers you will read deeply and we will discuss during lecture. Tentatively, quizzes will be held on the lecture-days (Wednesdays) 2/7, 2/28, 4/3, and 4/24.
There are four sizable programming assignments, covering the design of a TCP congestion control (kernel) module written in C, a P4 program written to enable network virtualization, BGP configuration to mimic network operator needs on the Internet, and an eBPF-C-based verified kernel extension for fast packet processing. You can do the programming assignment solo or in a team of 2 students. A virtual machine with a standard software environment will be made available for each team as the projects require superuser privilege. Only one student per team needs to submit. Clear instructions will be provided with each project. If you fail to follow these instructions, you will lose a significant fraction of points. If we cannot build or run your code, you will lose a significant fraction of points. If you submit late, and don't have an excused reason (instructor discretion or medical/religious), you will lose significant points. Tentatively, programming assignments are due on Mondays 2/19, 3/11, 4/8, and 4/29 at 8 pm ET, on Canvas.
This course welcomes open discussion and intellectual collaboration. For example, you can get help on Piazza and over email from the instructors and your peers.
You are free, in fact, encouraged, to collaborate on programming homeworks and course projects. You may also freely discuss the assigned paper readings with each other prior to attempting online quizzes on those readings. However, all source code, text, and in general, any work submitted in this course must be your (or your team's) own work or contain clear and specific attribution to any external sources that were used (e.g., "software library X at https://site.com was used to implement feature Y in the submitted program"). You must fully understand and provide your own solutions, rather than blindly incorporate the solutions from discussion or references. You are explicitly forbidden from looking at another team's code or solution code from other sources (e.g., from GitHub or CourseHero).
Copying software solutions from the web, including from Stack Overflow, GitHub, or generative AI systems (chatGPT, copilot, ...) is considered cheating. Posting questions or solutions to quizzes and programming homeworks to GitHub or question-answering services like Chegg or public course archives like CourseHero will be considered a violation of Rutgers and CS Academic Integrity Policy.
There are many ways to beef up your software portfolio to attract employers. Come talk to me for methods to do this without violating academic integrity. Posting solution code publicly in searchable form (e.g. on public GitHub) is a violation of the academic integrity policy for this course.
Please note that violation of academic integrity policies at the graduate level carries especially serious academic consequences including suspension and expulsion from the program. We will run software to detect plagiarism on all material submitted by students. Ignorance of academic integrity policies is not excusable; please ask us if you are ever in doubt.
When you work in a team, and add your name to a submitted piece of software, you accept responsibility for the integrity of how the software was put together. You may not simply shift the blame to your teammate.
Each programming homework requires you to state who you collaborated with and which resources, possibly on the Internet, that you consulted. You must be as thorough and complete as possible. Stating references and consultation is mandatory.
You are required to abide strictly by the Rutgers New Brunswick academic integrity policy and also the Rutgers Computer Science integrity policy. We will use sophisticated software to detect plagiarism. Any violations will be reported to the University's office of student conduct. Ignorance of integrity policies is not excusable if you are found in violation. If you are in doubt, please ask the instructor.
Rutgers University takes academic dishonesty very seriously. By enrolling in this course, you assume responsibility for familiarizing yourself with the Academic Integrity Policy and the possible penalties (including suspension and expulsion) for violating the policy. As per the policy, all suspected violations will be reported to the Office of Student Conduct. Academic dishonesty includes (but is not limited to):
If you are ever in doubt, consult your instructor.
Lateness: In general, late submissions to any component of the course are disallowed unless exempt by medical or religious reasons allowable by the University or the explicit permission of the faculty instructor.
In general, we are here to help you learn and succeed!
Other support resources:
Last updated: 2024-04-24 10:09:16 -0400 [validate xhtml]