Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
net/tcp_timer: fix tcp RTO abnormally large after retransmission occurs
when tcp retransmission only double conn->timer in Karn(tcp_timer.c L602), after retransmission in Jacobson M is is now rtt test will become a negative value. ``` signed char m; m = conn->rto - conn->timer; // M is now rtt test /* This is taken directly from VJs original code in his paper */ m = m - (conn->sa >> 3); conn->sa += m; //conn->sa is a negative value if (m < 0) { m = -m; } m = m - (conn->sv >> 2); conn->sv += m; conn->rto = (conn->sa >> 3) + conn->sv; //rto ``` For example,we lost one ack packet, we will set conn->timer = 6 by backoff,conn->rto still 3. After retransmission we will Do RTT estimation, then will get ``` conn->sa = 253 conn->rto = 46 ``` Then if any packets lost it will wait for a long time before triggering a retransmission. Test method. We can reproduce this issue by adding drop ACK packets in tcp_input, and debug conn->rto after Jacobson. Signed-off-by: meijian <[email protected]>
- Loading branch information