Page MenuHomeFreeBSD

Stop sending tiny new data segments during SACK recovery
ClosedPublic

Authored by rscheff on Sep 15 2020, 8:46 PM.
Tags
None
Referenced Files
Unknown Object (File)
Mon, Mar 18, 11:44 AM
Unknown Object (File)
Dec 20 2023, 6:02 AM
Unknown Object (File)
Dec 12 2023, 6:19 AM
Unknown Object (File)
Dec 10 2023, 6:14 PM
Unknown Object (File)
Nov 22 2023, 4:43 PM
Unknown Object (File)
Nov 12 2023, 4:05 PM
Unknown Object (File)
Nov 7 2023, 11:21 AM
Unknown Object (File)
Nov 4 2023, 5:25 AM
Subscribers

Details

Summary

When processing a partial acknowledgment during SACK
loss recovery, the size of the TCP option (in particular,
the timestamp option) was not considered properly.

This would restict the amount of new data to be injected,
but also could lead to the transmission of segments with
little data (a multiple of 12 bytes).

Considering the currently in-use TCP options when
calculating the amount of new data to be injected will
address this issue.

Reported-by: Liang Tian

Test Plan

Establish a TCP session with both SACK and Timestamps
enabled (the vast majority of all sessions in use today).

Simulate two or more non-consecutive packet drops within
a window and validate that new data is no longer injected
with very small segments, provided that the send buffer
is sufficiently full.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

This revision is now accepted and ready to land.Oct 8 2020, 1:03 PM
cc requested changes to this revision.Oct 8 2020, 3:13 PM
cc added inline comments.
sys/netinet/tcp_sack.c
790 ↗(On Diff #77076)

Better use the type u_int for maxseg.

This revision now requires changes to proceed.Oct 8 2020, 3:13 PM
  • make maxseg u_int,
  • fix tcpstat accounting for sack,
  • remove redundant conditional check
This revision was not accepted when it landed; it landed in state Needs Review.Oct 9 2020, 12:45 PM
This revision was automatically updated to reflect the committed changes.