CS475: Computer Networks - Introduction to the RFC (100 Points)

Assignment Goals

The goals of this assignment are:
  1. To explain the basic components of an RFC

The Assignment

The RFC

Review the following standard Request for Comments (RFC) documents, which describe the message formats and workflow of protocols.

Describe, in your own words, what an RFC is. What are the major components common to each RFC, and what do you notice about their structure? How do RFC documents differentiate between what an implementing program must do, and what a program can optionally do? If an implementing program handles a protocol concept in an optional but non-standard way, what are the risks?

This spoof RFC 2324 describes an HTTP-like protocol for controlling a cofee pot, and is a great place to start when reading about the types of standards proposed by an RFC.

Designing a Protocol

Imagine that the course registration process did not involve using a computer to sign up for classes using a web-page. Instead, you called the Registrar on the telephone, and let them know which classes you wished to take. In turn, the Registrar would inform you if you are able to take those classes, and, if so, would register you for those classes and confirm your schedule.

The Registrar wishes to do this as efficiently as possible, and so students would ask standardized questions (in other words, every student conversation should be exactly the same).

  1. What questions and answers might you ask of the Registrar to learn about course availability and to register for classes?
  2. What errors might you anticipate (as an example, a class might be full), and what messages should be sent back and forth to note the different types of errors?
  3. Diagram a flow chart that allows a student to register for a course, learn whether their registration was successful, and continue registering for courses, one-by-one, until the registration process is complete. Each arrow connecting the states in your flow chart should represent a message sent or received. Each message should have an opcode (a unique number), followed by more information in whatever format you choose (more numeric codes, text, or a combination of the two). Write down the format you chose for your messages!

Submission

In your submission, please include answers to any questions asked on the assignment page in your README file. If you wrote code as part of this assignment, please describe your design, approach, and implementation in your README file as well. Finally, include answers to the following questions:
  • Describe what you did, how you did it, what challenges you encountered, and how you solved them.
  • Please answer any questions found throughout the narrative of this assignment.
  • If collaboration with a buddy was permitted, did you work with a buddy on this assignment? If so, who? If not, do you certify that this submission represents your own original work?
  • Please identify any and all portions of your submission that were not originally written by you (for example, code originally written by your buddy, or anything taken or adapted from a non-classroom resource). It is always OK to use your textbook and instructor notes; however, you are certifying that any portions not designated as coming from an outside person or source are your own original work.
  • Approximately how many hours it took you to finish this assignment (I will not judge you for this at all...I am simply using it to gauge if the assignments are too easy or hard)?
  • Your overall impression of the assignment. Did you love it, hate it, or were you neutral? One word answers are fine, but if you have any suggestions for the future let me know.
  • Using the grading specifications on this page, discuss briefly the grade you would give yourself and why. Discuss each item in the grading specification.
  • Any other concerns that you have. For instance, if you have a bug that you were unable to solve but you made progress, write that here. The more you articulate the problem the more partial credit you will receive (it is fine to leave this blank).

Please refer to the Style Guide for code quality examples and guidelines.