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") in C++. You will learn to make "system calls" to interact with "the system". There will be 5 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
Zijie Fang <zijiefan@usc.edu>, Helpdesk Hours: Tue/Thu 9:30am - 11:0am on Zoom
Leu-Yang Huang <leuyangh@usc.edu>, Helpdesk Hours: Mon/Wed 2:30pm - 4:00pm on Zoom
Hengquan Zhang <hengquan@usc.edu>, Helpdesk Hours: Tue/Thu 3:00pm - 4:30pm on Zoom
Graders
Ramnath Kalakota, E-mail: <kalakota@usc.edu>
(If needed, the grader will hold regrade sessions the week after the announcement of each assignment's grades.)
Midterm Exam 12pm-1:12pm (72-minutes long), Mon, 3/9/2020 (firm).
Final Exam (NEW) 11am-11:40pm (40-minutes long), Fri, 5/8/2020 (firm).
Class Resources
Description   :   textbooks, topics covered, grading policies, additional resources, etc.
Lectures   :   information about lectures (and lectures slides in PDF format).
Labs   :   information about discussion sections and labs.
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/29/2020: The final exam will be a 40-minutes take-home, open book, open notes exam. No matter how late you start your exam, your exam must end at the same time as everyone else. So, please make sure that you are ready and available during the scheduled exam time indicated at the top of this web page.

    The final exam will cover everything from the first slide of Lecture 14 to the last slide of Lecture 27. Since the 2nd part of the course depends on stuff covered by the midterm, I cannot say that I will not ask anything covered by the midterm, and you do need to know the material covered by the midterm. Therefore, it would be more appropriate to say that the final exam will focus on the material not covered by the midterm.

    Regarding what types of questions will be on the final, please see the Exams section of the course description web page and the Exam slides (PDF) (although as I have mentioned in Lecture 27, I may switch to a different type of multiple choice questions if I am asked to make an exam with less questions). Regarding regrade policy, please see the Regrade section of the course description web page.

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

    • Ch 3 - Transport Layer
      • (3.1) introduction and transport-layer 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
      • (3.7) TCP congestion control

    • Ch 4 - The Network Layer: Data Plane
      • (4.1) overview of network layer
      • (4.2) what's inside a router
      • (4.3) the Internet protocol (IP): IPv4, addressing, IPv6, and more
      • (4.4) generalized forwarding and SDN

    • Ch 5 - The Network Layer: Control Plane
      • (5.1) introduction to the network control plane
      • (5.2) routing algorithms
      • (5.3) intra-AS routing in the Internet: OSPF
      • (5.4) routing among the ISPs: BGP
      • (5.5) the SDN control plane
      • (5.6) ICMP: the Internet control message protocol
      • (5.7) network management and SNMP

    • Ch 6 - The Link Layer and LANs
      • (6.1) introduction to the link layer
      • (6.2) error-detection and correction techniques
      • (6.3) multiple access links and protocols
      • (6.4) switched local area networks
      • (6.5) link virtualization: a network as a link layer
      • (6.6) data center networking
      • (6.7) retrospective: a day in the life of a web page request

    • Ch 7 - Wireless and Mobile Networks
      • (7.1) introduction wireless and mobile networks
      • (7.2) wireless links and network characteristics
      • (7.3) wifi: 802.11 wireless LANs

    • Discussion
      • multithreading part 4 - generalized synchronization with condition variables
      • PA3, PA4, PA5 and Labs 8 through 14
        • specs
        • FAQs
        • various discussions about these assignments

  • 3/10/2020:
    • Zijie Fang's will try his helpdesk hours online starting today. He has setup a Zoome meeting room (information removed for security concerns, please check class Google Group message archive). There is a queue for entering this waiting room and you may need to wait in line.

  • 3/9/2020:
    • Tomorrow, I need to get ready to move the Wednesday lecture online. I will be doing Zoom and Blackboard training and need to learn and practice how to record my own lecture video. Therefore, I'm canceling tomorrow's office hour. Sorry about the inconvenience.

  • 3/8/2020:
    • Hengquan Zhang's helpdesk hours this week will be held at the Leavey Library 2nd Floor-201A on Tuesday 3:00pm - 4:30pm.

  • 3/5/2020:
    • I will not be able to make it to office hour today. I will have a makeup office hour tomorrow from 11am to noon. Sorry about the inconvenience and the short notice.

  • 3/2/2020: 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 13 on 3/2/2020 and Ch 1 & Ch 2 of the Kurose & Ross textbook.

    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
    • Labs and programming assignments
      • sockets programming
      • multithreading parts 1, 2, & 3
      • PA1, PA2, and Labs 1 through 7
        • specs
        • FAQs
        • various discussions about these assignments


  • 3/1/2020:
    • Hengquan Zhang's helpdesk hours this week will be held at the Leavey Library 2nd Floor-201A on Tuesday 3:00pm - 4:30pm and in 201C on Thursday 3:00pm - 4:30pm.

  • 2/25/2020:
    • Zijie Fang has canceled his helpdesk hour today (9:30am - 11am). Sorry about the short notice and inconvenience.

  • 2/23/2020:
    • Hengquan Zhang's helpdesk hours this week will be held at the Leavey Library 2nd Floor-201B on Tuesday 3:00pm - 4:30pm and in 201A on Thursday 3:00pm - 4:30pm.

  • 2/16/2020:
    • Hengquan Zhang's helpdesk hours this week will be held at the Leavey Library 2nd Floor-201E.

  • 2/9/2020:
    • Hengquan Zhang's helpdesk hours this week will be held at the Leavey Library 2nd Floor-201A.

  • 2/2/2020:
    • Hengquan Zhang's helpdesk hours this week will be held at the Leavey Library 2nd Floor-201C.

  • 1/30/2020:
    • Due to car trouble, office hour today is canceled. Sorry about the inconvenience and the short notice.

  • 1/29/2020:
    • Starting with Lab 3, labs are due on Monday after the lab was assigned.

  • 1/28/2020:
    • Due to concerns about the coronavirus, office hour today is canceled. Sorry about the inconvenience and the short notice.

  • 1/27/2020:
    • Zijie Fang's helpdesk hours tomorrow is moved from 9:30am - 11:00am to 3:30pm - 5:00pm. Sorry about the inconvenience.

  • 1/21/2020:
    • Zijie Fang's helpdesk hours and location has been posted. Please scroll up to see them.
    • Due to urgent family matters, office hour today is canceled. Sorry about the inconvenience and the short notice.

  • 1/12/2020:
    • 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).

