This is an undergraduate level course covering the fundamental concepts of networking as embodied in the Internet. Topics covered in this are: design principles, layering, protocol design/analysis of the global Internet; networked applications; the structure/architecture of the Internet; protocols for network transport and congestion control; network layer and routing; link layer/MAC; and network security.

You will also learn to write multi-threaded programs to create a network of communicating servers using "socket programming" (which some would consider as "system programming"). You will learn to make "system calls" to interact with "the system". There will be 5 programming assignments and the last two can be quite time-consuming and challenging to implement and debug. Therefore, the workload of this class can be quite high and it's important to keep up with the pace of the class and try to avoid starting a lab or programming assignment only when the deadline approaches.

Please note that this class does not use Blackboard. Everything about this class can be found on the CSCI 353, Fall 2021 class website (if you see this page again, it means that the class website is under construction).

My actual CS 353 class website for Fall 2021 is not ready yet. Since many students are registering now, I felt that I should post some important information about CS 353 (especially about rules) so students can know what to expect and register accordingly. I tend to be a stickler to rules, so there will be no exceptions. (In general, I'm bound by my own written rules and I have to stick to them.)

Someone students don't understand why I am so strict with rules. Some think that it's just a power trip for me. It's actually just the opposite! The reason for sticking to rules is that I have the responsibility of treating all students fairly! If I apply one rule to one student and don't apply the same rule to another student, I think that's totally unfair. I think fairness is very important. Without fairness, grades have no meaning. The only way I know how to be fair is to have rules that are written down clearly and stick to all the written rules. When you ask me to bend a written rule for you, please understand that you are asking me to be unfair to all other students; and therefore, I will not bend the rule for you. You see, this actually takes power away from me because I am bound by my own rules and you can demand that I stick to my own rules!



  • We will be using a flipped classroom model during this . (Although in a regular flipped classroom model, during live lectures, students will be taking quizzes and doing exercises. Since we have so many programming assignments to do in this class, it would be too much to ask students to do more exercises during live lectures. I also don't have any quizzes planned.) Lectures will be pre-recorded into multiple videos (and posted on D2L) and will be made available before 6pm the day before the scheduled lecture time (and usually, way before that time). You are expected to have watched the pre-recorded lecture videos beofre you come to the "live" class during the scheduled lecture time.

    During a live lecture, since you are supposed to have watched the pre-recorded lecture videos, I will not repeat what's in a pre-recorded video and I will not be teaching any new materials during a live lecture because students would complain that this would be too much materials for a 4-unit course. Instead, I will first go over some administrative information, then I will be answering your questions about lecture material. If you have questions about programming assignments, I would also be happy to answer your questions as well. Since live lectures are conducted this way, live lectures are totally optional and there is no requirement that you come to live lectures at all (although you are still required to view the administrative information)!

    If the university requires that everyone to wear a mask in class, you will be required to wear a mask when you are in the classroom during a live lecture. Since you are not required to come to live lectures, if any student refuses to put on a mask, I will have to end the live lecture immediately!

    Since we may have students taking the class asynchronously, all live lectures will be recorded. At this point, it's not clear if the live sessions will be Zoom-based or not. If the live sessions will be running on Zoom, you are welcome to talk to other students over Zoom in chats. When no students are left in the "room", I will close the Zoom session and end the live class.

    Please note that you are required to get the administrative information presented during a live lecture (lecture slides will be posted for this part), but you are not required to watch the Q & A part.


  • All recorded videos will be made available on D2L (although you may not be able to download any of these videos). Every registered student will be given a D2L account.

Final Exam

  • The date and time for the final exam is deteremined by the university and there is absolutely no way to change it for you. According to university policy, no one is permitted to take the final exam at a different time. If you already know that you cannot come to the final exam, do not register for this class because I will not change the date or time of your final exam.


  • If you are officially auditing this course (i.e., register for this course under the no-grade option), you will get the same course materials as everyone else. If you want to audit this course unofficially, I will have to say no to you.


  • The workload of this class is quite high. We will have 5 programming assignments in this class and some of the stuff you have to do may be completely new to you. It's imperative that you start your programming assignments early since we have a very strict late submission policy. If you have a habit of starting your programming assignments only 2-3 days before the submission deadline, chances are, you may end up geting a very ver low score. For this class, you will not be given any partial credit for "effort".

    We will also have 14 labs in this class, one due every week (no lab on week 15). The purpose of the labs is to help you get started with your programming assignments. You are expected to finish the labs early so you can finish the corresponding programming assignment on time. For a networking programming assignment, the idea is that by finishing the corresponding labs, you will not be far from finishing the programming assignment.

    We will not be giving out "solutions" to programming assignments even though it may seem that some programming assignments can use a previous programming assignment as a starting point. You should start every programming assignment from scratch and use your experience from previous assignments to write better code! (Although it would be quite difficult to start PA5 from scratch; therefore, it's important that you finish PA4 on time.) We will not be giving out "solutions" to lab assignments either. If your code is not working, you are expected to come to office hours to seek help, although none of the teaching staff will be permitted to write code for you or find bugs for you in your code. The bottomline is that if you are not proficient at programming and debugging, you need to be prepared to spend a lot of time getting good at programming and debugging!

Late Registration

  • Even though you might be considering other classes at the beginning of the semester, if you have any intention to take this class, you are expected to watch every lecture video on time and submit all assignments on time (i.e., same deadlines as students who are already registered). So, even if you get in on Friday of the 3rd week of classes, you will not be getting an extension for PA1 (which is due at the end of Friday of the 3rd week of classes) or the labs you have missed.


  • The prerequisite for this course is CS 201 (Principles of Software Development). The prerequisite for CS 201 is CS 104L, and one of the prerequisite for CS 104L is CS 103L. Therefore, you will be expected to have had at least two semesters of experience programming in C++ from these courses. In addition, a corequisite of CS 104L is CS 170, and graphs and basic graph algorithms are covered in CS 170. Therefore, you will be expected to be familiar with graph representations (e.g., nodes and edges for abstract representation, adjacency list data structure, etc.) and graph algorithms such as breadth-first-search (BFS) and Dijkstra's algorithm (although we will review these data structures and algorithms at the beginning of the semester).

  • All programming assignments (include labs) are to be done in standard C++ (i.e., c++11, c++14, etc.). No other programming languages will be accepted. (Sorry, no Java, no Python, and no C++ with Microsoft, Mac, or Google extensions.) Since standard C++ does not support networking, all networking related programming assignments are required to be done by making system calls (with a C interface) and without using any C++ networking libraries. C is a proper subset of standard C++. If you know standard C++, you already know C. Standard C++ is designed to work with system calls and we will learn about networking system calls in this class.

  • Your program must compile and run with a Makefile on a 32-bit Ubuntu 16.04 machine running inside VirtualBox. Grading for programming assignments can ONLY be done on the grader's 32-bit Ubuntu 16.04 machine running inside VirtualBox. Even if you can demonstrate that your code runs perfectly on some other system, it cannot be considered for grading and you won't get any partial credit for it. If you are not familiar with Unix, please read Unix for the Beginning Mage, a tutorial written by Joe Topjian. You can also visit UNIX Tutorial for Beginners or Learn tcsh in Y Minutes. It's a good idea to get familiar with the Unix/Linux development environment (vi/pico/emacs, gcc/g++, make, etc.) as early as possible. One good way to start is to install Ubuntu Linux into a Virtual Machine on your laptop/desktop and start using it with the very first programming assignment.

    If you do not have a personal laptop or desktop that runs Windows 10 or Mac OS X, please contact the instructor as soon as possible. If you are thinking about purchasing a laptop, for the purpose of this class, I would recommend that you buy a Windows 10 or Mac laptop that runs on an Intel/AMD CPU to minimize compatibility issues.

    You should learn how to use the Terminal program to compile, run, and debug programs. It's probably a good idea to also learn how to use a text editor (such as vi, emacs, or pico) to create and edit C++ program source code and not rely on using IDEs.

    If the only machine you have access to is one of those new Macs that runs on an non-Intel/AMD CPU, then you must do all your labs and programming assignments on (which is a Linux server running CentOS 7).


  • There is a lot of programming to be done in this class! The class is designed so that the labs and programming assignments go with the schedule of lectures. If you don't keep up, you may have a very difficult time implementing the programming assignments. You should try to understand lecture material by the end of the day the lecture was given. If there is anything you don't understand about the lecture, please send your question to me. In Lecture 1, I will make a promise to you that I will reply to every private e-mail messages within 24 hours of your e-mail! This is my commitment to you.

  • Ask me questions! I am here to help you with this class. I cannot help you if you don't ask me questions! Send me private e-mails or post your questions to the class Piazza (current, this link is invalid). If I don't get questions from you, I would have to assume that you understand everything.

Important Dates

              August 2021
          Su Mo Tu We Th Fr Sa
    Wk  1 22 23 24 25 26 27 28  first day of classes: 8/23
    Wk  2 29 30 31
             September 2021
          Su Mo Tu We Th Fr Sa
    Wk  2           1  2  3  4
    Wk  3  5  6  7  8  9 10 11  labor day: 9/6, pa1 due 9/10
    Wk  4 12 13 14 15 16 17 18
    Wk  5 19 20 21 22 23 24 25
    Wk  6 26 27 28 29 30
              October 2021
          Su Mo Tu We Th Fr Sa
    Wk  6                 1  2  pa2 due 10/1
    Wk  7  3  4  5  6  7  8  9
    Wk  8 10 11 12 13 14 15 16  fall recess: 10/14-10/15
    Wk  9 17 18 19 20 21 22 23  midterm: 10/19, pa3 due 10/22 (<== midterm moved from 10/21 on 8/15/2021)
    Wk 10 24 25 26 27 28 29 30
    Wk 11 31
             November 2021
          Su Mo Tu We Th Fr Sa
    Wk 11     1  2  3  4  5  6
    Wk 12  7  8  9 10 11 12 13  pa4 due 11/12
    Wk 13 14 15 16 17 18 19 20
    Wk 14 21 22 23 24 25 26 27  thanksgiving: 11/24-11/26
    Wk 15 28 29 30
             December 2021
          Su Mo Tu We Th Fr Sa
    Wk 15           1  2  3  4  pa5 due 12/3
           5  6  7  8  9 10 11
          12 13 14 15 16 17 18  final exam: 12/14 (11am-1pm)
If you have questions, please e-mail the instructor at <>.