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 6 to 7 programming assignments and some of them 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.

PREVIEW
My actual CS 353 class web site for Spring 2019 is not ready yet. Since many students are registering now, I felt that I should post some important rules about my sections 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.)

Exams

  • The midterm exam will be 80 minutes long and it will take place on March 4, 2019, during class, from 12pm to 1:20pm.

  • The dates and times for the final exams are 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 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. Our final exam will be 100 minutes long and it will go from 11am to 12:40pm on Friday, May 3, 2019.

Workload

  • We will have 5-6 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 will get a very ver low score. For this class, you will not be given any partial credit for "effort".

    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! We will not be giving out "solutions" to even lab assignments. If your code is not working, you are expected to come to office hours and helpdesk 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 attend every lecture 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).

Preparation

  • The prerequisite for this course is CS 201 (Principles of Software Development). The prerequisite for CS 201 is CS 104L, and 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).

  • All programming assignments in this class are to be done in C or GNU version of 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.) All networking related programming assignments are to be done in C (i.e., without C++ networking libraries since they are not part of "standard C++"). C is a proper subset of standard C++. If you know standard C++, you already know C.

  • Your program must compile and run with a Makefile either on nunki.usc.edu (running the Solaris Unix OS) or on a 32-bit Ubuntu 16.04 machine running inside VirtualBox/VagrantBox. Grading for programming assignments can ONLY be done on nunki.usc.edu or on a 32-bit Ubuntu 16.04 machine running inside VirtualBox/VagrantBox. 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 are comfortable with commandline interface to Linux/Unix systems (i.e., without a desktop), you can also try VagrantBox and use it for your programming assignments.

    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.

Important Dates (programming assignments due dates may change)

  • (Jan 7, 2019) - first day of class
  • (Jan 21, 2019) - Martin Luther King Day, university holiday
  • (Jan 25, 2019) - PA1 due
  • (Feb 18, 2019) - Presidents' Day, university holiday
  • (Feb 15, 2019) - PA2 & PA3 due
  • (Mar 4, 2019) - midterm (80 minutes), 12pm - 1:20pm (firm)
  • (Mar 8, 2019) - PA4 due
  • (Mar 11-15, 2019) - Spring recess
  • (Apr 5, 2019) - PA5 due
  • (Apr 26, 2019) - PA6 due
  • (May 3, 2019) - final exam (100 minutes), 11am - 12:40m (firm)