The assignment is done in groups of two students. After the assignment has been
accomplished, please demonstrate it to some of the assistants. After the assistant
has verified the functionality and the source codes of your implementation, you are
free to leave. Before leaving, please send your source codes with the group ID and
the list of the group members with contact information by email to:
The assistants are available until 18:00, but you can continue after that as well.
If you finish your assignment after 18:00, you can demonstrate the functionality
- Tussle in Cyberspace, ACM/IEEE Transactions on
Networking, June 2005 (available through either the ACM or IEEE digital
libraries from machines on campus).
- DNS-related RFCs.
- RFC2460: Internet Protocol,
Version 6 (IPv6) Specification.
- The recommended programing languages for all assignments are Java and C/C++.
You can also use Python if you like, but in that case you have to find some libraries
by yourself. The programming style
- The default programming environment for all assignments is Linux (through Wmware),
but you can also use your own laptop with your preferred OS if it supports IPv6 and
has a webcam.
Programming problem (DNS): Some of the protocols that we will be
discussing will use specialized DNS records. To allow you to become
more familiar with those newer uses of DNS, you are asked to program a
simple "stub resolver", and make your PingPong application work with it.
- Step 1: Build an application that allows to retrieve DNS records
from a commandline tool, specified as:
[yourprogram] [type] [domain] where
type is the resource record (RR) type and domain is the domain name to be
resolvedns CNAME www.google.com) . You only need to support A,
CNAME, SRV, and AAAA records. You can use the
www.cs.columbia.edu , and
ipv6.google.com for testing.
- Step 2: Extend the UDP/TCP client/server program from assignment 1 to support IPv6 and
DNS (only IPv4 DNS is required).
This means that you must be able to use the DNS name of the remote host in
the command line arguments of the pingpong program, in addition to plain
Use your experience from step 1 of this assignment. The
program should use the A record for resolving IPv4 address.
Test the DNS-enabled pingpong program by using the server
it0012.virtues.fi (port 5000) as the remote host.
Don't expect a response, though: the UDP packets from the server will not
reach your computer due to your non-public address.
- Capture the DNS exchange using packet sniffer, such as WireShark or
The dump must also include the (single, one-way) UDP packet that your
pingpong program sends to the correct IP address (the address that was
resolved using DNS).
- For Java, you can use libraries such as dnsjava
or the Java Naming and Directory Interface (JNDI).
- For C/C++, you can use
The ldns library supports all required resource record types of this exercise.
To install in Linux: "sudo apt-get install libldns-dev".
(If you're adventurous, you can fetch A and CNAME
records using adns
(GNU web site)
instead of ldns.
For enabling SRV, you may then want to use
RULI which is a
synchronous library supporting SRV, a modified version of
With adns, AAAA record queries are optional to implement.) If using Windows
environment, you can use .NET