Instructor: Ashok K. Agrawala
Class meets: 9:30 AM to 10:45 AM. Tuesdays and Thursdays, CSI
Office Hours: To be Announced
Class web site: http://www.cs.umd.edu/class/fall2018/cmsc417-0201
Teaching Assistant: Andrew Pachulski
This course will cover the basic principles of networking with a focus on protocols, implementations, and issues specific to the Internet. We will study how routing, transport, and internetworking protocols work using the Internet family of protocols as examples. We will selectively implement new protocols and network services; as such, this course will have rather a substantial group programming component.
The pre-requisites for this course are CMSC 351, and CMSC 330: junior level courses in algorithms and programming languages. I expect you to (a) already understand the basics of computer architecture and operating system and (b) have experience in implementing nontrivial systems-type projects. You should already know what a processor is, how memory is organized, and be able to articulate the difference between a kernel versus a user process. You should also be familiar with basic probability and analysis of algorithms.
You must also be able to read news using a NNTP-capable reader, read UNIX manual pages, and be familiar with a postscript viewer. You must be able to work in a group. I cannot emphasize this point enough — I will allow you to (at least partially) form your own groups, and you may choose anyone in this section who you think you can work with. Use the newsgroup as a matching service if you like. However, you will not have the option of not working in a group, and I will not be sympathetic to any complaints at the end of the semester about how your group-mates did not do any work.
To do the programming assignments well, you should be able to design, implement and test non-trivial programs in C. A fixed non-empty set of assignments must be coded in C (or C++); you may select your language of choice for the term project. As most of us write code that has many bugs, you should be comfortable with at least one debugger. Experience with multi-threaded code may be helpful for implementing the project, but is not required. Please note that you are completely responsible for these
pre-requisites and they will not be covered in class or by the TA.
This is a senior-level course, I expect you to be motivated, eager to learn, willing to work hard and make up, on your own, any deficiencies you have.
After attending the course, I expect you to be able to:
• Understand the fundamentals of networking protocols, including protocol layering, basic
Medium access including wireless protocols, routing, addressing, congestion control
• Understand the principles behind the Internet protocols and some application layer
Protocols such as http, ftp, and DNS, and a few peer-to-peer systems/protocols such
As Gnutella and Chord.
• Understand some of the limitations of the current Internet and its service model
• Understand the causes behind network congestion, and explain the basic methods for
• Design, implement, and test substantial parts of network protocols
The required textbook for this course is:
• Computer Networks5th Edition, Tanenbaum and Wetherall, PrenticeHall 2011. ISBN 0-13-212695-8
Unless you are already intimately familiar with network programming, please get the supplementary text. It is quite possibly the best(-written) small book in systems programming.
• TCP/IP Sockets in C: A Practical Guide forProgrammers2nd Edition by Jeff Donahoo and Ken Calvert, Morgan Kaufmann, 2009. ISBN 978-0123745408
I also recommend the following books for reference:
• Computer Networking, 5e: A Top Down Approach Featuring the Internet by Jim Kurose and Keith Ross, Addison-Wesley, (ISBN:0-13-607967). The on-line version of this book is at http://www.awlonline.com/kurose-ross.
• Computer Networks: A Systems Approach by Larry Peterson and Bruce Davie, Morgan Kaufman, 4rdEdition, 2007. ISBN 978-0123705488
• An Engineering Approach to Computer Networking, by S.Keshav. Addison-Wesley,1997. ISBN 0-201-63442-2
• Computer Networking with Internet Protocols by William Stallings, Prentice-Hall, 2004. ISBN 10:0131410989
• TCP/IP Illustrated volume 1 by W. Richard Stevens. Addison-Wesley. ISBN: 0-201- 63346-9.
You may also be asked to look at classic RFCs and current Internet-Drafts. These are available from http://www.rfc-editor.org andhttp://www.ietf.org respectively.
The grading allocation is given below and is subject to change.
In-term exams 25%
Programming Assignments 35%
Class Participation 15% including pop quizzes
You are responsible for all material covered and assigned in class. The class participation points are to motivate you to speak up in class and to post to the newsgroup.
Re-grade policy. All requests to change grading of homework, programming projects, or exams must be submitted in writing (typed) within one week of when the assignment was made available for pickup. 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 may be increased or lowered as appropriate.
Recently the University approved a policy for class absence for students. All students are expected to attend ALL classes.
Any student who needs to be excused for an absence from a single lecture, recitation, or lab due to a medically necessitated absence shall:
a) Make a reasonable attempt to inform the instructor of his/her illness prior to the class.
b) Upon returning to the class, present their instructor with a self-signed note attesting to the date of their illness. Each note must contain an acknowledgment by the student that the information provided is true and correct. Providing false information to University officials is prohibited under Part 9(h) of the Code of Student Conduct (V-1.00(B) University of Maryland Code of Student Conduct) and may result in disciplinary action.
c) This self-documentation may not be used for the Major Scheduled Grading Events as defined below and it may only be used for only 1 class meeting during the semester.
Any student who needs to be excused for a prolonged absence (2 or more consecutive class meetings) or for a Major Scheduled Grading Event, the student must provide written documentation of the illness from the Health Center or from an outside health care provider. This documentation must verify dates of treatment and indicate the timeframe that the student was unable to meet academic responsibilities. No diagnostic information shall be given. The Major Scheduled Grading Events for this course include: Two midterms, a final and some pop quizzes.
Individual Presentation Time scheduled during the last week of class
• Turn assignments in on time. Unless previously negotiated, you will receive no credit for work that is not turned in on the day and time it is due. The only exception is for excused absences as defined by the university (Section V-1.00(G) of the Consolidated USMH&UMCP Policies and Procedures Manual).
• Do not miss exams. Unless previously negotiated, you will receive zero credit for missed exams. Once again, the only exception is for excused absences as defined by the university.
• The punt box rule: on any problem you turn in (homework or exam), if you clearly mark a rectangular box with an “X”, we will not grade the problem and you will receive 10ththe points for that problem. All punt points are added, and rounded up. This is to stop you from guessing and making our life more difficult while grading.
• Please read and understand the UMCP code on academic integrity (Section III- 1.00(A) of the Consolidated USMH&UMCP Policies and Procedures Manual:
Do not violate it. It is not worth your time (or mine) to be here if you do.
In general, I do not mind your working together on projects. In fact, I encourage it. (Do not work together on in-class exams. If you have trouble with homework questions, post to the newsgroup and ask for hints.) Unless otherwise instructed, home works/programs you turn in must be your own, i.e. written completely by you.
An example for clarification: Suppose Alice and Bob are working on a programming project/homework. It is fine for Alice and Bob to discuss their proposed solutions, work on a white board together, and even ask questions on the newsgroup. Once they figure something out, they can also answer specific questions on the newsgroup. However, they should not post complete solutions (or code snippets), unless specified by the instructor or the TAs.
After discussing their solutions, Alice and Bob go off and write up their work/code up their project. This level of cooperation is allowed and encouraged. However, if Alice or Bob had simply copied code or text from each other, their effort would be deemed dishonest. They should not use “old versions” of the other’s code, or steal throwaway code from a temporary directory or a dustbin, or “look at the other’s screens” while typing in their solution. When you are writing/coding something you will turn in, you should be working by yourself. Even mundane pieces of code that you turn in, and was not provided to you by us, should be written entirely by you. When all is said and done, you are the final authority on whether you did something wrong or not, and I’m certain you will know as well as any professor when you do something wrong. Please try not to put yourself in those situations where you have to ask yourself whether something you’re about to do is correct or not. If there is any debate about the authenticity of your work, I will have no recourse but to recommend a hearing before the honor board. I sincerely hope this is the last I have to say on this subject for this semester.