The goal of MulTFRC is to provide weighted congestion control. The idea is to emulate multiple TFRC streams by replacing the equation in TFRC with a new equation which yields the throughput of multiple TCP flows.

MulTFRC was developed by Dragana Damjanovic for her Ph.D. thesis, carried out in the context of the EC-GIN European project.


The equation

The mechanism





We implemented MulTFRC using ns-2 version 2.31. The code can be found here. It extends the TFRC protocol with an additional parameter n.

The value of n (the MulTFRC aggression) can be changed by setting the parameter n_mulTFRC_.

As an example:

Agent/TFRC set n_mulTFRC_ 3

is setting the value of n to 3.

Setting the value of n_mulTFRC_ to 1 yields a behavior that is similar to the standard TFRC protocol.

Simulation script used for validating the behavior of MulTFRC (from Dragana's thesis) can be found here.

Real-life implementation

The first MulTFRC implementation is based on the TFRC implementation from This is still work in progress.
There are two versions of the implementation:

MulTFRC without reliability: in this is extension of the original TFRC code from, the equation used for the calculation of the rate was changed. An additional parameter -m for the MulTFRC aggression is added. Setting this parameter to 1 yields a behavior that is similar to the standard TFRC protocol.

The code can be found here.

How to use it:

Optional parameters are almost the same as in the original implementation. The only difference is an additional parameter on the receiver side for MulTFRC aggression:

-m - aggression of the MulTFRC protocol

MulTFRC with reliability: reliability was added to mulTFRC, and a simple tool for transferring files was implemented.

The code can be found here.

How to use it:

Optional parameter:

-m - aggression of the MulTFRC protocol

Setting this parameter to yields a behavior that is similar to the standard TFRC protocol. This parameter can be set on the sender side or on the receiver side (if it is set on both sides the value set on the sender side overwrites the value set on the receiver side).

Florian Schatz implemented the reliable version of MulTFRC as his master thesis under Dragana's supervision. Implementations using "go-back-n" and "selective repeat" were developed. They are documented in his master thesis (thesis). His implementation can be found here.


The second MulTFRC implementation is a patch to the DCCP implementation in the Linux kernel, written by Adrian Jørgensen for his master thesis. It contains an experimental version of the equation that works without floating point operations. This tar file contains all files that were modified and a small README with all necessary steps/commands in order to get the kernel compiled for Debian 6 "Squeeze" with kernel version 2.6.32.
For testing, this version of iperf can be used to emulate traffic for DCCP. To install it, do: ./configure; make; make install


Equation programs in java

Here are two very short and simple Java programs that can be used to test various input / output values in a GUI, and obtain reference values for validating an implementation.,


Last update: 19. August 2014
Back to Michael's page