CSC 249: Networks

Instructor: Albert Williams (he/him)

Fall, 2024

Contact Information

Email: abwilliams@smith.edu

Web: https://people.cs.umass.edu/~abwillia/

Office Hours/Study Hall: Tuesdays & Thursdays 4-5:15pm in Ford 241 (and by appointment)

Office: Ford 010

Class Hours: Tuesdays & Thursdays 2:45-4pm

Class Room: Ford 241

Course Description

CSC 249 is an introductory course in computer networks. Our primary focus will be on developing intuitions around the basic performance and engineering tradeoffs in the design and implementation of computer networks. Throughout the semester, we will explore the fundamental architecture of computer networks and how they function today, as well as investigate some of the history that explains why they are designed the way they are and how they are likely to evolve. We will also strive to connect concepts in the design of computer networks to more general topics in the design, implementation and operation of distributed computing systems.

We will explore networks at different levels of abstraction: from the physical encoding of bits in transit to how network administrators decide where and whether to forward information, to specific applications, like web browsers and email clients, understand the data they receive, and everything in between. We will draw the majority of our examples from perhaps the most ubiquitous computer network today: the Internet, which has evolved over time and motivated design decisions at all levels of abstraction.

To help make the concepts we are exploring more concrete, this course will include several hands-on programming projects involving the design and implementation of networked systems.

Learning Objectives

Upon completion of this course, students will be able to:

Course Materials

One of the most important proficiencies any computer scientist or programmer can gain is to independently find the information they need. Luckily for us, people who study, develop, and maintain the Internet have found it an obvious tool for teaching and discussing their work. This means that as many descriptions in as many forms of as many aspects of networking as we could want are readily available online. While this course will provide valuable structure and personal guidance, you are encouraged (and, at times, even required) to supplement it with any online resources you may find convenient. I would, however, suggest that you double-check what you find, empirically if possible.

For those who prefer more structured resources, previous offering of this course have drawn on the following resources:

If you'd like even more references, below are a few other good textbooks you may find useful:

What We Will Cover

This course will provide a thorough overview of the foundations of computer networks and is scoped to a target audience of CS majors who have completed a first (and preferably a second) course in programming. If this isn't you, don't worry! You're still very much welcome in this course. Just be mindful that some self-study before the course starts may be necessary. You may also find an understanding of basic data structures such as queues is to your advantage. Here's a selection of topics we will cover:

What We Won't Cover

Python is the programming language we will use in this course. It will be difficult (and is thus strongly against recommendation) to use other programming languages because example and skeleton code for assignments will be made available only in Python. That said, we will not be making especially advanced use of Python, so almost any available online basic Python programming tutorial will provide the foundation you need.

Although your submitted code will be inspected, we will be focused on your code’s demonstrated ability to achieve the desired input-output behavior rather than your ability to write specific programming language statements.

Because students are coming to this class from a variety of backgrounds, we strongly recommend paging through The Missing Semester of Your CS Education and making heavy use of online resources to familiarize yourself with topics such as:

Graphical User Interfaces (GUIs), the visually appealing and user-friendly interfaces you're probably most familiar with, are much less commonly available when working on with the low-level networked and distributed applications that we'll be discussing, using, and creating. For the same reason text files are so much smaller than images and videos and therefore download much faster, Command-Line Interfaces (CLIs) will be our preference in this course.

Communication Policies

All written communication from the instructor to the students regarding this course will take place on the Slack workspace you've already been added to. It's also a good place to message each other collectively or individually, and the only way you should be communicating online with the instructor. Please don't email the instructor or the TA.

Assessments

This course will cover the subject matter in four discrete learning units, each lasting approximately four weeks.

There are three forms of assessment in this course:

Homework, Projects, and Lateness Policy

Homework assignments on each week’s lectures will be given periodically. These assignments will always be accessible on Gradescope. When homework assignments are quizzes, students will be allowed to take each quiz any number of times. It is not only acceptable but also encouraged for students to retake these quizzes – mastery of any new material is a process, and the review-revise-resubmit process empowers you to reflect on your evolving understanding.