This is not an introductory class. We will assume that you know how to program because you are supposed to have satisfied all the prerequisites of this course. If you somehow were able to satisfy all the prerequisites of this course without being reasonably proficient in software development, it's not our job to teach you how to program. If you are not reasonably proficient in programming, may be you should consider taking this course at a later time when you are better at it. Or, you should get ready to spend a lot of time doing the labs and the programming assignments and start doing all your assignments as early as possible and seek help from the instructors and the course producers whenever you are stuck.

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 the 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 standard 32-bit Ubuntu 16.04 machine running inside VirtualBox. Grading for programming assignments can ONLY be done on a standard 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. Please install a 32-bit Ubuntu 16.04 into VirtualBox on your laptop/desktop as soon as possible and start using it with the very first programming assignment.

If you are not familiar with Linux/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 know 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 terminal-based Unix/Linux development environment (vi/pico/emacs, gcc/g++, make, etc.).

Although it's not recommended, but if you are a Linux/Unix expert and are comfortable with a commandline interface to Linux/Unix systems (i.e., without a desktop graphical user interface), you can also try VagrantBox (i.e., Vagrant with VirtualBox) and use it to do your programming assignments. But please understand that if you do your development in a VagrantBox, it's your responsibility to make sure that your code runs perfectly on a standard 32-bit Ubuntu 16.04 machine running inside VirtualBox since that's the only platform the grader can use for grading.

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