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 lectures 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 2022 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 2022 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
The rules are not just for students. I'm bound by my own written rules and I have to stick to them.
Some 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 semester.
(Although in a regular flipped classroom model, during live lectures, students will be taking quizzes and doing exercises.
Since we have so many labs and 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 before you come to a "live and in-person" class during the scheduled lecture time.
During a live and in-person 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 and in-person 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 labs and programming assignments, I would also be happy to answer your questions as well.
Since live and in-person lectures are conducted this way, live and in-person 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 and in-person lecture. Since you are not required to come to live and in-person lectures, if any student
refuses to put on a mask, I will have to end the live lecture immediately!
All live and in-person lectures will be recorded on Zoom.
You are welcome to talk to other students over Zoom in the chat area.
When no students are left in the "room", I will close the Zoom session and end the live class.
Please note that lectures across all sections of CS 353 are required to be synchronized, as far as lecture coverage is concerned.
Therefore, if live lecture for one section falls on a university holiday while another section does not,
if you are registered in the first section, you are expected to watch the recorded live lecture for the 2nd section.
Please note that you are required to get the administrative information presented during a live and in-person 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.
- 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 time different from their classmates.
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 or have a separate exam for you.
- 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 labs that correspond to a programming assignment,
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 bottom line
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!
- We will use a Piazza Forum for class related communications and discussion.
The class Piazza Forum is an important tool. Everyone must be a member of the class Piazza Forum.
Your USC e-mail address will be used to add you to this forum.
- 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 labs and programming 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 labs and programming assignments are to be done in standard C++ (i.e., c++11, c++14, or c++17).
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 labs and 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 labs and 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 viterbi-scf1.usc.edu (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 labs and 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 (currently, this link is invalid; it will be active after the start of the semester).
If I don't get questions from you, I would have to assume that you understand everything.
Su Mo Tu We Th Fr Sa
Wk 1 21 22 23 24 25 26 27 first day of classes: 8/22
Wk 2 28 29 30 31
Su Mo Tu We Th Fr Sa
Wk 2 1 2 3
Wk 3 4 5 6 7 8 9 10 labor day: 9/5, pa1 due 9/9
Wk 4 11 12 13 14 15 16 17
Wk 5 18 19 20 21 22 23 24
Wk 6 25 26 27 28 29 30 pa2 due 9/30
Su Mo Tu We Th Fr Sa
Wk 6 1
Wk 7 2 3 4 5 6 7 8
Wk 8 9 10 11 12 13 14 15 fall recess: 10/13-10/14
Wk 9 16 17 18 19 20 21 22 midterm: 10/18, pa3 due 10/21
Wk 10 23 24 25 26 27 28 29
Wk 11 30 31
Su Mo Tu We Th Fr Sa
Wk 11 1 2 3 4 5
Wk 12 6 7 8 9 10 11 12 pa4 due 11/11
Wk 13 13 14 15 16 17 18 19
Wk 14 20 21 22 23 24 25 26 thanksgiving: 11/23-11/25
Wk 15 27 28 29 30
Su Mo Tu We Th Fr Sa
Wk 15 1 2 3 pa5 due 12/2
4 5 6 7 8 9 10
11 12 13 14 15 16 17 final exam: 12/13 (11am-1pm)
If you have questions, please e-mail the instructor at <firstname.lastname@example.org>