                         Computer Science 826
                             Assignment 2

As indicated in class your mission is to build a UDP application
that will adaptively adjust its rate of transmission to available
bandwidth in such a way as to achieve maximum transmission rate
with negligible drop rate.

As before you may work in 2 person teams but TEAMS ARE NOT TO
COLLABORATE ON ANY ASPECT OF THIS PROJECT!!!!

Phase - I (Turn in by 8 Oct)

You will find the server code (which consumes UDP packets of a
specific format) in the 826/source subdirectory . Its name is
udpserv.c and it requires udpcs.h. Read the source code
thoroughly, build the program, and then build a simple client
program which will interroperate with it correctly when both the
client and the server are running on the same machine.
IMPORTANT: You will NOT BE PERMITTED TO SUBMIT YOUR OWN SERVER.
Your client MUST interoperate with the "standard" server. If you
do find bugs in the standard server, let me know and I will
endeavor to fix them.

Your mission is to build a client program that can adaptively
adjust the rate at which it sends packets in response to changes
in available bandwidth. Dropped packets provide an indicator of
sending too fast for available bandwidth. There is, however, no
indicator, or failure to use available bandwidth. Thus your
program should employ some sort of strategy that causes it to
slow down in the presence of drops and attempt to speed up in
the absence of drops. Care should be taken to ensure that your
adaptive procedure is relatively stable in response to constant
bandwidth.

Recommended approach:

  1 - Send packets in bursts and vary the burst size
  2 - Have separate sender and receiver threads
  3 - Use a dynamic timeout mechanism for recovering from lost
      STAT reports.

Phase II (Due 19 Oct)

Write a brief research report of at least 2 pages but no more
than 6 describing your algorithms and characterizing drop rate
and throughput that you obtain using packet sizes of
and packet sizes of 1250 bytes over dedicated point-to-point
channels of 100-100 Mbps and  100-10 Mbps with varying
numbers of client programs.  Drop rates should be < 10%
with throughput of at least 90% of nominal available
bandwidth. Run comparable tests with TCP and compare
the performance of your protocol with TCP's.

Writeups MUST be in Latex. An example is in subdirectory
writeup.

