This course introduces the basics of networking,
ranging from sending bits over wires to the Web and distributed computing.
We focus on the internetworking ground between these two extremes, and
will often explore the engineering of the Internet - goals, constraints,
solutions, and experiences, but with a treatment that highlights learnings
for other networks too, from mobile phones to RFID. The outcome of this
course for you should be an appreciation of the fundamental challenges of
networking, design strategies of proven value, and common implementation
technologies. Topics will include: framing, error correction, packet
switching, multi-access (Ethernet), addressing and forwarding (IP),
distance vector and link state routing, queuing and scheduling, reliable
transport, congestion control (TCP), quality of service, naming (DNS), and
This is a 4 credit hour course, meaning that it
deserves something like 12-16
hours of your undivided attention per week. Try to reserve hours for the
reading and stick to your schedule, even if some programming assignment
that isn't going as well as you expected (i.e., all of them, for all of
us) is coming due shortly.
This course won't:
It will help with both, by making sure you understand
the central issues, engineering trade-offs, and successful approaches that
are being used.
- make you an expert in managing networks, including your home
- turn you into a behemoth protocol programmer.
- CSE 326: it's safe to call this a "general prereq" rather
than something intimately related to the material in some special way.
You must have the required pre-requisites. The other
courses listed here are useful, but not required.
- CSE 303: the programming assignments use Java, with Linux as the
default build/run system, but an understanding of C and appreciation
of low-level issues is useful.
- CSE 451: concurrency is inherent in networking.
- CSE 378: so is the idea that all data is just bits, at some level.
We will follow the textbook for the most part and
cover the vast majority of the textbook, plus other material. Textbook
readings are given on the schedule page. You are expected to read the
assigned sections *before* coming to class.
There are four homeworks on the schedule that have two
kinds of assigned work:
- Programming Assignments. We will use
self-contained programming exercises to explore the design of network
components. These assignments must be done in the Java programming
language. You can write and run Java programs on any development
system you prefer, including the CSE labs. The default system for our
use and on which we test is
only problem we've run into in the past with other systems is that the
version of Java installed was not sufficiently up to date.
- Textbook questions: The assignments will
include written questions as well as programming assignments. Some of
these will be taken from the textbook, supplemented from other
sources, along with more open-ended questions that ask you to think
about the material we have covered in class.
Homeworks are due on Wednesdays at the *start* of
the lecture. See the schedule page. (Make sure you read the late policy
I reserve the right to "fine tune" this
later, but expect to assign grades as follows:
- Homeworks: 50%
- Midterm: 20%
- Final exam: 30%
There will be one midterm and a final exam for this
course. See the Schedule page.
- Late Policy: Each homework has a full two week working period
during which no other homeworks are due to help you accommodate
whatever comes up during hte quarter. Please plan accordingly.
Homeworks are due on Wednesdays at the start of class, and solutions
will be discussed as soon as the section starting on Thursdays.
You can turn in a homework up to the beginning of the first section,
but will have a 15% penalty applied. We will not consider granting
Incompletes as grades.
- Programming Teams: We will often ask you to complete the
programming portion of the homeworks in pairs -- two people only, if
you can't find someone then the TAs will help. This is primarily to
help reduce the amount of time you spend on debugging and other tasks
that are not part of the goals of the course. You must use a different
partner for each programming assignment.
- Reasonableness: the "Reasonable Person Principle"
applies throughout this course. This principle simply states that a
reasonable request made in a reasonable fashion shall be reasonably
handled by reasonable persons. The TA's and I are reasonable people,
and experience says that most all of you are as well.
So how do you draw
the line between collaboration and cheating? Here's a reasonable set of
- Cheating vs. Collaboration: Collaboration is a very good
thing. On the other hand, cheating is considered a very serious
offense. Please don't do it! The department's policy on cheating is to
report any cases to the college cheating committee. What follows
afterwards is not fun.
The Gilligan's Island Rule: This rule says that you are free
to meet with fellow students and discuss assignments with them. Writing
on a board or shared piece of paper is acceptable during the meeting;
however, you should not take any written (electronic or otherwise)
record away from the meeting. This applies when the assignment is
supposed to be an individual effort or whenever two teams discuss common
problems they are each encountering (inter-group collaboration). After
the meeting, engage in a half hour of mind-numbing activity (like
watching an episode of Gilligan's Island), before starting to work on
the assignment. This will assure that you are able to reconstruct what
you learned from the meeting, by yourself, using your own brain.
The Freedom of Information Rule: To assure that all
collaboration is on the level, you must always write the names of your
collaborators on your assignment.