
TT
d
h
ˆ
T
RTTtt
j
k
kj
∑
−>
=
where d
j
is the amount of data reported by ACK j.
In (Wang, 2002), the value (ε = 0.6) has been
employed for the constant-gain filter to calculate the
recent throughput as :
kkk
ThhThT )1(
ˆˆ
1
εε
−+=
−
(3)
When
RTThT
k
*
ˆ
is larger than the current cwin
value, indicating a path without congestion, T
k
is set
to T
min
. Otherwise, T
k
is set to :
cwin
RTThTcwin
RTTT
k
k
)*
ˆ
(
*
min
−
=
(4)
2.1.2 Filter Gain Adaptation
When
τ
k
is larger,
α
k
will be larger and the filter
tends to be more stable and less agile. After a certain
point, α
k
basically stays unchanged as the value of
τ
k
increases. The parameter
τ
k
adapts to network
conditions to dampen estimates when the network
exhibits very unstable behavior, and reacts quickly
to persistent changes. A stability detection filter can
be used to dynamically change the value of
τ
k
. The
network instability U is measured with a time-
constant EWMA filter (Wang, 2002)(Casetti, 2002) :
11
)1(
−−
−−+=
kkkk
ssUU
ββ
(5)
In (Ferorelli, 2002), s
k
is the k
th
sample, and
β
is the
gain of this filter, which is set to be 0.6 in (Wang,
2002). When the network exhibits high instability,
the consecutive observations diverge from each
other, as a result, U
k
increases. Under this condition,
increasing the value of
τ
k
makes the ABSE filter
defined by eq. (1) more stable. When a TCP
connection is operating normally, the interval
between the consecutive acknowledgements are
likely to vary between the smallest the bottleneck
capacity allows, and one RTT. Therefore, τ
k
should
be larger than one RTT, thus τ
min
= RTT. In (Wang,
2002) τ
k
is set to be :
max
*
U
U
RTTNRTT
k
k
+=
τ
(6)
The value of RTT can be obtained from the
smoothed RTT estimated in TCP (Wang, 2002).
2.2 Accounting for delayed and
cumulative ACKs in bandwidth
measurement
This issue has been addressed in (Wang, 2002).
DUPACKs should count towards the bandwidth
estimation since their arrival indicates a successfully
received segment, albeit in the wrong order. As a
consequence, a cumulative ACK should only count
as one segment’s worth of data since duplicate
ACKs ought to have been already taken into
account. Further complications result from delayed
ACKs. The standard TCP implementation provides
for an ACK being sent back once every other in-
sequence segment received, or if a 200 ms timeout
expires after the reception of a single segment
(Casetti, 2002). The combination of delayed and
cumulative ACKs can potentially disrupt the
bandwidth estimation process. Therefore, in (Casetti,
2002) two important aspects of the bandwidth
estimation process are stressed :
(a) the source must keep track of the DUPACKs
number it has received before new data is
acknowledged;
(b) the source should be able to detect delayed
ACKs and act accordingly.
The approach chosen to take care of these two issues
can be found in the AckedCount procedure,
detailed below, showing the set of actions to be
undertaken upon the reception of an ACK, for a
correct determination of the number of packets that
should be accounted for by the bandwidth estimation
procedure, indicated by the variable acked in the
pseudocode. The key variable is accounted,
which keeps track of the received DUPACKs.
When an ACK is received, the number of segments
it acknowledges is first determined (cumul_ack).
If it is equal to 0, then the received ACK is clearly a
DUPACK and counts as 1 segment towards the
BWE; the DUPACK count is also updated. If
cumul_ack is larger than 1, the received ACK is
either a delayed ACK or a cumulative ACK
following a retransmission event; in that case, the
number of ACKed segments is to be checked against
the number of segments already accounted for
(accounted_for). If the received ACK
acknowledges fewer or the same number of
segments than expected, it means that the “missing”
segments were already accounted for when
DUPACKs were received, and they should not be
counted twice. If the received ACK acknowledges
more segments than expected, it means that although
part of them were already accounted for by way of
DUPACKs, the rest are cumulatively acknowledged
by the currentACK; therefore, the currentACK
should only count as the cumulatively acknowledged
segments. It should be noted that the last condition
correctly estimates the delayed ACKs.
cumul_ack = 2 and accounted_for = 0):
PROCEDURE AckedCount
cumul_ack=current_ack_seqno-
last_ack_seqno;
if (cumul_ack = 0)
last_ack_seqno = current_ack_seqno;
acked = cumul_ack;
return(acked);
MEASUREMENTS OF TCPW ABSE FAIRNESS AND FRIENDLINESS
177