CS 494/594: Internetworking Protocols
Term: Spring 2012
Credits: 4 [undergrad], 3 [grad]
CRN: 65498 [undergrad], 65499 [grad]
Meeting Time: Wed 18:40-21:10
Meeting Location: Ondine (OND) 218
Instructor: Bart Massey (bart AT cs DOT pdx DOT edu)
Office Hours: by email appointment
Office Location: FAB 120-18
Everything about this syllabus is entirely tentative, and maybe be changed at the whim of the instructor without warning.
The Course Catalog says:
Advanced study of the protocols and algorithms used in the Internet (IETF) family of networking protocols. Protocols investigated may include ARP, IP, UDP, TCP, multicasting protocols, routing protocols like RIP and OSPF, and application protocols like DNS, NFS, SNMP, FTP and HTTP. Issues such as addressing, name service, protocol design, and scalability will be explored.
We will learn the basics of how the Internet works. This includes some information about how applications use it, and some study of the underlying physical networks that transport it—especially Ethernet.
Goals, Topics and Objectives
According to the catalog, after this course the successful student will:
- Explain fundamental ideas associated with Ethernet and the PPP point-to-point protocols. For Ethernet, explain CSMA/CD and MAC addresses.
- Explain the fundamental concepts associated with modern Ethernet switches, including full-duplex and collision-free networks, VLANs, spanning-trees, and adaptive-learning.
- Explain how ARP works in IPv4 and explain how broadcast can be used for link reachability.
- Setup a host and network in terms of IP addressing.
- Explain how traceroute and ping work, as well as ICMP redirects, and other ICMP mechanisms.
- Work with IPv4 addresses in terms of subnetting, VLSM, and supernetting.
- Explain the basic ideas behind sliding window protocols in general, and the TCP protocol in particular.
- Compare and contrast TCP and UDP in terms of the applications that use them.
- Compare and constrast vector-distance and link-state routing algorithms.
- Explain the architecture of application-layer protocols including HTTP, FTP, SMTP, DNS, and TELNET.
- Describe how layer 3 and layer 7 firewalls operate.
- Explain network attacks based on ARP-spoofing, and IP address spoofing.
- Explain techniques involved in the Morris worm, and other network-based attacks.
- Program network-based applications using the socket mechanism.
This is a huge amount of material for 10 weeks, but we'll get through as much of it as we can. The three organizing principles of the course are:
- Vocabulary: A lot of learning a new field is learning the words used and what they mean. We will have weekly networking vocabulary drills.
- Mechanisms: There are concepts in networking that are repeatedly reused in protocol design and construction. We will develop a toolkit of such mechanisms.
- Design and Implementation: To understand networking, it is necessary to understand how our networks were designed and built. That understanding can be best achieved by designing and implementing your own network solutions.
Kevin Fall and W. Richard Stevens, "TCP/IP Illustrated, Volume 1 (Second Edition) The Protocols", Pearson 2012.
The Second Edition is required: the first edition is much older and not OK. The textbook can be purchased for $50 new on Amazon (or $70 at the PSU Bookstore), and is well worth the price.
This course is being run using the Moodle open-source web Learning Management System software. Details of schedule, and news and announcements will be posted there, assignments will be given out and collected there, etc. In addition, the course email list will be created from the information there.
It is thus very important that you register on this site at http://svcs.cs.pdx.edu/moodle right at the beginning of the quarter. Instructions will be given in class as to how to do this. Anyone who fails to register by the start of the second week of class will be dropped from the course.
This course requires weekly readings and regular homework. You must finish your homework by yourself unless I tell you otherwise. I do encourage group study on individual assignments: creating study groups or online chat-rooms to discuss the approach and understand the problem is just fine. The write-up, programming, and actual solutions must be done by you and you only. If you turn in someone else's work as your own, you are committing plagiarism.
You are learning how the Internet works. This is supposed to be fun. However, this is a time-consuming activity. Expect to spend 8-12 hours per week outside of class to keep up with the course and learn what you need to learn. You will need to spend that time sitting in front of a computer running UNIX or Linux. Ideally, you will have a laptop or desktop system of your own to use. If not, there are CS UNIX and Linux laboratories you can use.
Being in class is required. I will take roll. If you think you might miss more than one of the ten meetings of this course, I would encourage you to avoid this class for now.
Every class session, please bring the following with you:
- The course textbook.
- Something to write with.
- Something to write on.
- A laptop running UNIX, Linux or MacOS if you have one.
Test and Testing Policy
There will be an in-class final examination. There may be a midterm examination. There may be in-class quizzes, announced or unannounced.
I will assign take-home homework on a regular basis, both as a study guide and as a part of your grade. Late homeworks will not be accepted: this class is too large to deal with them. Take-home assignments will be collected using the course website.
Assignments will be graded for correctness and for code quality. We will go through some of the problems during the class, as a part of the learning experience.
Cheating on homework or exams will get you a grade of zero on the affected material, and will be reported to our Department and PSU. Plagiarism is a form of cheating. Please do not let me catch you plagiarizing.
Plagiarism: n 1: a piece of writing/work that has been copied from someone else and is presented as being your own work 2: the act of plagiarizing; taking someone's words or ideas as if they were your own.
If you use some else's code, ideas, or text, cite them. It is OK to get outside help, but you must give proper credit for this help.
(Thanks to Martin Cenek for the original version of these tips.)
Study at least an hour every day. You cannot learn the material in a day.
Get comfortable with C as quickly as possible.
Do lots of problems, and then some.
Do additional problems - ones that were not assigned.
Make study groups.
Make up your own problems and try to solve them.
Start early on the assignments.
Review the topics frequently—not just the increments, review entire topics.
Read the assigned chapters before each lecture.
Don't expect immediate success. Anything worthwhile takes time and effort