CS199-6 Assignment 1

Due: January 28, 2002

Overview

In this assignment, students will form teams of 2-3 and implement a simple PlanetLab service that provides a parallel traceroute capability. The primary goals of this exercise are mainly to give you a feel for what it's like to built a wide-area application, what it's like to deploy it, and to learn something about the structure of the Internet at the same time. Given an arbitrary target machine T and a set of servers S1, S2, ..., Sn running on a set of PlanetLab nodes, your service will produce the set of routes from each server Si to the target T using traceroute. You will produce both the servers that run on the nodes and a client that anyone can use to access your service.

The output from your client should have the following format:

     <S1>: <IP 1> <IP 2> ... <T>
     <S2>: <IP 1> <IP 2> ... <T>
     ....                                
     <Sn>: <IP 1> <IP 2> ... <T>
For extra credit (and fun), teams may also wish to implement various enhancements to their service. For example, one possibility is to take the set of routes produced by your traceroute client program and produce the routing tree with root T and leaves S1, S2, ..., Sn that shows the paths traversed in getting to T either textually or graphically. Another possibility is to enhance your service's performance to increase its throughput (e.g., by multithreading each server so multiple requests can be handled in parallel). Yet another possibility is to add mechanisms in your service to make it robust to failures. For example, what happens if one of your traceroute server processes crash?

Implementing your service

To implement and deploy your service, each team will be a given a slice consisting of eight PlanetLab nodes. Access to nodes in a slice is done using SSH with RSA authentication. Each team should submit one or more SSH public keys that will be used to access your slice and send them to bnc@intel-research.net. Once your slice has been created and your SSH public keys distributed, you will then have SSH access to the following machines (text file with hostnames):

  • planetlab-1.cs.princeton.edu
  • planetlab1.cs.ubc.ca
  • planetlab1.cs.unibo.it
  • planetlab1.diku.dk
  • planetlab1.it.uts.edu.au
  • planetlab1.lcs.mit.edu
  • planetlab-1.stanford.edu
  • planetlab1.xeno.cl.cam.ac.uk
To create a new SSH key pair, use the ssh-keygen program as shown below.

      % ssh-keygen -t rsa -f planetlab
      Generating public/private rsa key pair.
      Enter passphrase (empty for no passphrase): 
      Enter same passphrase again: 
      Your identification has been saved in planetlab.
      Your public key has been saved in planetlab.pub.
      The key fingerprint is:
      6d:03:c8:39:06:5a:1d:51:fb:9d:c9:35:8b:64:45:df bnc@berkeley-desk21
      % ls -l planetlab planetlab.pub 
      -rw-------    1 bnc      dusers        951 Jan 22 16:29 planetlab
      -rw-r--r--    1 bnc      dusers        229 Jan 22 16:29 planetlab.pub

Once you've created your key pair, send us your public key (i.e., planetlab.pub) via email. Once your key has been distributed to your slice, you will then be able to get a shell in a sandboxed environment on any of the nodes in your slice using SSH, as shown below (e.g., suppose your team's slice name is alpha).

     % ssh planetlab-1.cs.princeton.edu -l alpha -i planetlab

For traceroute, you should use the traceroute binary found in the following Linux RPM package (download plkmodutil-1.0.2-planetlab.i386.rpm) when implementing your service:

The reason a special version of traceroute is needed is due to the way the PlanetLab kernel handles raw socket access. To install the RPM above on a node, simply become root and do the following:
     % su
     % rpm -ivh plkmodutil-1.0.2-planetlab.i386.rpm

What to turn in

Each team should email us a URL to a web page that includes the following:

  • A brief description of your service's design/implementation
  • Your traceroute server program (traceroutesvr)
  • Your traceroute client program (tracerouteclnt)
  • Any additional instructions on how to run your service

To test the base functionality of your service, we will start by running your traceroutesvr program on a set of PlanetLab nodes. We will then run your tracerouteclnt program against a set of target IP addresses, examine the output, and verify your service's correctness. (We will run this on a standard Linux machine running Redhat 7.3.) Assuming that goes well, other aspects of your service that we will look at include its performance (e.g., its throughput) and how robust your service is to failures (e.g., suppose some set of your traceroute servers have crashed). The results here will be especially interesting if your service implements any extra credit performance and/or robustness optimizations.


Last Updated: Wed Jan 22 20:07:25 PST 2003