[RFC 0/2] Account for duplicate ACKs with invalid SACK-blocks

Christoph Paasch
2013-08-19T19:29:47Z

There exist sequence-number rewriting middleboxes, who do not modify the
sequence-number in the SACK-blocks.
Duplicate acknowledgments with these (invalid) SACK-blocks will not be
accounted in sacked_out, and thus no fast-retransmit will trigger.
So, the only way to recover from a packet-loss is through an RTO,
effectively killing the performance of TCP in this case.

Performance-results can be seen here:
http://tools.ietf.org/agenda/87/slides/slides-87-tcpm-11.pdf

Another solution might be to simply disable SACK, as soon as an invalid
SACK-block has been received (as suggested by Phil Oester). This however
might be too aggressive.

Christoph Paasch (2):
Use acked_out for reno-style ack acounting instead of sacked_out
Account acked_out in sack, if the sack is invalid

include/linux/tcp.h | 1 +
include/net/tcp.h | 17 +++++---
net/ipv4/tcp_input.c | 103 ++++++++++++++++++++++++++++++++---------------
net/ipv4/tcp_minisocks.c | 1 +
net/ipv4/tcp_output.c | 6 +--
net/ipv4/tcp_timer.c | 2 +-
6 files changed, 89 insertions(+), 41 deletions(-)

--
1.8.1.2