End-to-end Congestion Control for TCP-Friendly Flows with Variable Packet Size
Current TCP-friendly congestion control mechanisms adjust the packet
rate in order to adapt to network conditions and obtain a throughput
not exceeding that of a TCP connection operating under the same
conditions. In an environment where the bottleneck resource is packet
processing, this is the correct behavior. However, if the bottleneck
resource is bandwidth, and flows may use packets of different sizes,
resource sharing depends on packet size and is no longer fair. Now for
some applications, such as Internet telephony, it is more natural to
adjust the packet size, while keeping the packet rate as constant as
possible. In this paper we study the impact of variations in packet
size on equation-based congestion control and propose methods to
remove the resulting throughput bias. We investigate in detail the
design space of the approaches and propose a number of possible
designs. We evaluate these designs through simulation and conclude
with some concrete proposals. Our findings can be used to design a
TCP-friendly congestion control mechanism for applications that adjust
packet size rather than rate, or that are forced to use a small packet
size.
End-to-end Congestion Control for TCP-Friendly Flows with Variable Packet Size
(PDF).
Jörg Widmer, Catherine Boutremans, and Jean-Yves Le Boudec.
ACM Computer Communication Review, April 2004
Related papers:
TCP Friendly Rate Control (TFRC) for Voice: VoIP Variant and Faster Restart ,
(draft-ietf-dccp-tfrc-voip-01.txt).
Sally Floyd and Eddie Kohler.
Internet draft, work in progress, February 2005.
Variable Packet Size Congestion Control is included in the
TFMCC code for the ns network simulator. It was implemented for
version 2.26 but should work for 2.27/2.28 as well. For unicast
simulations, simply use a TFMCC sender with a single receiver. Please
read the instructions on how to add
the code to an existing ns installation.
Usage:
VP-TFMCC has the following parameters:
-
VP-TFMCC uses either (1) a fixed packet size, or (2) a fixed packet rate, in
which case the packet size varies (and the packet size parameter is
unused). In this case, a maximum packet size can be specified as upper
bound. For example, to make a TFMCC flow with packets of size 100 be
fair to a TCP flow with packets of size 1000, set packetSize_
to 100.
Agent/TFMCC set packetSize_ 100
Agent/TFMCC set packetRate_ 0
Agent/TFMCC set packetMaxSize_ 0
To create a TFMCC flow with a fixed packet rate of 50 packets/second
and a maximum packet size of 1000, set
Agent/TFMCC set packetSize_ 0
Agent/TFMCC set packetRate_ 50
Agent/TFMCC set packetMaxSize_ 1000
-
VP-TFMCC tries to achieve the same rate as a TCP flow sending packets
of size fairSize_.
Agent/TFMCC set fairSize_ 1000
-
The following parameters determine how the receiver calculates a loss
event rate from the received packets, as described in the CCR paper
mentioned above. Note that there are different versions of the
mechanisms, depending on whether the bottleneck is "packet mode" or
"byte mode".
Agent/TFMCCSink set aggregatePackets_ false
Agent/TFMCCSink set aggregateLoss_ false
Agent/TFMCCSink set scaleLip_ false
Agent/TFMCCSink set randSampling_ false
Agent/TFMCCSink set unbiasInterval_ false
For "Unbiasing (Packet Mode)", set unbiasInterval_ to
true. For "Virtual Packets (Byte Mode)" set
aggregatePackets_ to true. For "Virtual Packets (Packet Mode)"
set aggregatePackets_ and aggregateLoss_ to
true. For "Random Sampling (Packet Mode)" set randSampling_
to true and for "LIP Scaling (Packet Mode)" set scaleLip_ to
true.
The remaining congestion control mechanisms for byte mode have not
been implemented.
All other parameters are as in normal TFRC or TFMCC.
Example scripts:
Some example code used for the CCR paper can be found here. Extract the archive, enter the
directory, and start one of the simulations with ./run-scenario
-sim fairness-aggloss-p100.