Click here to see a PREVIEW of important rules that was posted before the semester started. 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.

Instructor Bill Cheng (click to see office hours)
E-mail: <bill.cheng@usc.edu>.  (Please do not send HTML-only e-mails. They will not be read.)
Time MW 12:00pm - 1:50pm 
Location GFS 116 
Course Producers / Graders
Liuhan Huang <liuhanhu@usc.edu>, Helpdesk Hours: Tue/Thu 11:30am - 1:00pm in SAL open lab (in front of SAL 126)
Hongzhou Li <hongzhol@usc.edu>, Helpdesk Hours: Mon/Wed 4:00pm - 5:30pm in SAL open lab (in front of SAL 126)
Amulya Nagaraju <nagaraju@usc.edu>, Helpdesk Hours: Tue 3:30pm - 5:00pm and Wed 1:00pm - 2:30pm in SAL open lab (in front of SAL 126)
Muhammed Khan <muhammek@usc.edu>, Helpdesk Hours: Mon/Thu 10:00am - 11:30am in SAL open lab (in front of SAL 126)
Midterm Exam 12pm-1:12pm (72-minutes long), Mon, 3/4/2019 (firm).
Final Exam 11am-12:40pm (100-minutes long), Fri, 5/3/2019 (firm).
Class Resources
Description   :   textbooks, topics covered, grading policies, additional resources, etc.
Lectures   :   information about lectures (and lectures slides in PDF format).
Discussions   :   information about discussion sections.
Programming   :   programming assignments (please also see important information about programming assignments at the bottom of this web page.)
Forum   :   Piazza Forum for discussing course materials and assignments. You are required to be a member of this group. (This group is by invitation only.) Please do not send request to join this group until after the first lecture.

