a Increase: W = W + --- W Decrease: W = W - b * W ------------ 1 / a (2 - b) Avg TCP Throughput = ----- \ / ---------- (# packets/sec) RTT \/ 2bp |
------------ / a (2 - b) Avg TCP CWND = \ / ---------- (# packets) \/ 2bp |
|
|
Therefore:
|
|
|
|
$64,000 question:
|
Ingenious solution:
|
(The "how" is explained below....)
|
Average CWND used by classic TCP Reno:
Packet Drop Rate P Congestion Window W ------------------ ------------------- 10^-2 12 10^-3 38 (Low speed links) 10^-4 120 10^-5 379 10^-6 1200 10^-7 3795 (High speed links) 10^-8 12000 10^-9 37948 10^-10 120000 Table 2: TCP Response Function for Standard TCP. The average congestion window W in MSS-sized segments (packets) is given as a function of the packet drop rate P. |
Conclussion:
|
Notes:
|
|
Example: (not scientifically correct, just to illustrate the concept of "dynamic update rate")
|
|
120,000 × CWND = 1,000,000,000 ==> CWND = 1,000,000,000 / 120,000 = 83,333 ==> CWND ~= 83,000 |
|
------------ / a (2 - b) 1 Avg TCP Throughput = \ / ---------- × ------- \/ 2bp RTT ------------ / a (2 - b) Avg TCP CWND = \ / ---------- \/ 2bp |
------------- / a (2 - b) 83000 = \ / ---------- \/ 2b * 10−7 |
|
|
Verify: --------------------- / 72 (2 - 0.1) \ / ------------- * 107 \/ 2*0.1 ------------------ / 72 * 1.9 = \ / ---------- * 107 \/ 0.2 -------- / = \ / 684 * 107 \/ = 82704.29 (approximately 83000) |
Verify: --------------------- / 459 (2 - 0.5) \ / ------------- * 107 \/ 2*0.5 ------------------ / 459 * 1.5 = \ / ---------- * 107 \/ 1.0 -------- / = \ / 688.5 * 107 \/ = 82975.90 (also approximately 83000) |
|
Which CWND update method is better ?
|
|
|
|
Notes:
|
|
$64,000 Question:
|
Initial answer:
|
So far:
|
Observation on the interpolation functions:
|
Note:
|
u W(p) = ----- pv |
W( 10−7 ) = 83,000 ........ (1) W( 10−3 ) = 38 ........ (2) |
We can find u and v as follows:
u ------ = 83,000 ........ (1a) (10−7)v u ------ = 38 ........ (2a) (10−3)v
|
0.12 W(p) = --------- . . . . . . . . . . . . . . (5) 0.835 p |
(The scale is too large :-))
|
0.12 W = --------- 0.835 p 0.12 <==> p0.835 = ------ (1/(0.835) = 1.1976) W 0.121.1976 <==> p = ------------ W1.1976 |
a(w) Increase: w <- w + ------ w Decrease: w <- w - b(w) * w |
------------ / a (2 - b) 1 Avg TCP Throughput = \ / ---------- × ------- ........ (7) \/ 2bp RTT ------------ / a (2 - b) Avg TCP CWND = \ / ---------- (# packets) ........ (8) \/ 2bp |
-------------- / a (2 - b) w = \ / ------------- (# packets) \/ 2 b p 2 a (2 - b) <==> w = ----------- 2 b p <==> a * (2 - b) = w2 * 2 * b * p 2 w2 b p <==> a = ---------- 2 - b
|
0.0789 p(W) = --------- . . . . . . . . . . . . . (6) W1.2 |
Notice that there are two undetermined variables (degrees of freedom) in Equation (9):
2 w2 b(w) p(w) a(w) = ---------------- . . . . . . . . . (9) 2 - b(w) |
Namely:
|
|
2 w2 b(w) p(w) a(w) = ---------------- . . . . . . . . . (9) 2 - b(w) |
It is obvious that we should:
|
|
Graphically:
Consider the choices:
Note:
|
log(w) - log(38) b(w) = (0.1 - 0.5) * ---------------------- + 0.5 . . . . . (10) log(83000) - log(38) |
The Interpolation curve for b(w) looks like this:
|
(I will continue with the paper....)
a(w) New ACK: w <- w + ------ w Triple Dup ACK: w <- w - b(w) * w |
a(w) and b(w) depends on the current congestion window CWND = w.
|
log(w) - log(38) b(w) = (0.1 - 0.5) * ---------------------- + 0.5 .......(10) log(83000) - log(38) |
2 w2 b(w) p(w) a(w) = ---------------- .......... (9) 2 - b(w) |
The value p(w) is computed from w using Equation (6):
0.0789 p(w) = --------- ........ (6) w1.2 |
# These values are set in TCL Agent/TCP set low_window_ 38 ; # default changed on 2002/8/12. Agent/TCP set high_window_ 83000 Agent/TCP set high_p_ 0.0000001 # 10^-7 Agent/TCP set high_decrease_ 0.1 Agent/TCP set max_ssthresh_ 0 |
|
|