CSCI-4220 Network Programming Syllabus
Instructor: Jasmine Plum [she/her] ()
Please keep in mind that while the course is "online", the instructor may not be able to always respond quickly. Responses will typically come within the next business day.
Graduate TA: Liangbin Zhao ()
Office Hours:
Instructor by appointment, Liangbin Wed 3p-5p and Fri 5p-6p, Jinyi Wed 8:30a-9:30a and Fri 8:30a-9:30a
Class Times: (Online, not live, see Submitty for MediaSite link) - official slot is for Tu/Fri 10:10-12:20 PM EST
Undergraduate Mentors:
- Jinyi Xie
Submitty Link: https://submitty.cs.rpi.edu/courses/f20/csci4220
Like the Constitution, this syllabus should be considered a "living document" in that it is subject to change. You will be notified of any changes made.Pre-requisites: CSCI 4210 Operating Systems or equivalent
About the Course: Programming with an overview of the principles of computer networks, including an overview of the OSI reference model and various popular network protocol suites. Concentration on Unix interprocess communication (IPC), network programming using TCP and UDP, as well as client-side and mobile programming. Programming projects in C++ and/or Python are required.
Some of the work will be team-based due to the student-to-TA ratio. You are not required to use the same teams for the entire semester, more details will be mentioned early in the semester.
Grading:
The grades will be broken down as follows:
- Homework Assignments: 4 at 18.25% each = 73%
- Team Lab-style Mini-assignments: 27%
Grades will be curved, and approximate cutoffs for A-, B-, C-, and D will be kept up to date throughout the semester via Rainbow Grades on Submitty. Grade modifiers will be used in this class. See the course catalog for more details. There is no A+ nor is a D- allowed under the RPI Grade Modifier Policy.
Grade disputes must be made within 10 days. After 10 days have elapsed, the grade on record will stand.
Attendance: Attendance at lectures is not required, but be aware that I may include material not necessarily covered in the text or on the web page. You are responsible for all announcements made in lecture (e.g., any change in due dates). On days marked on the schedule as "Lab Day", labs are due by the end of the period.
Late Assignments Policy: Five late days are permitted for assignments across the semester (max of 3 per assignment). They will be consumed in whole day increments. In other words, if you are one hour late, that will count as one day. 25 hours late will count as two days, etc. Once these are exhausted, late assignments will not be graded. For team assignments all team members will be charged the late days.
Late Labs Policy: Late labs will not be accepted.
Recommended Textbook: Unix Network Programming, Volume 1: The Sockets Networking API, 3rd Edition (2003), by W. Richard Stevens et al [Amazon] - we will be using code from this book which available online for free, but the text does explain the code in greater depth.
Assignment Grading Criteria: Your submission must include the following items:
- A Makefile that will build your program
- One or more .c files
- One or more .h files
- Any other assorted files necessary for proper compilation
- A README file (.txt extension optional) describing your program, any issues you encountered, the approximate time you spent on it, and the breakdown of work if it's a group assignment
Programming assignments are graded as follows: 25% for proper comments (e.g., each function should indicate what it does) and 75% for a correct working implementation. We typically divide the correctness points over key functions working. For example, reading -- worth 20 points, writing -- worth 20 points, and then doing the calculation correctly -- worth 35 points. Note that programs that either don't compile or generate a core dump typically get no more than 20 points of the 75. Thus, your max score for a "properly commented" program that fails in some fundamental way is only 45 points even if you spent 100 hours of time on it.
Compatibility: All assignments MUST compile with clang/clang++ and run on Ubuntu 18.04. This is the compiler and operating system on Submitty so you will have no problems meeting this requirement. It is worth noting that not all valid C programs are valid C++ programs. All C files must compile cleanly with clang++. Be careful when using C library calls to not rely on undefined behaviors.
Accomodations: Federal law requires all colleges and universities to provide specified types of assistance to students with disabilities. If you require such assistance, please obtain an authorizing memo from Disability Services for Students by contacting the Student Health Center. Information about a student's special needs will be treated as confidential. Please submit a copy of your authorizing memo to your professor well in advance of any affected exam or assignment. Failure to do so may result in a lack of special accommodations.
Academic Integrity: While I strongly encourage you to form study groups and work together in learning this material, programming assignments are to be done individually unless otherwise noted by the assignment/project specification. What this means is that you should do whatever is necessary to ensure your work remains your work. If during in the grading process, it is determined that students shared or duplicated work, those students will automatically score a zero for the offense. For a second offense, the student or students involved will fail this course and a report will be sent to the Dean of Students office which could result in additional disciplinary action. Additionally, undergraduates offenders cannot mentor in the future. In the event a graduate student is caught cheating, that student will fail.
Learning Outcomes: By the end of this course, you will be able to:
- Understand the OSI reference model and a variety of network protocols.
- Implement specific network programming constructs on Unix platforms to create robust real-world sockets-based applications.
- Design and implement client/server programs using a variety of protocols and platforms.
- Apply the concepts of the C programming language to the construction of moderately complex software implementation problems.
- Make use of at least one RPC framework.
Schedule: This will be updated as the semester progresses:
Date | Topics |
---|---|
9/1 | Intro to Online Semester ; History / OSI model; Unix commands |
9/4 | TBD |
9/8 | MONDAY SCHEDULE |
9/11 | Lab Day (Lab 1) |
9/15 | TFTP, Signals |
9/18 | Lab Day (Lab 2) |
9/22 | Sockets (TCP), Select |
9/25 | Lab Day (Lab 3) |
9/29 | TCP State and Congestion |
10/2 | Threads, Non-blocking I/O |
10/6 | Lab Day (Lab 4) |
10/9 | gRPC |
10/13 | Lab Day (Lab 5) |
10/16 | P2P / Kademlia |
10/20 | QUIC / IPFS |
10/23 | IRC |
10/27 | Application Protocols, FTP, TELNET |
10/30 | Lab Day (Lab 6) |
11/3 | IPv6, gethost()... |
11/6 | Lab Day (Lab 7) |
11/10 | RPISEC Talk |
11/13 | Security Part 1 |
11/17 | Security Part 2 |
11/20 | HTTP |
11/24 | Lab Day (Lab 8) |
11/27 | NO CLASS - THANKSGIVING BREAK |
12/1 | No lecture |
12/4 | Socket Options |
12/8 | Lab Day (Lab 9) |
12/11 | Buffer Bloat |
Schedule of Assignments and altered class days:
This will be updated as the semester progresses.
All due dates refer to 11:59:59 PM unless otherwise specified.
- Assignment 1 due Fri September 25th
- Assignment 2 due Fri October 16th
- Assignment 3 due Tue November 10th
- Assignment 4 due Tue December 8th