(in reversed chronological order)
  • 4/15/2019:
    • Hongzhou Li will be holding her helpdesk hours in the Leavey Library basement this week in room 3F (Thu 12:00pm-3:00pm).
    • Amulya Nagaraju will be holding her helpdesk hours in the Leavey Library basement this week in room 3X (Tue 3:30pm-5:00pm and Wed 1:00pm-2:30pm).

  • 4/7/2019:
    • Due to room availability issue in the LVL, Hongzhou Li will not be able to hold helpdesk hours on Mon/Wed at his usual timeslots. Instead, he will be holding his helpdesk hours this week on Thursday, 12:00pm-3:00pm in room 3F of the Leavey Library basement.
    • Amulya Nagaraju will be holding her helpdesk hours in the Leavey Library basement this week in room 3Q (Tue 3:30pm-5:00pm and Wed 1:00pm-2:30pm).

  • 4/1/2019:
    • Hongzhou Li will be holding his helpdesk hours in the Leavey Library basement this week (Mon 4:00pm-5:30pm in room 3F, Wed 4:00pm-5:30pm in room 3K).
    • Amulya Nagaraju will be holding her helpdesk hours in the Leavey Library basement this week in room 3X (Tue 3:30pm-5:00pm and Wed 1:00pm-2:30pm).

  • 3/26/2019:
    • Muhammed Khan's helpdesk hour this Friday (3/29/2019) is cancelled. He will have a make-up helpdesk hour next Thursday (4/4/2019) from 10am to 11:30am in SAL open lab (in front of SAL 126). Sorry about the inconvenience this may have caused.

  • 3/25/2019:
    • Amulya Nagaraju will be holding her helpdesk hours in the Leavey Library basement this week (Tue 3:30pm-5:00pm in room 3W, Wed 1:00pm-2:30pm in room 3W).
    • Office hour this Tuesday for Liuhan Huang has been moved to Thursday. Her office hours this week will be from 11:30am to 2:30pm in SAL open lab (in front of SAL 126).

  • 3/24/2019:
    • Hongzhou Li will be holding his helpdesk hours in the Leavey Library in room 202H (2nd floor) this week (Wed 2:00pm-5:00pm).

  • 3/19/2019:
    • Hongzhou Li will be holding his helpdesk hours in the Leavey Library in room no 3H (Basement) this week (Wed 2:30pm-5:30pm).

  • 3/18/2019:
    • Amulya Nagaraju will be holding her helpdesk hours in the Leavey Library basement this week (Tue 3:30pm-5:00pm in room 3T, Wed 1:00pm-2:30pm in room 3N).

  • 3/7/2019:
    • Muhammed Khan has cancelled his Thursday helpdesk hours today and moved it to Friday 1pm - 2:30 pm.

  • 3/4/2019:
    • I'm extending the submission deadline for PA4 to 11:45pm on Sunday, 3/17/2019. If you submit by the original deadline (on 3/8/2019), you will get 15% extra credit for early submission. If you submit by the original 5% extra credit early submission deadline (on 3/6/2019), you will get 20% extra credit for early submission. If you submit by the original 10% extra credit early submission deadline (on 3/5/2019), you will get 25% extra credit for early submission.
    • Amulya Nagaraju will be holding her helpdesk hours in the Leavey Library in room no 3W (Basement) this week (Tue 3:30pm-5:00pm, Wed 1:00pm-2:30pm).
    • Hongzhou Li will be holding his helpdesk hours in the Leavey Library in room no 3G (Basement) this week (Mon 4:00pm-5:30pm, Wed 4:00pm-5:30pm).

  • 3/1/2019: The following lecture slides corrections have been made:
    • Slide 52 and 53 of Lecture 12 have been fixed to look like Figure 3.16 (d) of the textbook. Slide 54 has been deleted since the textbook does not include that slide.

  • 2/27/2019:
    • Muhammed Khan has cancelled his Thursday helpdesk hours tomorrow and moved it to Friday 1pm - 2:30 pm.

  • 2/25/2019:
    • Amulya Nagaraju will be holding her helpdesk hours in the Leavey Library in room no 3W (Basement) this week (Tue 3:30pm-5:00pm, Wed 1:00pm-2:30pm).

  • 2/24/2019: The midterm exam will be closed book, closed notes, and closed everything, except for a single "cheat sheet" (letter-sized, single or double sided, but must be on one sheet of paper). Magnifying glasses are not permitted, so don't print too small! You will be required to turn in the cheat sheet together with the exam paper (just insert the cheat sheet anywehere in the middle of the exam paper).

    Also, no calculators, cell phones, or any electronic gadgets are allowed. Please bring a photo ID. Your ID will be collected at the beginning of the exam and will be returned to you when you turn in your exam. There will be assigned seating and you are required to sit in your assigned seat. No matter how late you show up for the exam, your exam must end at the same time as everyone else. So, please come to the exam on time.

    The midterm exam will cover everything from the beginning of the semester to the last slide of Lecture 15 on 2/25/2019 and Ch 1 through Ch 3 of the Kurose & Ross textbook (except for sections (3.6) and (3.7) since we will not have covered them by the end of Lecture 15 and sections explicitly excluded below).

    Regarding what types of questions will be on the midterm, please see the Exams section of the course description web page and the Exam slides (PDF). Regarding regrade policy, please see the Regrade section of the course description web page.

    Here is a quick summary of the midterm exam topics (not all topics covered may be listed):

    • Ch 1 - Computer Networks and the Internet
      • (1.1) what is the Internet
      • (1.2) the network edge
      • (1.3) the network core
      • (1.4) delay, loss, and throughput in packet-switched networks
      • (1.5) protocol layers and their service models
      • (1.6) network under attack
      • (1.7) history of computer networking and the Internet (excluded from the exam)
    • Ch 2 - Application Layer
      • (2.1) principles of network applications
      • (2.2) the web and HTTP
      • (2.3) electronic mail in the Internet
      • (2.4) DNS - the Internet's directory service
      • (2.5) peer-to-peer applications
      • (2.6) video streaming and conent distribution networks
      • (2.7) socket programming: creating network applications
    • Ch 3 - Transport Layer
      • (3.1) introduction and transport-lyer services
      • (3.2) ultiplexing and demultiplexing
      • (3.3) connectionless transport: UDP
      • (3.4) principles of reliable data transfer
      • (3.5) connection-oriented transport: TCP
      • (3.6) principles of congestion control (excluded from the exam)
      • (3.7) TCP congestion control (excluded from the exam)
    • Discussion
      • sockets programming
      • multithreading parts 1, 2, & 3
      • PA1, PA2, PA3 and Labs 1 through 7
        • specs
        • FAQs
        • various discussions about these assignments


  • 2/20/2019:
    • Hongzhu Li be holding his helpdesk hours in the Leavey Library in room 3F (Basement) 4:00pm-5:30pm on Wed 2/20/2019, Mon 2/25/2019, and Wed 2/27/2019.

  • 2/19/2019:
    • Amulya Nagaraju will be holding her helpdesk hours in the Leavey Library in room no 3J (Basement) this week (Tue 3:30pm-5:00pm, Wed 1:00pm-2:30pm).

  • 2/14/2019:
    • Helpdesk hour today for Liuhan Huang (Thursday 11:30am - 1:00pm) has been cancelled and moved to tomorrow (Friday) at 3:30pm - 5:00pm. Sorry about the inconvenience.

  • 2/13/2019:
    • PA2 and PA3 extra credit deadlinen has been extended by 24 hours. If you submit by the end of tonight, you will get 10% extra credit. If you submit by the end of tomorrow night, you will get 5% extra credit.

  • 2/11/2019:
    • Hongzhou Li will be holding his helpdesk hours at LVL Basement 3F this week (Mon 4:00pm to 5:30pm, Wed 4:00pm to 5:30pm).
    • Amulya Nagaraju will be holding her helpdesk hours in the Leavey Library at room no 3H (Basement) this week (Tue 3:30pm-5:00pm, Wed 1:00pm-2:30pm).

  • 2/7/2019: I should have added this item earlier. On 1/28, one of our course producers, Liuhan Huang, posted to the class Piazza, saying that she will be out of town and will not be able to hold helpdesk hours on 1/29, 1/31, 2/5, 2/7, and 2/12.

  • 12/12/2018:
    • Watch this area for important announcements.

    • To get user ID and password for accessing protected area of this web site, please visit the request access page after semester starts and submit the requested information. (You do not have to be registered for the course to get the password. You just need to have an USC e-mail address.)

    • Please do not send request to join the class Piazza Forum until after the first lecture.
The prerequisite for this course is CSCI 201 (Principles of Software Development). Please see the CS Course Catalog for information about CSCI 201.

According to the CS Course Catalog, the prerequisite for CSCI 201 is CSCI 104L, and the prerequisite for CSCI 104L is CSCI 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 CSCI 104L is CSCI 170, and graphs and basic graph algorithms are covered in CSCI 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 basic graph algorithms such as breadth-first-search (BFS).

All programming assignments 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.) All networking related programming are to be done in C (i.e., without C++ socket libraries). 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 or on a 32-bit Ubuntu 16.04 machine running inside VirtualBox. Grading for programming assignments can ONLY be done on nunki.usc.edu (which runs a Unix operating system) or on a 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. If you knew how to use Unix/Linux before and just need a refresher, please review a summary of some commonly used Unix commands. It's a good idea to be familiar with the Unix/Linux development environment (vi/pico/emacs, gcc/g++, make, etc.) 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.

If a student registered late for this class or could not be present at the beginning of the semester, he/she is still required to turn all the assignments on time or he/she will receive a score of 0 for these assignments. No exceptions!