Links to sections on this page:
This is an undergraduate level course covering the fundamental concepts of networking as embodied in the Internet. Topics covered in this are: design principles, layering, protocol design/analysis of the global Internet; networked applications; the structure/architecture of the Internet; protocols for network transport and congestion control; network layer and routing; link layer/MAC; and network security.
You will also learn to write multi-threaded programs to create a network of communicating servers using "socket programming". You will be implementing several programming assignments and some of them can be quite time-consuming and challenging to implement and debug.
Please note that this is a Computer Science class and not a "tech class", i.e., it is not about the latest products and standards. The course material and assignments are meant to give students background in understanding designs, algorithms, and techniques used in the current Internet products and standards.
Recommended resources: (You can also use any equivalent resource you can find on the Internet. We will not refer to this book at all.)
The following schedule and topics are tentative and are subject to change without notice. The chapter numbers refers to the chapters in the required textbook.
At the end of very book chapters, there are exercises. Students should treat them as additional resources. These exercises will not be collected or graded, although students are encouraged to work on them if there is time.
You will be expected to complete a sequence of programming assignments to gain experience in developing networking applications.
All programming assignments must be done in C or C++. No other programming language will be accepted. There will be one warmup programming assignment at the beginning of the semester to make sure that you are up to speed with C/C++.
For more information, please see the programming assignments web page.
A midterm and a final examination will be given. The date of the midterm examination will be posted near the top of the class home page. The date of the final examination is firm and it is also listed near the top of the class home page. Any scheduling conflicts regarding the midterm exam date must be resolved with the instructor at least one week before the exam date. General Information section of the class web page.
There are three types of exam questions that I usually ask. The first type is a calculation-type question. Pretty much anything that can be calculated using equations or computed by running algorithms can be asked in an exam. For example, I can ask you to compute a shortest-path tree using one of the algorithms in PA1. I can also ask you to calculate probability of queueing for an out-going link of a router give some networking parameters. (Calculators will not be permitted during exams, but you can leave your answers as fractions for non-integer answers.) For this type of questions, if your calcualtion is incorrect, you get partial credit up to the point of your first mistake. You may get additional partial credt after that point, although there is no guarantee and may be unlikely.
The second type is multiple-choice questions. You should select the correct answer (or if you don't think any of the answers are correct, you should select the best answer). Please note that an incorrect statement can never be a correct answer (unless the question asks you to select statements that are incorrect).
The scoring of multiple-choice questions is as follows. Multiple-choice questions are worth 1 point each and you are given 5 selections for each such question. You are suppose to select only one answer. Since some students would select more than one answer, the rule for grading is as follows. If you select only one answer, if the answer is the same as the one in the solution key, you get 1 point; otherwise, you get 0 point. If you select two answers, if one of the answer is the same as the one in the solution key, you get 0.5 point; otherwise, you get 0 point. If you select more than two answers, you get 0 point.
The third type is to ask you to give the best answer for a given question. (If a question says, "In N words or less...", it's giving you a hint that the answer should be N words or less. You don't have to answer in N words or less. There is one exception though. If the question is of the fill-in-the-blanks type where N is small, then you must not use more than N words.)
For this type of question, you get credit for including the "best answer". You may get deductions for including "bad answers". What you need to demonstrate is that you can distinguish between answers of different quality and write down the best answer. (For these questions, there is no need to write complete English sentences when you answer exam questions. Just give me the important stuff!)
Let me give a couple of silly examples (with questions that's not in the scope of any exam).
In general, better answers may score more points. If you give very high level and generic answer that's generally true or basically just repeat the question, you probably will get very little partial credit for it! You need to answer a specific question with a specific answer. On the other hand, if the question called for a general answer and the answer you gave only applies to some specific examples, you probably will get very little partial credit for your answer. You must not give examples to answer general questions.
If I asked a question straight from lecture slides (or textbook), the best/correct answer is the one on the lecture slides (or textbook). If you disagree with what's on the slides (or textbook), you must complain when you are studying for the exam, i.e., before the exam. Once the exam starts, it's too late to complain that you don't like the answer on the lecture slides. In an exam, if you give an answer that's different from the lecture slides, you may receive partial credits, at the discretion the instructor. Finally, I reserve the right to ask about things that I think you should know but not on lecture slides or textbook.
The grading breakdown is as follows:
Two methods will be used to calculate your final letter grade:
Your class letter grade will be the higher grade based on (1) or (2).
Please also note the following:
All programming assignments must be turned in on time. Late submissions will receive severe penalties. Due to clock skews, electronic submissions of programming assignments will be accepted within 15 minutes after the specified deadlines without penalties. For a programming assignment, if you submit within the next 24 hours, you will receive 90% of your grade. Although right after midnight of the submission deadline, you will lose 1% every 5 minutes. When the penalty reaches the day limit, it flattens out. For example, if your submission has a timestamp that is 32 minutes after the grace period, 7% will be deducted from your assignment after grading; if your submission has a timestamp that is 1 day, 7 hours, 30 minutes, and 1 second after the grace period, you will receive a score of zero (and your assignment will not be graded). The figure below summarize the deductions for programming assignments.
If you are unable to complete a assignment due to illness or family emergency, please see the instructor as soon as possible to get an extension. A doctor's note is required as proof of illness or emergency. In general, when you get sick, it's best to see a doctor and get a note just in case you may need it later.
Recently, there has been a change in the policy at the Student Health Center regarding giving a "note from the doctor" for you to bring to a faculty member so that you can be execused from deadlines. Basically, they will not give you such a note any more. What they would give you is an Authorization for Disclosure of Medical Information form. With this form, you give them permissions to discuss your illness with me.
So, if you visit a doctor at the Student Health Center, please make sure you fill out one of these forms, check the "limited discussion with faculty" checkbox, get it stamped, signed, and dated by someone there (a clerk/receptionist would sign at the "witness" line), and bring it back to me. This would satisfy the "note from a doctor" requirement so that you can get an extension.
Alternatively, if you get a "Walkout Statement" from Student Health that has your name and the date of the visit, you can send a copy of that to me and that would also satisfy the "note from a doctor" requirement. If there is too much private information on the Walkout Statement, please feel free to black it out before you make a copy.
If you visit a doctor somewhere else, please either bring a "note from the doctor" or a similar authrozation letter so I can contact them.
All requests to change grading of labs or programming assginments must be submitted in writing within one week of the time the initial grade was announced to you. Requests must be specific and explain why you feel your answer deserves additional credit. A request to re-grade an assignment can result in the entire assignment being re-evaluated and as a result the score of any part of the assignment be increased or lowered as appropriate.
Each TA is required to use one standard when grading all the exams in his/her section. Therefore, regrade for exams is not about arguing for points but about whether the TA has made a mistake in grading or not. If you think the TA has made a mistake, you should write down (on the cover page of the exam) which problem/subproblem needs to be regraded and why you think the TA has made a mistake. Plese limit the description of your rationale to be only one sentence long (e.g., "my answer is also correct", "I deserve more partial credit", etc.). There is no need to discuss your answer or your rationale with the TA since the TA is required to grade entirely based on what you wrote on the exam paper (and thus must ignore everything you said during a regrade session).
My office hours are held four hours each week. Please feel free to come to chat with me to clarify lecture material and get hints about programming assignments. You do not need an appointment to see me during office hours.
Regarding lecture materials, please understand the purpose of office hours is to clarify lecture materials. I will not repeat lecture materials during office hours. If you miss a lecture, it's your responsibility to figure out how to make up for the missing lecture materials.
If you need to see me outside of office hours, it's best that you make an appointment (and reserve a timeslot) so I can make sure to be in my office when you visit. Making an appointment is not a big deal! Just send an e-mail to me and tell me when you are available to meet and go from there.
To encourage you to do your programming assignments early, you will get extra credit if you turn in programming assignment more than 2 days before the original submission deadline.
Please note that due to my fairness policy, I cannot offer any individual extra credit work.
Unless otherwise specified, programming assignments and exams must be that of the individual student (for group programming assignments, the work must be completely that of the group members). It is often productive to study with other students. However, if any portions of the programming assignments are found to be shared between two (or more) students, zero credit will be given to all students concerned and all students will be disciplined. This policy is in the interest of those students who do their own work, which hopefully applies to all of you in this class.
This policy also holds for programming assignments. In this class, we will use sophisticated automated program checkers to detect cheating. Be aware that the program checkers have demonstrated very good results and are widely used within the academic community. Any student caught cheating will be given zero credit and will be disciplined.
It is the students responsibility to submit their assignments electronically in time.
For students who satisfied the prerequisite at other universities or through work experience, this course assumes that you understand data structures, basic algorithms, and UNIX programming. You should be able to write large programs in C. No special assistance or consideration will be offered if your background is inadequate.
During the semester you are responsible for completing the assigned readings, programming assignments, and exams.
You must keep up with the assigned readings. If you come to class without having read the chapter for the corresponding lecture, you're unlikely to learn anything at all from the lecture. In particular:
The instructor must treat all students equally and cannot give special treatment to any particular student. Therefore, please do not ask special favors from the instructor because of your circumstances. This may seem unfair to you because you believe that your circumstances are special (understandably, everone does). Other than the exceptions setup at the beginning of the semester (whatever they may be), the rule the instructor must follow is that whatever he offers you, he must offer to the entire class.
Students who are registered with the Disability Services and Programs (DSP) must inform the instructor regarding the type of accommodations that have been approved by the university. Please send a copy of your Letter of Accommodation from DSP to the instructor by the end of the 3rd week of classes so that the instructor can make sure that the required accommodations will be satisfied.
Auditing "unofficially" is not permitted for this class.
E-mail is a serious communication tool. For this class, you should setup your e-mail server so that you do not drop any e-mail from me.
Pretty much all class related announcements will be sent through the class Piazza Forum. Therefore, you are required to be a member of this Piazza Forum. As messages are posted to the class Piazza Forum, you will receive e-mail notifications and you should read all these class-related e-mails. Please see instructions on how to get on this group (you should do this as soon as possible).
You are strongly encouraged to send private e-mail messages to me if you have questions about programming assignments or lectures. If the answer is appropriate for the entire class, I would normally anonymize the reply and send the reply through the class Piazza Forum and bcc a copy to you. So, please don't be shy about asking questions!
One type of question I often get over e-mail or see in a discussion forum is:
Here is my understanding of X. Am I right (or is this correct)? Correct me if I'm wrong...Although this type of question is perfectly fine during office hours, this is really not a good way to ask questions over e-mail. If no one corrects you, you must not conclude that you were correct! If you see "X" defined or described in lecture slides or in the textbook, you should try to understand why it was stated that way. A better question to ask over e-mail would be to ask about why it was stated that way.
Another type of question I often get is the following:
I am thinking about not following the spec or grading guidelines and would like to do this instead. Is it acceptable (or is this okay)?What you are really asking is whether you will receive full credit or not. Please just stick to the spec and the grading guidelines.
The diversity of the participants in this course is a valuable source of ideas, problem solving strategies, and engineering creativity. I encourage and support the efforts of all of our students to contribute freely and enthusiastically. We are members of an academic community where it is our shared responsibility to cultivate a climate where all students and individuals are valued and where both they and their ideas are treated with respect, regardless of their differences, visible or invisible.
(These resources below are provided for your information. Please note that the instructor has not read most of them. Please use these resources at your own risk!)