ud436 »

TCP Fast Open


The goal of this assignment is to learn about a specific change to TCP that reduces transfer latency. In the past lesson you learned about persistent TCP connections which enable a web browser to reuse a connection for multiple data requests. However, many HTTP requests occur over new TCP connections for example because an image for a webpage is located on a separate content server or an ad is being loaded from a third party resource. This led researchers at Google to investigate reducing the setup costs for a TCP connection. They developed TCP Fast Open (TFO) which begins sending data during the TCP handshake thereby reducing the latency of a new connection by one RTT.

You will replicate the experiment from the original paper in Mininet to observe how TCP Fast Open improves round trip times for real websites. The test setup provided uses a modified Chrome binary to download web pages from Mininet hosts. The hosts act as web servers serving mirrored data from real websites. The tests run for different latencies with TCP Fast Open disabled and then enabled. TFO is a now merged in the Linux kernel so it is built into Ubuntu 13.04 which is installed on the virtual machine from assignment 1.


  1. Update to the latest assignment code:
    git commit -a -m "Saving work"
    git pull

  2. Install a VNC server, termcolor and an additional library:
    sudo apt-get update
    sudo apt-get install vnc4server
    sudo apt-get install libnss3-dev
    sudo pip install termcolor

  3. Read the original TCP Fast Open paper. You'll need to read this to answer the quiz questions. 
  4. Run the experiment to replicate the paper:
    sudo ./run.sh
  5. The experiment takes some time to complete. When its finished you should see results similar to the image below.
    Screen Shot 2014-03-01 at 3.50.48 PM.png
    You can also view graphs of the results in the output-figures folder.
  6. Now, using your own set of websites, run the experiment. To do this, you'll need to create a .pages file with a list website URLS each on a single line similar to the Paper.pages file. For simplicity, call the file myURLS.pages. Then run the fetch.py script to download the web pages, modify the run.sh script to use your new .pages file, and re-run the experiment:
    ./fetch.py --name myURLS
    --- Modify run.sh script on lines 21 and 29 (change --name argument to myURLS) ---
    sudo ./run.sh
    Note that the script has issues with Javascript heavy web pages and avoid using https sites as well. The Google and Udacity home pages work well as test sites. Also, if you shut down the virtual machine after step 4, be sure to restart VNC.
  7. Submit the log data from step 5, the data replicating the paper's results, and your answers to the quiz questions submission page.


This rubric is here to help you understand the expectations for the assignment. It is the same rubric that the person evaluating your project will use. We recommend you look at the rubric before you begin working on your project and again before you decide to submit it.

CriteriaDoes Not Meet ExpectationsMeets Expectations Exceeds Expectations
Experiment log data
Output looks reasonable.Log data does not pass the sanity check when it is submitted. Log data does not show improvement with TCP Fast Open.Log data passes sanity check and shows noticeable improvement with TCP Fast Open. There is no “Exceeds Expectations” option for this criteria.
Quiz responses
Quiz responses demonstrate understanding of experiment.Quiz responses are not submitted or show the student did not read the paper.Quiz responses show the student clearly understands how TCP Fast Open works and read the associated paper.There is no “Exceeds Expectations” option for this criteria.


[1] Based on a reproducing network research post.