Project 2: 22C:178 & 055:134
Computer Communications Fall 1998
Project 3 [due 13 November]
This project, put simply, is to see how fast 200MB of
data can be transmitted using UDP. You will write a
programs using the UDP methods of previous homeworks to
send (and receive) the 200MB and report on the timings
you observe. Before you begin coding your programs,
here are some things to consider.
Rather than first create a 200MB file, it is easier
for the sending program to simply generate the data
that it sends -- that way the sending program doesn't
wait on any file I/O. Similarly, there is no reason
for the receiving program to save the data it receives,
since that would also entail waiting on file I/O.
You will need to devise some way to distinguish or number
your datagrams so that the receiver can detect when a datagram
has been lost by Unix or the network layer.
Your program will be incorrect if it doesn't account
for missing datagrams. A good program for this project
will count the number of times that datagrams were lost
(this can happen without warning using UDP). You could,
for instance, use ACK or NAK strategies to resend missing
data, or simply have the sender try and send 300MB of
data and arrange for the receiver to stop when it gets
200MB. (Note: the second method wouldn't really
be a realistic way to transmit data for most practical
There is no need to use CRC error detection in your program,
since the LANs are quite reliable for these small projects.
Important! Do not test your program over a network
in use by other users! The problem is not so much that your
program's timing will be upset by competition with other users,
but that your program will be a ``bandwidth hog'' while it
is running and severely degrade service for all the other
users. Our system administrators can detect this kind of
problem and they solve it by killing your processes and turning
off your account! To test your program, the recommended
Also, of course, it will be easier for the project grader
to evaluate your work if you have run your program on the
same equipment as others have done.
- Rather than testing with 200MB, start with 16KB or 1MB as
an initial test, until you have some confidence that your program
- Test first within a single machine using the loopback
interface: use localhost or 127.0.0.1 to
communicate between sender and receiver.
- When the program is working, you can test it in the
laboratory -- it is an isolated network where no other
users are harmed by your experiments.
You are free to try any methods you can think of. Multiple
ports, different datagram sizes, ACKs, NAKs, rate flow control,
What to Turn In
Submit a report that describes your program and the methods
it uses (justifying why they correctly time a 200MB tranmission),
and also describes the results of your experiments.
We hope to see not just a final program and its results,
but some indication of what you tried. For instance, you
may try one kind of program and later think of an improvement.
Your report should show the history of your results and how
different techniques improved the results. Please summarize
your history of experiments and results to no more than
two pages (you may also attach your program to the results -
that doesn't count in the two page limit).
You may either produce a printed report for this project
(which would allow you to a graph of experimental results)
or email your report in the usual way (with project number and
the last four digits of your student ID).
This project counts 200 points maximum. Your
score will depend on how thoroughly you explain the
results, the creativity of your programming, and the
thoroughness of your experiments. Good luck, and may
the best student program achieve the highest throughput!