Course Description

Computer networking is a rapidly advancing field, and the Internet is already an integral part of
society. It is therefore important for computer scientists and computer engineers to be familiar
with the fundamentals of computer networking. This course will focus on the architecture, algorithms,
and protocols of the Internet. Topics include local area networking, routing, congestion control,
network security, and applications such as peer-to-peer and content distribution networks. This
course will be systems oriented, and students will work on hands-on projects to learn
how to build and understand Internet applications.

Prerequisites

The official prerequisites for this course are CS 3600 and CS 2600 (or equivalents). This course is systems
oriented, so I expect you to understand the basics of computer architecture and operating systems, and to
have experience implementing non-trivial systems-type projects. Basic knowledge of the Unix command line
is also essential. You should know how to write code using emacs/vim, write a makefile, compile/debug code,
check for running processes, kill runaway processes, and create compressed archives.

Class Forum

The class forum is on Piazza.
Why Piazza? Because they have a nice web interface, as well as iPhone and Android apps.
Piazza is the best place to ask questions about projects, programming, debugging issues,
exams, etc. I will open up discussion boards for each lecture right before class, so if you have questions
while in lecture feel free to post them. In order to keep things organized, please tag all posts
with the appropriate hashtags, e.g. #lecture1, #project3, etc. I will also use Piazza to
broadcast announcements to the class. Bottom line: unless you have a private problem, post to Piazza
before writing me/the TA an email.

Textbook

The focus of this course will be on reading important papers from the networking research community.
Thus, I do not require that you get a textbook. However, a textbook may be useful if you are not totally
comfortable with network fundamentals, or if you just want to have a handy reference book.
Officially, the textbook for the course is:

Reading and Participation

As previously mentioned, a large component of this course will be reading important papers from
the networking research community. Some of these papers are classics: older, but intrumental in
guiding the design of today's networks. Other papers will be more contemporary, and focus on
improving existing networks, or even replacing them entirely. All the papers can be found
here.

Several papers will be assigned as reading before each lecture. A discussion thread will be opened
on Piazza for each paper, and each student must post 1) a summary of the paper in three senteneces or
less, and 2) the strengths (at least 3) and weaknesses (at least 3) of the paper before Monday
at 9am. You are also encouraged to ask questions about the paper and respond to other students'
questions.

During class, students will be called at random to briefly summarize papers. Thus, although
attendance in lectures is not required, if you get called and you are not present (or you haven't
read the paper), then you are busted.

5% of your final grade will be based on participation. If you post on Piazza when you are
the assigned discussion leader for a paper, and summarize papers when called in class, then
you will receive full marks for participation.

Projects

There will be five programming projects throughout the semester. Programming projects are due at
11:59:59pm on the specified date. We will use a turn-in script to create a compressed archive
of the project files, timestamp them, and submit them for grading. These projects
require significant design and coding, hence students are recommended to start early!

You will form groups of two people (possibly three, if necessary) to do the projects.
I will allow you to form your own groups; if you are having trouble finding a partner, post a notice
to Piazza. As you are free to choose your partner(s), I will not be sympathetic to complaints at the
end of the semester about how your group-mates did not do any work. All group members should be involved
in all major design decisions, and groups should develop a programming plan that can be effectively
parallelized. You may switch groups between programming projects.

As the graduate versions of projects may contain extra requirements, it is strongly recommended
(but not required) that groups be formed of either all undergraduates or graduate students. If any
of the group members are graduate students, the project will be graded as a graduate student
project.

Exams

There will be one midterm and one final. All exams will be closed book and closed notes, and
computers are not allowed nor is any access to the Internet via any device. The exams will cover
material from lectures, readings, and the projects. The final will be cumulative,
so review everything!

Grading

Projects:

4%, 8%, 12%, 16%, 20%

Midterm and Final:

15% and 20%

Participation:

5%

Each project will include a breakdown of how it will be graded. Some projects may include extra credit
components that can boost your grade above the maximum score :)

To calculate final grades, I simply sum up the points obtained by each student (the points will sum up
to some number x out of 100) and then use the following scale to determine the letter grade:
[0-60] F, [60-62] D-, [63-66] D, [67-69] D+, [70-72] C-, [73-76] C, [77-79] C+, [80-82] B-, [83-86] B,
[87-89] B+, [90-92] A-, [93-100] A. I do not curve the grades in any way.

Regrading and Challenges

New policy!In this class, we will use the
Coaches Challenge to handle requests for regrading. Each student is allotted two (2)
challenges each semester. If you want a homework, project, or a test to be regraded,
you must visit during office hours with a challengein writing specifying (a) the
problem or problems you want to be regraded, and (b) for each of these problems, why you think
the problem was misgraded. If it turns out that there has been an error in grading, the grade will
be corrected, and you get to keep your challenge. However, if the original grade was correct,
then you permanently lose your challenge. Once your two challenges are exhausted,
you will not be able to request regrades.

Note that, in the case of projects, all group members must have an available challenge in order
to contest a grade. If the challenge is successful, then all group members get to keep
their challenge. However, if the challenge is unsuccessful, then all group members
permamently lose one challenge.

Any requests for grade changes must be made within seven days of when the work was
returned.

Late Policy

For programming projects, we will use flexible slip dates. Each student is given four slip days
for the semester. You may use the slip days on any project during the semester in increments of
one day. For example, you can hand in one project four days late, or one project two days late and
two projects one day late. The slip time will be deducted from each group member's remaining slip time.
Keep this stipulation in mind: if one member of a group has zero slip days remaining,
then that means the whole group has zero slip days remaining.

After you have used up your slip time, any project handed in late will be marked off using
the following formula:

In other words, every day late is 20% off your grade. Being 1 second late is exactly equivalent to being 23
hours and 59 minutes late. My late policy is extremely generous, and therefor I will not be sympathic to
excuses for lateness. Late penalties cannot be challenged.

Cheating Policy

Projects must be entirely the work of
the students turning them in, i.e. you and your group members. Copying code from other students
(past or present) or websites is strictly prohibited. If you have any questions about using
a particular resource, ask the course staff or post a question to the class forum.

All students are subject to the Northeastern University
Academic Integrity Policy. All cases of suspected plagiarism or other academic dishonesty
will be referred to the Office of Student Conduct and Conflict Resolution (OSCCR).

Support for this class

The CDN project for this class is supported by an AWS in Education Grant award. Many thanks to Amazon for this!