This is a course on how the Internet works, designed for upper-division undergraduate and beginning graduate students. The learning outcomes for this course are:

Topics this course covers include application-layer networking, transport protocols, routing protocols, IP, link-level protocols, wireless networking, and multimedia networking.

The prerequisite for the course is CS 360 Internet Programming.

To meet the goals of the course, students will complete written homeworks, labs, and exams. The homeworks and exams will consist primarily of written questions that ask the students to apply the principles of network design to a given problem. The labs are designed to provide a deeper understanding of how the Internet works by using simulation.


For the lecture material, we will use

Computer Networking: A Top-Down Approach Featuring the Internet, sixth edition, by James F. Kurose and Keith W. Ross, Addison Wesley, 2012, ISBN 0132856204, ISBN-13 978-0132856201.

Please buy this version of the book. There are important additions and the homework problems are different. There are numerous options for buying or renting this book, some of which are listed at the Kurose & Ross web site.

We will do a significant amount of Python programming in this class. If you are not already familiar with the language, I suggest you learn Python by using some of the free online resources that are available, or a book.

I also suggest that you become familiar with the official Python documentation.

Computing Environment

We will be using a Linux environment for this class. You can use the Linux labs, setup your laptop to boot into Linux, or setup a virtual machine running Linux. We will be using Python 2.7, along with various packages such as matplotlib and LaTeX. You are strongly encouraged to become familiar with Linux, its software, and the command-line environment. Being fluent in multiple computing environments is an important part of a CS education.

You will likely have good success using a Mac OS machine with the required software, but you will need to do this on your own. Based on past experience, I strongly discourage you from using Windows; you should setup a virtual machine with Linux instead. Either way, your code will be expected to run on a Linux machine when you submit it.

Assignments and Grading Policy

The assignments for this class will consist of homework, labs, and exams. Labs must be written in the assigned language and must compile and run on a Linux machine.

Grading for homework and exams will be on a scale of 0 to 10 for each problem, with a final score based on the total possible points. A score of 10 indicates your answer is entirely correct (A), and a score of 5 indicates your answer is entirely wrong but you made a reasonable effort (E). Failure to make a reasonable effort to answer a question scores a 0.

Labs will be graded using a rubric that indicates how many points each part of the assignment is worth.

Your final grade will be computed by weighting all scores as follows:

Homework 20%

Exams 30%

Labs 50%

Collaboration Policy

All homework must be completed individually. You are encouraged to collaborate as much as possible, including discussing solutions and solving problems together, as long as you write up your own answer individually (e.g. do not copy someone else's solution directly).

You may work on labs either alone or using pair programming. If you choose to use pair programming, the partners must trade off in the two positions (at the keyboard, over the shoulder) during each lab. Each pair will turn in the same assignment and will be required to sign a statement indicating that they participated equally. If you are unable to contribute equally, you should leave the partnership as soon as this becomes evident. Regardless of whether you choose to work alone or in a pair, you are encouraged to discuss solving the labs and any programming problems you encounter generally, but you must write your own code and should not view any other student's code. When producing written work, your use of sources (ideas, quotations, paraphrases) must be properly acknowledged and documented.

All exams must be completed individually. Exams are open note and open Internet, but you may not receive help from any person.

Late Policy

Homework is due in class on the day indicated, and there are no late days. If you have a medical or serious personal issue, please see the instructor to make arrangements for late work. You may always turn in partial work if you are not finished and you will be graded on what you have accomplished.

Labs are due on the day indicated. To accommodate difficulties in your schedule, you can turn in work late, but you will be penalized 10% for every two days late, including weekends and holidays. You may avoid late penalties due to a medical excuse by making an arrangement in advance with the instructor. Exceptions can also be made for a learning disability if you turn in an accommodations letter during the first week of class. No work can be turned in after the university's last day of instruction.

Exams must be taken on the scheduled day. Medical exceptions are always available, but please notify the instructor in advance or as soon as possible. Non-medical exceptions (e.g. traveling to a job interview) can be made in advance with sufficient notice.

Retake Policy

Students are allowed only one retake of any class. If a student withdraws from or fails a class a second time, the student will not be allowed to register for any CS course for one semester (or one term, if in spring or summer). This policy does not apply to classes dropped before the add/drop deadline.

After one semester (or term), a student must petition to be allowed to take CS courses again. The petition must provide evidence of a substantive change that makes success in future CS classes much more likely. For example, a student may have demonstrated success in technology, math, or science-based courses. The petition will be reviewed by the undergraduate advisor.

Petitions for non-academic (e.g., medical or military) exceptions to the one semester/term waiting period may be granted according to university policies. Information about filing a petition can be found at

Educational Policies

Honor Code Standards

In keeping with the principles of the BYU Honor Code, students are expected to be honest in all of their academic work. Academic honesty means, most fundamentally, that any work you present as your own must in fact be your own work and not that of another. Violations of this principle may result in a failing grade in the course and additional disciplinary action by the university.

Policy on Harassment

Harassment of any kind is inappropriate at BYU. Specifically, BYU's policy against sexual harassment extends not only to employees of the university but to students as well. If you encounter sexual harassment, gender-based discrimination, or other inappropriate behavior, please talk to your professor, contact the Equal Employment Office at 422-5895 or 367-5689, or contact the Honor Code Office at 422-2847.

Students with Disabilities

BYU is committed to providing reasonable accommodation to qualified persons with disabilities. If you have any disability that may adversely affect your success in this course, please contact the University Accessibility Center at 422-2767. Services deemed appropriate will be coordinated with the student and instructor by that office.