Category | Difficulty |
---|---|
Quiz | 5 |
Projects | 7 |
Exams | 7 |
This class is a great introduction to Computer Networks covering all the layers of the network stack with the physical and data-link layer covered in the first half of the course and network, transport and application layer covered in the second half of the course. The course does not assume background with socket programming and dealing with highly concurrent programs, however experience with the same through other systems courses like 18-213 should be great help. The course is quite comprehensive in providing a whirlwind tour of networks and helps in building good intuition and experience in network programming. This class used to traditionally be offered in the Spring but has now been shifted to the Fall.
All projects in the course are mandatory to be completed in Python, which is well known for its great in-built data structures, parsing and library support. It allows for students inexperienced with systems programming before to comfortably work on the projects in the given timeframe without getting bogged down by syntactic or arcane memory related issues. Prior experience in dealing with python data structures such as lists, dictionaries and familiarity with the rich string manipulation and parsing functions as well as numerical libraries such as numpy should greatly aid in completing the projects.
The lectures are an integral part of the course with key concepts explained in class through examples along with the discussions and questions asked by students during class. The quizzes and exams rely heavily on material discussed in class hence attending lectures should help immensely. The first few the lectures cover the physical layer involving details around modulation, bit encoding, link bandwidth and noise immunity. The next few lectures deep dive into the data-link layer covering concepts around flow control, medium access control, framing and error detection and correction. The second half of the course focuses heaily on the network and transport layer and talks about routing protocols and algorithms, addressing and naming in the Internet. The lectures also cover the two most well known transport protocols including UDP and TCP, their semantics, techniques for congestion control. The last few lectures dive into the application layer protocol and techniques that are transforming the network such as content delivery networks, software defined networks, 5G and other interesting research topics. The recommended textbook for this course is Computer Networks: A Systems Approach by Bruce S. Davie and Larry L. Peterson, online free versions of which are available on the Internet as well as at CMU Libraries. The library also has hard copies of the book available as well.
There are bi-weekly quizzes in the course which amounts to 5 quizzes in total. The quizzes are meant to test concepts covered in recent lectures and not designed to be super hard. They can be taken and finished in a couple of hours depending on familiarity with the material, however usually a few days are provided for the quiz to be completed and submitted.
The projects are quite interesting, thought provoking and impart tons of learning in the course of completing them. The best part is that they are well aligned with the pace of the course and cover concepts that have been discussed in detail in class. There are four projects in total, each covering a different layer of the network stack. The first project involves writing a Wifi receiver with the transmitter code and algorithm provided. Students will learn how bits are actually modulated and encoded to provide noise immunity by writing their own Viterbi decoder from sratch. The second project focuses on the network layer with students implementing their own routing algorithms to get an idea of large scale routing design and challenges. The third project focuses on the transport layer and involves the implementation of delivering a byte stream reliably in the presence of packet loss, re-ordering and duplication. The final project involves designing a content delivery server capable of handling hundereds of concurrent clients. All the projects involve heavy socket programming and dealing with concurrent programs making them challenging and fun at the same time.
Exams are not designed to be super tricky or difficult but instead focus on the concepts covered in lectures and in projects. Going through past year paper should help in gaining familiarity with the format, number of questions and time management. The exams usually do not test concepts based on memory and a cheatsheet is allowed in order to avoid such memorization and promote understanding the reasons and idea behind concepts well. A few questions can be tricky, but going through the lectures and projects thoroughly should allow one to answer them intuitively.
-
Pay attention to the lectures, do not miss any of them.
-
Treat the biweekly quiz as a small test of sorts as they would help in preparing for the exams
-
The projects are hard, and it is encouraged to go to office hours and get help from anything related to programming, concepts or any other confusion
-
For exam preparation make sure to solve enough past year question paper released by the course staff.