Ever wondered what makes the Internet tick and social networks buzz? Want to gain hands-on experiences of implementing networking protocols and applications? If so, this is the right course for you.
This course focuses on the communications protocols used in computer networks: their functionality, specification, implementation, and performance; and how protocols work together to provide more complex services. Aspects of network architectures are also considered. Laboratory projects are an integral part of the course in which networking concepts are explored in depth.
We will cover topics including network applications (e.g., Web, Email, peer-to-peer applications such as BitTorrent, cloud storage services such as Dropbox, video streaming), TCP and UDP transport protocols, the IP protocol, routing algorithms, medium access layer (e.g., IEEE 802.11 wireless MAC), physical layer over wired and wireless medium, and Internet infrastructure such as domain name system (DNS), network security - these comprise the Internet's core components.
The course breaks down into lectures, lab assignments, quizzes, and a course project. The projects will run for the last two weeks of the course. There will be no formal lectures or quizzes during the last two weeks of the course, but only invited talks from people in networking industry. The hope is that students can better focus on their group projects and in the meantime learn perspectives from the industry. The projects will be organized around a design review, code review and demo event.
Prerequisites
CS 50. We expect you have strong programming skills to take this course. Since the focus of this course is on networking and not specifics on programming languages, we do not require you to use a particular language. You can use any language that supports socket programming.
Textbooks
James Kurose and Keith Ross. Computer Networking: A Top-Down Approach. The sixth edition.
References:- Larry Peterson and Bruce Davie. Computer Networks: A Systems Approach.
- Andrew S. Tanenbaum. Computer Networks.
Grading Policy
Class participation and quizzes: 35%We encourage active participation in class discussions. We will also have a quiz after each lecture (before week 7) to help you review lecture materials. As for the quizzes, you can make as many attempts as you like and resort to your notes but you have only one day to complete each quiz. Your involvement in class discussion and your performance in quizzes will contribute to this part of the grade.
Assignments: 40%There are four programming assignments over the first seven weeks. These assignments are to be done individually. The schedule is online, so plan ahead and stay on schedule.
The TA will grade your solutions and write up a grade sheet on the correctness, simplicity, and clarity of your code. The instructor will review the TA's grading and grade sheets. Your grade and grade sheet will be returned to you one week after the lab assignment is turned in. If you have questions about the grade or grade sheet please talk to the TA first. If you are still have concerns see the instructor. Please do not post your lab solutions on any public repository at any time of the course or after the course.
Important: All assignments will be submitted using GitHub Classroom. Each submission must have a README.md (and Makefile if the assignment is written in C). Submitted code that crashes/segfaults will not be graded. Students will have to fix the code and resubmit for grading. If crashed code is not fixed, the student will receive a zero grade for the lab. This is an upper-level class and we expect good working code.
Project: 25%The project is made up of a small team (3 - 4 people) and requires strong collaboration and a problem solving mindset to get the job done. The instructor will put the teams together with each member being responsible to deliver against a part of the overall system design, implementation, testing and integration. The goals of this activity are to help you develop the confidence, skills, and habits necessary to write large computer programs while part of a multi-person team. You will develop vital skills in self-directed learning, problem solving, and communication. The project will have a design and code review as well as the demo. A project report that captures the design and implementation will be submitted as part of the assessment.
Dartmouth Honor Code
The assignments and project are all about writing great code. Here is the policy for joint work in CS 60:
First, you may discuss and help each other (e.g., help in debugging, sharing knowledge, giving moral support, getting coffee, etc.) - I promote that as the type of team spirit and joint problem solving skills that is the essence of the course and necessary to do a great project. However, you cannot work jointly on coding up (i.e., writing) your programming assignments. You can talk, discuss solutions, but you cannot jointly write or share code.
The project phase is different. You can work jointly on writing code. But you cannot take code from anywhere (e.g., the web or any other source). It has to be the joint product of the team. One caveat: no sharing of code between teams. As above, teams can discuss code but not share source code. The project phase of the course is a friendly competition so there is not a lot of incentive to share code
We hate to state this since you all know it but it is necessary to be explicit here:
You should not under any circumstance look at or use code from previous terms' assignments and projects. We have smart shell scripts that can find similar code. The message is - please don't make life unpleasant for all of us by breaking these rules. The penalties for cheating at Dartmouth are severe, starting with suspension and including expulsion. If you are unsure about anything, please ask.
We take the Honor Code very seriously, so please, if you are unclear on any matter regarding this policy, do not hesitate to see me in office hours, and I will be more than happy to answer your questions.
* This course is based upon the previous course designed by Prof. Andrew Campbell and Prof. Sebastiaan Joosten. This instructor deeply appreciates their efforts on the previous course design.