Summary: | [tcp] Fast Recovery not entered, when SACK negotiated, but no SACK blocks received in DupAcks | ||
---|---|---|---|
Product: | Base System | Reporter: | Richard Scheffenegger <rscheff> |
Component: | kern | Assignee: | Richard Scheffenegger <rscheff> |
Status: | Closed FIXED | ||
Severity: | Affects Only Me | CC: | tuexen |
Priority: | --- | ||
Version: | CURRENT | ||
Hardware: | Any | ||
OS: | Any |
Description
Richard Scheffenegger
2021-02-12 17:44:22 UTC
Looked into this issue. The discrepancy between Client and Server side turned out to be a typo in the testscript. Provided that SACK is negotiated for in the 3WHS, any subsequent duplicate ACKs without SACK blocks are effectively ignored for purposes of recovering from loss. https://reviews.freebsd.org/D28634 When duplicate ACKs arrive after SACK was negotiated, make sure that SACK processing only happens with actual SACK blocks are also present in the TCP option of the ACK. Otherwise, the normal newreno processing path would be taken. And as always, the retransmission timer remains as ultimate fallback, thus any problematic TCP sessions would only exhibit poor performance under loss, but no catastrophic failure (stall / closing of the session). Fix under discussion: https://reviews.freebsd.org/D28634 The fix under discussion has been committed. |