dcsctp: Increase RTO limits
The previous limits were taken from Oracles SCTP stack[1] as they were more up-to-date than the suggested ones in RFC4960. However, after having evaluated them for a while, it's evident that they are a bit too aggressive and likely have their origin from a wired LAN network. Let's do a re-take. These values have been taken from Solaris TCP stack[2]. They are even less aggressive than Linux defaults. This can be iterated even more, and is always possible to override by the client. It's generally the increase of rto_min that is helping here, as the delayed SACK and RTT jitter require that the RTO.min is quite much higher than the delayed SACK timeout of the peer (which isn't in control by us, but one can assume it's 200ms or less). And with a too low RTO.min, it's increased risk of getting spurious retransmissions and decreasing the congestion window. [1] https://docs.oracle.com/cd/E93309_01/docs.466/SIGTRAN/GUID-2136614F-4BED-407C-87B0-7EE10E0FF534.htm [2] https://docs.oracle.com/cd/E19120-01/open.solaris/819-2724/chapter4-69/index.html Bug: webrtc:12943 Change-Id: I9678ac4396286a55c251c5f57589379da70fd27d Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/231139 Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Victor Boivie <boivie@webrtc.org> Cr-Commit-Position: refs/heads/main@{#34927}
This commit is contained in:

committed by
WebRTC LUCI CQ

parent
b02ed8f026
commit
2e78f09c1a
@ -92,17 +92,17 @@ struct DcSctpOptions {
|
|||||||
// than this value, it will be discarded and not used for e.g. any RTO
|
// than this value, it will be discarded and not used for e.g. any RTO
|
||||||
// calculation. The default value is an extreme maximum but can be adapted
|
// calculation. The default value is an extreme maximum but can be adapted
|
||||||
// to better match the environment.
|
// to better match the environment.
|
||||||
DurationMs rtt_max = DurationMs(8000);
|
DurationMs rtt_max = DurationMs(60'000);
|
||||||
|
|
||||||
// Initial RTO value.
|
// Initial RTO value.
|
||||||
DurationMs rto_initial = DurationMs(500);
|
DurationMs rto_initial = DurationMs(500);
|
||||||
|
|
||||||
// Maximum RTO value.
|
// Maximum RTO value.
|
||||||
DurationMs rto_max = DurationMs(800);
|
DurationMs rto_max = DurationMs(60'000);
|
||||||
|
|
||||||
// Minimum RTO value. This must be larger than an expected peer delayed ack
|
// Minimum RTO value. This must be larger than an expected peer delayed ack
|
||||||
// timeout.
|
// timeout.
|
||||||
DurationMs rto_min = DurationMs(220);
|
DurationMs rto_min = DurationMs(400);
|
||||||
|
|
||||||
// T1-init timeout.
|
// T1-init timeout.
|
||||||
DurationMs t1_init_timeout = DurationMs(1000);
|
DurationMs t1_init_timeout = DurationMs(1000);
|
||||||
|
Reference in New Issue
Block a user