CS 725/825 Computer Networks, IT 725 Network Technology

Assignment 5

Due: Wednesday, December 5, 2018, 2:10 pm (start of the class)


  1. (30 points) Consider the network in the figure below consisting of routers (R1 - R5) and L2 subnets. Router interfaces are labeled with uppercase letters, thick lines labeled with a prefix denote the L2 networks. Assume that all links have an equal weight/cost.
    1. Assume that the network uses static routing and fill the routing tables of each route so that every subnet as well as the default gateway are reachable from any place on the network. Do it with the smallest number of entries in the routing tables. For simplicity, assume that a routing table entry consists of a prefix and the local interface on which the packet needs to leave the router (e.g., in R1 you will have entry -> B, meaning any packet routed by R1 and destined to subnet will be sent out on R1's interface B).
    2. Assume that router R5 is down. The network runs a distance vector routing protocol and that has converged (all routers have correct routes for the reachable subnets). R5 is then brought up. Show the steps by which R5 populates its routing tables and steps by which other routers learn about R5 and the L2 network connected to it.
  2. (10 points) Consider the trace https://www.cloudshark.org/captures/2f4535ecfabd that captures an HTTPS session and answer the questions below. The trace captures encrypted traffic, so normally you would not be able to see the application layer payload. As the trace was taken, the browser (Chrome) was instructed (by starting it with --ssl-key-log-file=sslkeylogfile.txt option) to save the SSL/TLS key for the session. The key was then uploaded to CloudShark to enable decryption. If you are curious how the same trace looks without an encryption key, see https://www.cloudshark.org/captures/b45f665444e2.
    1. What version of HTTP is used during the session?
    2. What request does the HTTP client make?
    3. What is the server response?
    4. Is there a followup HTTP request? If yes, what is it for?
    5. How may round trips does it take to establish a TLS session, i.e., to get to the point when the client can start with HTTP? Pay attention to what is a trigger for what, this is a bit more complicated than counting packet pairs till you get to the one that contains the first HTTP command.
    6. What is the street address in the certificate presented by the server?
    7. Does Chrome divulge any server secrets by allowing the session keys to be saved?
    8. Extra credit (5 points): After the secure connection established, the client starts communicating using HTTP/2. How does it know that the server is capable of handling HTTP/2?

Programming assignment:

  1. (60 points) The goal of this assignment is to study the latency overhead introduced by various protocols. The assignment focusses on a simple request/response transaction implemented using various of protocols. The question that you are investigating in this assignment is: Given a network with round trip time RTT and a protocol, what is the expected time complete a simple request/response transaction? The answer should be in the form of a simple formula that expresses the expected transaction latency in terms of the network RTT. You may assume that RTT is much larger than any other delay in the system, for example, a packet transmission on a gigabit network takes a few microseconds, network latencies are typically measured in milliseconds.
  2. This question can be answered by analyzing the protocols in question, however, in this assignment you are expected to study it experimentally. You will implement a system consisting of a client making a simple request to a server, the server responds with some arbitrary data, the client receives it, and measures, as precisely as possible, the time the entire transaction took, i.e., including the time it took to establish the connection, if applicable.

    Experiment with five protocols: raw data over UDP, raw data over TCP, raw data over TCP with TLS, HTTP, and HTTPS. Both request and response should be no more than few tens of bytes in length, not including the protocol overhead. For all experiments, you need to write both client and server side, for the HTTP/HTTPS experiments, you are expected to write a server. node.js is the easiest way to go. It is fine to use libraries for TLS/HTTP/HTTPS on the client side. TLS and HTTPS experiments requires that you generate your own self-signed (not backed by a recognized CA) certificate. Most HTTPS client libraries will require extra steps to confirm that it is fine to accept a self-signed certificate. Ignore Internet posts that state that accepting self-signed certificates is in your program is a bad idea. They are correct with respect to production code, however, here we are dealing with experiments in a fairly closed environment.

    To facilitate your experiments, two Linux servers are set up on the CS network: rb1.cs.unh.edu and rb2.cs.unh.edu. Besides connectivity to the department network, the servers are connected via five links that carry no other traffic than the one produced by the experiments. Each of the links is configured so that traffic experiences diffrent link delays. The extra delays added to the inherent delay of a directly connected link are set as follows:

    Interface Round-trip delay (ms)
    enp4s0 0
    enp5s0f0 3
    enp5s0f1 10
    enp5s0f2 30

    The links are configured with private IP addresses, make sure that you send your test traffic over them and not over the public interfaces rb1.cs.unh.edu and rb2.cs.unh.edu. Standard development tools are installed there. Accounts are being set up for all students in the course with the same username as you have on Agate but with a different password. Your username and password has been stored in your home directory on Agate in file cs725.info. The servers do not mount your Agate filesystem. The best way to keep your code in sync between your development environment and both machines is to use git and create multiple clones of your repository.

    IPv4 and IPv6 address assignment on rb1/rb2

    How exactly you set up the experiments is up to you. You do not have to run the experiment on all links but the choices that you make should not be arbitrary. Your submission should include a brief justification of the experiment design decisions. Each of the experiments must be repeated sufficient number of times so that the collected results are statistically significant.

    You (and I) will not be able to install software beyond what a regular user can do. Check early if a library/module/tool that you plan to use is actually there. I can ask for anything reasonable to be installed there but it will take at least till the next business day.

    The source code for the programming part of the assignment must be committed to your course Git repostory. Don't forget to include a brief description of your code.

    Submission instructions:

    Upload your submission as a single PDF file using Canvas (mycourses.unh.edu). More details can be found in the standard assignment submission instructions.