Receiver-Controlled Co-operative Resource Sharing

Shahzad Ali and Urs Hengartner

 

When using a bottleneck link to the Internet, it is noticed that reactive flow control mechanisms such as those provided by TCP ensure that multiple flows get comparable bacdwidths.  This is by definition, fair and TCP tried to achieve this behaviour.  However, there are many examples where you would want different flows to get different bacndwidths.  For example, a HTTP and a FTP flow contending for bandwidth, will be generally better off, if the HTTP flow gets more bandwidth.  Similarly, this scheme can be applied to the case where two flows originating from two different desktops from within an organization should different bandwidths depending on some policy.  Both these scenarios are clearly shown in the figure below.

The idea is to let receivers decide the sharing between different flows, at least at the access link the receiver has.  The motivation is the observation that access links for receivers are usually a bottle neck.  For example, a PC user connected to the Internet through a modem, is limited by the bandwidth on the access link and thus is happy to decide which flows are important for it.  On the other hand, a small LAN connected through an access router to the Internet is also limited by the access bandwidth.  The division of bandwidth between receivers can be decided based on some resource tree that is hierarchichaly built.

There are many schemes that can achieve this result.  We look at the two: Delaying the ACKs flowing back to the sender, and Modifying the receiver window.  We implemented the second scheme and compared it to an already available implementation of the first scheme.  Our scheme is based on a token distribution mechanism, whereby a flow only gets tokens based on its assigned bandwidth.

This project was part of the course requirement for 15-744 , Computer Networks. Here is the necessary documentation and the code that we implemented.  The changes were made to a FreeBSD 2.2.7 kernel.  We also had a user level program to configure the various shares for flows and other parameters of the system.

Kernel Code
User level front end
Presentation (slides)
Report

For the evaluation phase of the project, we used a number of tools to analyze the throughput ot the TCP connections.  Results are shown in the presentation and the report.



Shahzad Ali <cheeko@cs.cmu.edu>