Programming projects will typically be introduced in class, and we will work together to get started on them during class time and study halls. All programming project deliverables in this course will be submitted via Gradescope.

Keeping up with the assignments is crucial to success in this class, as the material is cumulative (meaning that each topic builds on the ones before it). That said, because we all have outside lives that sometimes intervene, every student will also have a self-managed budget of three extension days that can be used on homeworks or projects. To use them, send the instructor a message on Slack stating how many late days you'll be using and on which assignment before the original due date. Be aware: this may require some planning! Use them wisely!

To encourage keeping up with assignments, the final score will be multiplied by 0.9 for any assignment submitted more than zero and less one days after it is due, 0.75 for any assignment submitted more than one and less than two days after it is due, and 0.5 for any assignment submitted more than two and less than three days after it is due. Barring exceptional circumstances, assignments submitted more than three days after they are due will not be accepted for credit.

On the other hand, any assignment attempted in good faith and submitted on time can, with the permission of the instructor, be resubmitted at any point before the final exam is released, so please do try assignments, even if you're not confident in your submission!

Collaboration and Academic Integrity

Programming is more fun in groups! Students are encouraged to form study groups and to collaborate in solving the assignments. For programming assignments in this course, two-person teams are ideal. Please ensure that all work you submit is ultimately the product of your own understanding rather than anyone else’s. You may consult online or print references on all assignments and labs. Standard language references showing syntax, usage, documentation, etc. need not be cited; nor does the course textbook. All other resources must be cited as described below.

The following information is required for all submitted work:

  1. The names of all collaborating students must be listed at the top of the submission. If you worked alone, please state: “I did not collaborate with anyone on this assignment.”
  2. A “References” section, with in-line citations (where possible) to any external resources you used. Citations should include page numbers (if a printed resource) or a direct URL (if an online resource). If you include a fragment of code from any source, you should also credit that source with a comment directly in the code.
  3. All assignments should include at least one reference to a publicly accessible online resource. Some good resources are the official Python documents and forums like Stack Overflow. Any information from ChatGPT and other LLM chatbots should be verified by a reliable independent source.

Grading breakdown

Category Grade percentage
Weekly HW Quizzes 15% (average over all quizzes)
Project 1 (simple RPC client/server) 5%
Project 2 (multiconn RPC client/server) 10%
Project 3 (DIY ping/traceroute) 15%
Project 4 (Wireshark Lab 2) 15%
Project 5 (Distributed TicTacToe) 20% (5 weeks long with weekly milestones submitted as homework)
Midterm 15%
Optional Final Exam Up to 5 extra credit points; must achieve at least 50% score
Participation and Engagement 5%

Note that the final exam will be optional. All work completed during regular class weeks will be sufficient to determine your final grade. A comprehensive written final exam will nevertheless be offered as an option during the final exam week. This is an opportunity for you to demonstrate to yourself as well as to the instructor how much of the course material you have absorbed. In order to get any credit at all for the final, you must achieve a score of at least 50%.

If you lost points on any work during the semester, you may elect to take the final exam and have those points added to your within-semester score. In this way, taking the final offers you the opportunity to raise your final grade by up to one half letter.

Your final grade is based on my evaluation of your work, and every effort will be made to communicate expectations in advance through detailed rubrics. Although the grade will largely be based on the percentages shown above, I reserve the right to award extra credit for excellent work and out-of-the-box thinking. For example, while “Participation and Engagement” will look primarily at day-to-day engagement, I will also take note of contributions both in and out of class which demonstrate intellectual curiosity or clear understanding of a topic, as well as comments which help others to learn a difficult concept.

Accessibility

We aim to make this course accessible and welcoming to all. I welcome any and all feedback on changes I can make towards meeting this goal. Smith College can also help facilitate support services and accommodations to all students with disabilities. To request an accommodation, please register with the Disability Services Office.

Policy on Children in Class (adapted from Dr. Melissa Cheyney at Oregon State University):

This syllabus was adapted from the one used by Brant Chiekes for CSC249 in the Fall of 2023