CMSC 332: Computer Networks

Fall 2021

Doug Szajda

    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.

Last Modified: August 19, 2019 21-Aug-2021 Contact: Doug Szajda
[an error occurred while processing this directive] [an error occurred while processing this directive]