![]() |
|
![]() |
|
This is the moment that TCP exits SS and enters CA
So the second equation indeed increases congestion window W(t) by ONE per RTT seconds.
![]() |
|
![]() |
Then the segment (packet) transmission rate of the TCP connection is:
RTT |<-------------------------------->| W(t) ---+----------------------------------+--------- \ \ W(t) segments en route to destination W(t) Transmission rate = B(t) = ------ (# packets / sec) RTT |
NOTE: the notation
B(t)
in the Hybla TCP paper
means: "segment transmission rate at time t"
The notation B(t) in Padhye's paper means: "Throughput of TCP at time t" Yes, it's confusing, but I try to keep the same notation used in each paper |
![]() |
integrate( 2^(t/RTT)/RTT, t); / t \ |---| \RTT/ 2 ------ (+ constant) ln(2) |
(This situation is similar to the relationship between velocity and distance traveled:)
|
RTT ρ = ------ RTT0 |
where RTT0 is some pre-determined round trip time (e.g., 25 msec).
ALL TCP Hybla connection that have the SAME slow start threshold will that the SAME amount of time to exit the slow start phase |
Reno Slow Start threshold value = γ RTT TCP Hybla Slow Start threshold value = ρ * γ = ------ γ RTT0 |
![]() |
where
RTT ρ 2(ρ*t/RTT) = ----- 2(t/RTT0) . . . . . . . . (SS) RTT0 WH(t) = t - tγ,0 RTT t - tγ,0 ρ ( ρ ---------- + γ ) = ----- ( --------- + γ ) . . . . (CA) RTT RTT0 RTT0 |
Reason:
RTT WH(t) = ----- 2(t/RTT0) = ρ * γ RTT0 |
1 = ----- 2(t/RTT0) . . . . . (SS) RTT0 WH(t) BH(t) = ----- RTT 1 t - tγ,0 = ----- ( --------- + γ ) . . . . (CA) RTT0 RTT0 |
As we have just seen before, tγ,0 is independent of RTT
Therefore, RTT does not appear anywhere as a factor in BH(t) --- so BH(t) is independent of RTT
![]() |
A TCP Hybla connection with longer RTT needs to end up at a higher CWND to achieve the SAME throughput per time unit (second)
![]() |
![]() |
Now HOW should the CWND be updated ( per each NEW ACK) so that TCP Hybla's CWND will be equal to the given function ?
What are the values for α and β for the update of CWND W:
WHi + α . . . . (SS) WHi+1 = WHi + β . . . . (CA) |
so that:
![]() |
![]() |
WHi + 2ρ - 1 . . . . (SS) WHi+1 = ρ2 WHi + ----- . . . . (CA) WHi |
In a homework, you can verify this fact (it's a lot easier to verify the correctness of a solution than to find a solution)
NOTE: I think in their implemetation, they set:
NOTE: The way they implemented CWND = ρ is changing wnd_init_:
They then call TcpAgent::timeout(tno); which will use wnd_init_ as initial cwnd_
See: click here - look for the function void HyblaSTcpAgent::timeout(int tno)
(The paper did not say - but I found the statement slowdown(CLOSE_SSTHRESH_HALF|CLOSE_CWND_HALF); in the source code)
![]() |