CMSC 332: Computer Networks
Fall 2021
Course Syllabus
- Instructor: Doug Szajda (my_first_initial_concatenated_with_my_last_name 'at' richmond.edu),
219 Jepson Hall, (804)-287-6671 (campus ext. 6671).
- Meeting Times:
- Lecture: MW 10:30 - 11:45 am, Jepson 109.
- Lab: F 10:30 - 11:20 p.m., Jepson 109.
- Required Texts:
- Computer Networking (8th Edition), by James F. Kurose and Keith W. Ross, Pearson Addison-Wesley, 2020.
- TCP/IP Sockets in C: A Practical Guide for Programmers (2nd Edition) by Michael J. Donahoo and Kenneth L. Calvert,
Morgan-Kaufmann, 2009.
- Recommended Text:
This is not required, but you'll likely need some C/C++ reference.
- C Programming: A Modern Approach (2nd Edition), by K.N. King, Norton, 2008.
- Office Hours: TBD. Until office hours are set, if you need to see me, please talk to me after class,
drop by my office, or email me.
You are also welcome to drop by my office at any time, but
be aware that there will be occasions on which I will be unable to see
students (or will be away from my office). Also, though I usually keep
my office door open during office hours, at other times I may
keep my door closed for either noise or climate control purposes. You
should be sure to knock before concluding that I am not in my office!
- Course Summary: Communications networks are
fundamental to our everyday lives. Whether for enabling global scale
commerce or connecting long lost friends, these systems have created
an unparalleled age of information. Accordingly, knowledge of such
systems is critical for all scientists and engineers. This course
provides an overview of networking technologies. Students
satisfactorily completing this course will gain the skills necessary
to analyze and design networking systems and protocols. The course
will begin with the application layer, looking at design patterns
present in common application layer protocols. We then move down the
network stack, considering topics such as reliable transmission and
congestion control at the transport layer, routing at the network
layer, and multiple access protocols at the link layer. After this
discussion, the latter portion of the course will include
wireless/mobile networks and devices, cellular networks, queuing fundamentals, security,
network management, and time permitting, other current topics in networks.
- Pre-requisites: The pre-requisite for this
course is CMSC 301 (Computer Architecture) or permission of the instructor.
- Class Participation: To do well in this course, students must
take active and regular roles in discussion and demonstrate
comprehension of the reading and lecture themes. Students are required
to do the assigned reading before class. I will be closely
monitoring this.
- Laptop/Smart phone policy Please keep cell phones silenced
and put away (not on the desk, or in your notebook, or in your lap (your
classmates and I can see you texting)). In the rare event that
you need to be available for emergency phone calls, please talk to the
instructor about it before class. If you take notes on your computer,
please stick to course related work. Before class begins, please
close all programs not related to the class including any email clients,
Facebook, on-line shopping, ESPN, etc. You may think you are able to multitask,
but the scientific evidence suggests otherwise. Also, multitasking on
your computer is likely distracting to others behind or next to you (there is
scientific evidence to support this too). For more information:
href=http://www.sciencedirect.com/science/article/pii/S0360131512002254
- Attendance Policy: Regular attendance for the entire class time is
expected! Over the past few years, CS faculty have observed a disturbing trend -- some
students disappear for weeks on end. So that you are aware,
CS program policy states that students who miss more than 4 total sessions (including lecture and
lab) receive a grade of V for the course. I typically strictly adhere to this
policy! I only mention this now because it shows how important we consider attendance to be in order
for students to succeed in the course. (Please see some other reasons below.) Due to COVID, however,
and the potential that some students may have to quarantine for an extended perioed, changes to
attendance have removed the V grade and the punitive incomplete as a grading option. However, be
aware that you can still fail this course should you miss too many lectures. To be clear,
students who have to quarantine due to COVID or miss class for other legitimate reasons will not
be penalized for their absence during those classes.
Finally, if you should miss a class for any reason,
you are responsible for obtaining class notes!
(That is, I will not give you a private encore of the lecture).
- Seating Policy:
Though things are (at least for now) returning somewhat to normal, I am still required to impose assigned
seating, and, per current university policy, to require that all students wear masks during lab
and lecture. For this reason, I will allow you to choose seats during the first session,
after which you will sit in those seats every day that you attend lecture (until university policy changes).
There are no assigned seats in labs, because you will be working in different groups for each lab
(and because university policy makes an exception for that situation).
- Remote Attendance: I will not be streaming or recording lectures or labs this semester,
so if you miss class, you are required to make up the material, get lecture notes, etc., on your own.
- Reading: You are strongly encouraged to have read, prior to lecture, the material
corresponding to the topic covered. Doing so allows you to raise question during lecture as
the material is being presented. There are two advantages to this: 1) It allows
your classmates to hear discussion of the issue, and 2) it potentially saves you
a trip to my office during office hours. Most important, it's a better way to learn.
Much of your learning in life will be accomplished via reading, so it's good to
get in the habit now. Moreover, no lecture, no matter how good (or bad, as the case
may be) will proceed at a pace that is perfect for every student (or any student, for that matter).
Reading the material prior to lecture allows you to spend time on those concepts that you find
confusing, and quickly pass over those concepts you find easy. And as said above,
it allows you to ask questions about concepts that may remain confusing even after
careful reading and consideration.
- Grades:
Grade Component |
Date |
Percent of Grade |
Homework |
N/A |
10% |
Programming Projects |
N/A |
35% |
Midterm Exam |
Distributed Friday, October 8 |
20% |
Final Exam |
Distributed Friday, December 3, Due Wednesday, December 8, 5:00 pm (sharp!) |
30% |
Participation |
N/A |
5% |
Final grades will be adjusted, if necessary, to reflect the following ideal as
much as possible.
- An ``A'' means that your knowledge of this material is exceptional.
When you have to build on the material that you
learned in this class in your future classes, then you will be able to do
so easily.
- A ``B'' means that you have a good understanding of most of the material,
but may have some gaps in your understanding, or are not as comfortable with
some aspects of it as you might be. As such you may want to review this material before taking more
advanced classes. You will be able to apply the material in this class,
but you may have difficulty doing so with some of it.
- A ``C'' means that your knowledge of this material is average/mediocre.
You will likely struggle to apply this material in your
future classes, as you have struggled learning the material in this class.
- A ``D'' means that you are not ready for future classes that builds on
material from this class.
- An ``F'' means that in addition to the conditions for a ``D'' grade,
you also didn't try and/or failed to hand in work.
- A ``V'' means that you missed too many classes to pass the class, regardless
of your performance on the work.
- The Other Student Criteria: When grading tests and
homework, I use the Other Student Criteria
(OSC). All solutions must meet this. The Other Student Criteria
states that a solution should provide enough written explanation
so that another student in the class (who could not complete the
assignment) could read the submitted material and, without
asking questions, understand a correct answer.
- The Myth of Grade Negotiation: I have noticed over the past few years a shift in
the way students view grades on exams and assignments. A (somewhat vocal) minority
of students view these grades as merely an initial offer in a process of negotation. That is a
myth. The grade you recieve on assignments is final! The grades I assign are
carefully considered. Attempting to earn an extra couple of points is a waste of your time and
mine, as well as being orthogonal to the prime purpose of the course, which is to learn the
material. I am very happy to meet to discuss assignments and exams so that you may better understand
the material, but will not change your grade.
- Incomplete Grade Options: There was a time a few years back when it was necessary for me
to assign an incomplete grade only about once every two years, typically for a student who
became ill late in the semester and needed to travel home to recover. It seems recently that there has been a rash
of incompletes, to the point where no fewer than 25% of my CS 301 class two years ago required incompletes. So,
I have had to revise my policy. There are only two reason why I will allow a student to receive an incomplete grade:
they are ill and have to go home to recover (I expect verification from a doctor) or there is a death in the family
late in the semester (I also expect to see verification, as unfortunately, there have been instances of students lying
about this).
- Lateness Policy:
Programming project due dates and milestones are
assessed a 15% per-day late penalty, with a maximum of 4 days. Unless
the problem is apocalyptic, don't give me excuses. Students with
legitimate reasons who contact the professor before the deadline may
apply for an extension.
- My "Managerial" Philosophy:
I treat you like adults and expect you to act like adults.
For the 1% of you that may need a little clarification, here are some (though not all) of the notions that this entails:
- You begin assigned work in a timely manner (this includes reading).
- You complete assigned work on time (this includes reading).
- You complete assigned work and hand it in on time.
- If an emergency arises (as they sometimes do) that precludes handing in work or taking an exam, you contact me before the work (or exam) is due.
- You accept responsibility for your actions (and/or, as the case may be, your inactions).
- Exams: The course will include one midterm and one final exam. All exams
will be take-home, closed-book, closed-note, closed-Internet. Students
are responsible for material covered both in the text AND
lectures.
- My ``exam discussion policy": Once a student has begun an exam,
I will answer (for that student) only those questions that concern clarification of the intent of a problem. That is,
I will not answer questions that seek to determine whether the problem was done correctly, or whether a particular approach is
wise (or unwise).
- Homework There will be approximately four graded homework assignments in this course.
These problems should be considered essential as partial preparation for the exams.
- Homework Submission: You may hand write your homework, in which case it must be legible! And to be
clear, the term legible means one should be able to read it without a magnifying glass or any
more effort than reading a well typeset book. You are also welcome (and encouraged)
to complete your homework using a typesetting package (e.g., LaTeX), when that is
reasonable (often, when problems require diagrams, typesetting it is not reasonable).
Regardless of the method you choose to use to complete your homework, you must
submit a hard copy to either my department mailbox or my office (mailbox on my
office door) by the due date and time. Do not email me your homework! (I will
ignore homework received via email.) Multi-page homework must be stapled. Also,
your homework must include the work you did in determining your solution.
Finally, late homework will not be accepted! In past courses, I have sometimes allowed late
homework to slide. I can't in this course.
There is so much material to grade that I can't allow folks to hand stuff in late.
- Programming Projects: This course requires the completion of
four programming projects.
Projects must be written in C/C++ and submitted as a single tar file (note, ZIP files are
not allowed -- this is networks!) as an attachment
to an email sent to an address that will deposit your submission in a Box folder. The list
of emails required for the assignments are contained in a file on the content page of the course
blackboard page. Submissions must be received by 5:00 pm on the due date, unless
another time is explicitly stated in the assignment.
For specific policies related to the grading/submission of programming projects, see more
material later in this syllabus and in the assignments themselves.
Note that this is a systems course - successfully completing coding
assignments is a necessary condition for earning a desirable grade.
Moreover, the projects are an
essential part of the learning process. For this reason, if a
student is missing even a single project
at the end of the course, he or she will receive a grade
of `F' for the course!
- Project Code Submission: If you have taken a course with me recently, then this procedure should be
familiar. At the beginning of the semester I will put a file called ``submission_email_addresses.txt''
in the "content" section of the course Blackboard
page (NOT the course web page -- I don't want homework submission links to
be public). All work should be submitted as a single tar file.
In order to submit work, you send an email, with your single submission file as an attachment,
to the email address listed for that assignment. This has the effect of depositing your submission in
the appropriate Box folder. Note that ALL submissions must include some indication, in the title of the submitted
file, of who the submission is from.
SUBMISSIONS NOT PRESENT IN THE CORRECT BOX FOLDER AT THE SUBMISSION DEADLINE RECEIVE A GRADE OF 0. So, if you send email to my
regular email, or submit your work using the wrong email address (so it ends up in the wrong Box folder), then
it is treated as if you have not submitted the work.
- More on Programming Assignments: Unlike some of the
lower level CS courses, in this course (and any other senior level course)
a program must
both compile without errors (as defined below) and
run according to specification to receive any credit!
There are a number of
other factors that may influence the grade that a program receives. Here are
some of them:
- Is the program "user-friendly"? That is, does the user have
to guess at how to use the program, or does the program somehow
provide this information to the user (e.g., via a README file)?
- Is the code readable? (One letter variable names, other than for loop indices,
are strictly prohibited!)
- Is the code well documented? Every program assignment grade will
have a significant documentation component. No one should have to dig through
poorly documented code (try it some time)!
- Is the code "well-structured"?
- Is the code robust? For example, how does the program
react if the user supplies the wrong number of command line arguments?
- How well has your code been debugged and tested? Specifically, I may be collecting debugging and
testing information from you as part of the material submitted with programming projects.
- You should consider me a client who is purchasing your code. As
the developer, it is your responsibility to ensure that I receive the latest
working version of
your
source code and
that
it compiles
correctly on the CS Department Linux cluster.
If you happen to submit an old version of your code by accident, or
you submit binaries instead of source code, then I'm not going to be a happy customer.
- In line with the previous item, the version of the code you submit to me should have all debugging output
removed. This does not mean that you have to remove the debugging code from
the source. It does mean that when the code runs, I should not be getting
debugging output by default.
- The Programming Environment: We will be coding in UNIX based
environments and
using the command line and whatever editor you prefer.
All programming assignments must satisfy and/or include the following:
- They must be implemented in C or C++.
- They must compile without warnings using the installed GNU C or C++ compiler, with
the -Wall option, on the department Linux cluster.
I mention this because C and C++ are, well, not always portable (but you knew that), and so it
is possible (and in fact likely for some of these projects) that
network code that compiles and runs correctly on one platform will perform differently on another.
- Every project must include a thorough (though concise) report describing
the final testing you performed in order to convince yourself that the
program meets all project specifications.
- All files included in the project (i.e. README file, C or C++ source, makefile, etc) must be submitted in a single
tar file. You should be sure to include in your submission any
supplemental source code or files I may have supplied for the project!
The bottom line here is that I should be able to untar your submission, compile your source
(with your supplied makefile, of course), and execute your code in three easy steps.
- Programming Help: I am happy to discuss programming and debugging techniques, as well as the
semantics of particular functions calls. I am also happy to direct you to appropriate packages. And I will
at times provide you with "shell code". With regards to programming, I am in general happy to help you in whatever way
is necessary. I will not, however, debug your code for you! If you describe your programming issue
with me, I will be happy to suggest potentially useful debugging strategies.
But debugging is an important part (and in fact the majority part for these projects)
of the programming process. As such, you
need to be comfortable with doing it on your own!
- A word of warning: I mentioned above that debugging is an essential part of the programming
process. For the project in this course, you might end up spending four or five times more
effort in debugging your code than in writing it! Several years ago I spent one afternoon
coding one of these assignments, and four days debugging it (it worked fine on one of my laptops,
and crashed with a segmentation fault on the department servers (which were Solaris servers, at
the time). This is the nature of the network programming
beast. You need to take this into account when planning the time you intend to spend on a programming
project.
- Two different kinds of Box folders! Know the difference! I
use two different kinds of Box folders in this course (and in all of
my courses). One class of folders is for project submission.
Material is submitted to this class of folders by sending an email to
a project specific address. Those addresses are contained in a file
in the content on the course Blackboard page. Everyone in the class submits to
the same project specific Box folder.
The other class of folder are individual folders shared between myself and each student.
The folder I share with you in this manner is visible only to you and myself (and possibly
a grader, but we don't have one for this course). These individually shared folders
are exclusively for grade forms! They are not to be used for submission of
projects. If you accidentally place a project submission into your individual folder,
I will not see it and will assume you have not submitted the project!
- Collaborating on homework/programming assignments: Programming projects
and homework may be discussed with others subject to the
``Empty Hands'' policy ---
you may freely discuss ideas and approaches with other students
subject to the restriction that each student must leave the discussion
without any written or otherwise recorded
material. In your homework write-up or source code, you must also
document any person or source that you consulted for that project.
Failure to comply with this policy will be treated as an Honor
Code violation. Note that this policy does not apply to assignment/project group members
(if any), with which you are free to share materials.
One final note: some of the programming assignments
for this semester may have been assigned in previous semesters.
While you may consult previous class members concerning projects,
you are not permitted, under any circumstances, to receive
or view either hard copies or electronic copies of all or parts
of their project submissions! You can use your friends to
get help, but they should not be providing you with their code
(just as in an English class, you might discuss the works of Dickens
with a friend, but should not use the paper that they submitted
as the basis for your own submission).
- Note: Many of the handouts, presentation slides, and projects used in this course use material borrowed from
colleagues in the networks and security fields. I am particularly grateful to Patrick Traynor for generously allowing me
the use of his material as the basis for my material (including, in some cases, simply using his material word-for-word).
- COVID-related Policies:
- We are facing a challenging situation in which all of us are
called on to make a good faith effort to be flexible and to make
decisions in the best interest of the community, including staying
home when sick. Students who are sick should not attend class,
will not be required to provide formal documentation from a health
care provider, and, as mentioned above, will not be penalized for absences.
However, students must:
- Notify instructors in advance of the absence, if possible.
- Contact the Student Health Center if sick.
- Keep up with classwork if they are able to do so. If not, then immediately
on return, work out a time-frame with me on when work will be submitted.
- Masks: Per university policy, masks must be worn at all times when in the classroom.
- Be Flexible: University administrators, staff, and faculty have done our best to anticipate issues that
may arise this semester. But the situation is, of course, fluid. For this reason, it is necessary that
we all demonstrate some flexibility. Some of the policies in this syllabus may need to be changed to accomodate
contingencies that arise. Please be aware of this, and prepared for what will likely be more change than required during
a normal semester.
- Additional University Resources:
If you experience difficulties in this course, do not hesitate to
consult with me. There are also other resources that can support you
in your efforts to meet course requirements.
- Academic Skills Center(http://asc.richmond.edu):
Academic coaches assist students in assessing and developing
their academic and life-skills (e.g., critical reading and
thinking, information conceptualization, concentration, test
preparation, time management, stress management, etc.). Peer
tutors offer assistance in specific subject areas (e.g.,
calculus, chemistry, accounting, etc.) and will be available
for appointments in-person and virtually. Peer tutors are
listed on the ASC website. Email Roger Mancastroppa
(rmancast@richmond.edu) and Hope Walton
(hwalton@richmond.edu)
for coaching appointments in academic and life skills.
- Boatwright Library Research Librarians
(http://library.richmond.edu/help/ask/
or 289-8876): Research librarians help students with all steps of
their research, from identifying or narrowing a topic, to locating,
accessing, evaluating, and citing information resources. Librarians
support students in their classes across the curriculum and provide
individual appointments, class library instruction, tutorials, and
research guides (libguides.richmond.edu). Students can contact an
individual
librarian (library.richmond.edu/help/liaison-librarians.html) or ASK a
librarian for help via email (library@richmond.edu), text
(804-277-9ASK), or chat (library.richmond.edu/chat.html).
- Career Services
(http://careerservices.richmond.edu/
or 289-8547): Can assist you in exploring your interests and
abilities, choosing a major or course of study, connecting with
internships and jobs, and investigating graduate and professional
school options. We encourage you to schedule an appointment with a
career advisor early in your time at UR.
- Counseling and Psychological Services
(caps.richmond.edu or
289-8119): Assists currently enrolled,
full-time, degree-seeking students in improving their mental
health and well-being, and in handling challenges that may impede
their growth and development. Services include brief
consultations, short-term counseling and psychotherapy,
skills-building classes, crisis intervention, psychiatric
consultation, and related services.
- Disability Support Services:(disability.richmond.edu):
The Office of Disability Services works to ensure that qualified students with a
disability (whether incoming or current) are provided with reasonable accommodations that enable students to
participate fully in activities, programs, services and benefits provided to all students. Please let your professors know
as soon as possible if you have an accommodation that requires academic coordination and planning.
- Speech Center
(speech.richmond.edu or
289-6409): Assists with preparation and practice in the
pursuit of excellence in public expression. Recording, playback,
coaching and critique sessions offered by teams of student
consultants trained to assist in developing ideas, arranging key
points for more effective organization, improving style and
delivery, and handling multimedia aids for individual and group
presentations. Remote practice sessions can be arranged; we look
forward to meeting your public speaking needs.
- Writing Center
(writing.richmond.edu or
289-8263): Assists writers at all levels of experience, across
all majors. Students can schedule appointments with trained writing
consultants who offer friendly critiques of written work.
|
|
|