LMU ☀️ CMSI 355
COMPUTER NETWORKS
HOMEWORK #1 Due: 2019-02-28

Readings

Please skim (or read):

Please read:

Instructions

All of your work for this class is to be kept in a private GitHub repository called lmu-cmsi-355 or something similar. Structure your repository as follows:

  .
  ├── README.md
  ├── .gitignore
  └── homework1/
      ├── short-answer-problems.md
      └── python/
          ├── random_number_server.py
          ├── random_number_client.py
          ├── echo_server.py
          ├── echo_client.py
          └── chat_server.py

I encourage you to work in pairs. Please submit only one solution set for your team. It does not matter under whose GitHub account your work is stored. Since the repo is to be private, please add me as a contributor to your repo (so I can run and comment on your work). My github name is rtoal.

Submit your work as a GitHub Pull Request. Make sure the PR is produced by 23:59 in the America/Los Angeles time zone on the due date. (You can produce the PR by doing all your work on a branch, then clicking the New Pull Request button in GitHub.) I will grade by commenting on your PR.

Project Setup

Here are instructions for creating your project. I assume you are already signed up with GitHub, already know how to create private repositories and clone them, and know the basics of git.

  1. Create your repo at GitHub, Check the private radio button and MAKE SURE TO CHECK “Initialize with a README.”
  2. Add me as a contributor.
  3. Clone your repo. Add some content to the README. Create the .gitignore file. Since you will be doing Python programming, add __pycache__ and *.pyc (at least) to the file. Create the homework1 folder.
  4. Continue by answering the problems and writing the assigned scripts below. Work on a branch and make a PR before submitting.

Make sure you use an IDE with a built-in linter (PyCharm is nice) or use VSCode or Atom with the proper plugins and linters. You are too experienced to be turning in un-linted code.

Short Answer Problems

Write the answers to the following in nice markdown format and submit in short-answer-problems.md

  1. What was the name of the famous 1974 paper by Cerf and Kahn and why was it so influential?
  2. Contrast packet switching and circuit switching in a couple sentences.
  3. Who publishes the RFCs?
  4. What command do you use to show your host’s routing table?
  5. What does the transport layer take care of? What does it not need to know?
  6. What was the first message sent on the ARPANET? The second?
  7. Contrast TCP and UDP in a couple sentences.
  8. What is the smallest possible IP packet size?
  9. What is the largest possible IP packet size that has zero data bytes?
  10. Why don’t Node.js servers need threads?

Python Scripts

Submit answers to the following, in your python folder. YOU ARE REQUIRED TO USE PYTHON 3.6 OR LATER.

  1. A simple random number server and client, running on port 53211. As soon as a client connects, the server sends back a random integer, and that’s it. (Submit in random_number_server.py and random_number_client.py.)
  2. A simple echo server, running on port 43210. Keep the connection open until the client closes it. The client keeps on sending in data and the server keeps echoing it back. (Submit in echo_server.py and echo_client.py.)
  3. Port the ChatServer that I previously wrote in Java to Python. (Submit in chat_server.py.)