[ Home | Syllabus | Schedule ]
Computer communication networks are among the most important and influential global infrastructures that humanity has created. The goal of this course is to provide a foundational view of communication networks: the principles upon which the Internet and other computer networks are built; how those principles translate into deployed protocols; and hands-on experience solving challenging problems with network protocols.
Topics will include link-layer technology; switching; routing; the Internet Protocol; reliability, flow control, congestion control, and their embodiment in TCP; quality of service; and network security. The course will involve a significant amount of Unix-based network programming using the C language. Students who are not already familiar with ANSI C should learn it quickly.
|TA office hrs||
Federico: Monday 4-5pm & Wednesday 2-3pm
All at SC 3109
Lecture videos for I2CS
Please post all general questions about lectures, homeworks, or programming projects on Piazza rather than emailing the staff, so that others get the benefit of your questions. If you choose so, you can post anonymously to your classmates, the instructors will always see the author of a post. If you wish to communicate anonymously with the staff, please use the private communication function on Piazza
Exception: do not post your homework or programming project solution to the newsgroup. If in doubt, contact the TA or instructor first. You should also monitor Piazza for answers to your classmates' questions and other clarifications and announcements. Everyone gets frustrated when questions and answers have to be repeated. We will monitor the newsgroup and try to respond to questions within 24 hours (outside of weekends). However, it is to the class's benefit when students help answer each other's questions. As instructors, we try to approve non-staff answers if they are correct.
sign-up link: coming soon
class discussion page: coming soon
The overall score in the class will be a weighted sum of the homeworks, exams, and projects, as follows:
|Programming Projects (4)||46% (3% MP0, 11% MP1, 16% MP2, 16% MP3)|
Deadlines for MPs will be as announced. Late MPs will be accepted, but penalized 2% per hour late (rounded up to the nearest integer number of hours). MPs solutions can be in C or C++. However only C will be supported by the staff (meaning we will not always answer code-related questions on C++). If you choose to use C++, you are not allowed to use any socket programming library, all the networking should be done using the standard C API taught in class.
Your code must be your own. You can discuss very general concepts with others, but if you find yourself looking at a screenful/whiteboard of pseudocode (let alone real code), you're going too far.
Graduate students and some I2CS students may take this course for 4 hours instead of 3. Those students taking the 4-hour version will do a term paper in addition to the regular course work. Undergraduates must take the 3-hour option only.
Within one week of posting of grades for a homework, MP or exam. Regrades must be submitted in writing
on a separate piece of paper. Please do not write on your homework, MP or Exam.
The primary textbook used for this course is:
The following book is recommended (not required) for the Unix network programming portion of the course:
After the 1990 edition, UNIX Network Programming was expanded to a three volume set in 1999, and a third edition was published in 2003. While the three volume set includes much more material and is more up-to-date, it also leaves out some of the essential preliminary material on UNIX programming that was in the 1990 edition. If you have very little experience with Unix network programming you are advised to read chapters 1, 2, 3 and 6 of the first edition. You would then be prepared to take advantage of Volume 1 of the second or third edition. If you have previous Unix programming experience (for example, from CS 241) you may prefer to begin with the latest edition.
Finally, you will need to have (or quickly acquire) a good knowledge of the ANSI C programming language, including the use of pointers, structures, typedef, and header files. Thus, you should have a basic book on ANSI C (such as the one by Kernighan and Ritchie, but there are many nice books on ANSI C), unless you are experienced enough in C programming to just use the man pages on the workstations for help.