Skip to content
  • Yuchung Cheng's avatar
    tcp: use RACK to detect losses · 4f41b1c5
    Yuchung Cheng authored
    This patch implements the second half of RACK that uses the the most
    recent transmit time among all delivered packets to detect losses.
    tcp_rack_mark_lost() is called upon receiving a dubious ACK.
    It then checks if an not-yet-sacked packet was sent at least
    "reo_wnd" prior to the sent time of the most recently delivered.
    If so the packet is deemed lost.
    The "reo_wnd" reordering window starts with 1msec for fast loss
    detection and changes to min-RTT/4 when reordering is observed.
    We found 1msec accommodates well on tiny degree of reordering
    (<3 pkts) on faster links. We use min-RTT instead of SRTT because
    reordering is more of a path property but SRTT can be inflated by
    self-inflicated congestion. The factor of 4 is borrowed from the
    delayed early retransmit and seems to work reasonably well.
    Since RACK is still experimental, it is now used as a supplemental
    loss detection on top of existing algorithms. It is only effective
    after the fast recovery starts or after the timeout occurs. The
    fast recovery is still triggered by FACK and/or dupack threshold
    instead of RACK.
    We introduce a new sysctl net.ipv4.tcp_recovery for future
    experiments of loss recoveries. For now RACK can be disabled by
    setting it to 0.
    Signed-off-by: default avatarYuchung Cheng <>
    Signed-off-by: default avatarNeal Cardwell <>
    Signed-off-by: default avatarEric Dumazet <>
    Signed-off-by: default avatarDavid S. Miller <>