svn commit: r344367 - in head/sys/netinet: . tcp_stacks
Michael Tuexen
tuexen at FreeBSD.org
Wed Feb 20 17:56:40 UTC 2019
Author: tuexen
Date: Wed Feb 20 17:56:38 2019
New Revision: 344367
URL: https://svnweb.freebsd.org/changeset/base/344367
Log:
Use exponential backoff for retransmitting SYN segments as specified
in the TCP RFCs.
Reviewed by: rrs@, Richard Scheffenegger
Sponsored by: Netflix, Inc.
Differential Revision: https://reviews.freebsd.org/D18974
Modified:
head/sys/netinet/tcp_stacks/rack.c
head/sys/netinet/tcp_syncache.c
head/sys/netinet/tcp_timer.c
head/sys/netinet/tcp_timer.h
Modified: head/sys/netinet/tcp_stacks/rack.c
==============================================================================
--- head/sys/netinet/tcp_stacks/rack.c Wed Feb 20 17:10:30 2019 (r344366)
+++ head/sys/netinet/tcp_stacks/rack.c Wed Feb 20 17:56:38 2019 (r344367)
@@ -2869,7 +2869,7 @@ rack_timeout_rxt(struct tcpcb *tp, struct tcp_rack *ra
TCPSTAT_INC(tcps_rexmttimeo);
if ((tp->t_state == TCPS_SYN_SENT) ||
(tp->t_state == TCPS_SYN_RECEIVED))
- rexmt = MSEC_2_TICKS(RACK_INITIAL_RTO * tcp_syn_backoff[tp->t_rxtshift]);
+ rexmt = MSEC_2_TICKS(RACK_INITIAL_RTO * tcp_backoff[tp->t_rxtshift]);
else
rexmt = TCP_REXMTVAL(tp) * tcp_backoff[tp->t_rxtshift];
TCPT_RANGESET(tp->t_rxtcur, rexmt,
Modified: head/sys/netinet/tcp_syncache.c
==============================================================================
--- head/sys/netinet/tcp_syncache.c Wed Feb 20 17:10:30 2019 (r344366)
+++ head/sys/netinet/tcp_syncache.c Wed Feb 20 17:56:38 2019 (r344367)
@@ -155,11 +155,11 @@ static int syncookie_cmp(struct in_conninfo *inc, str
/*
* Transmit the SYN,ACK fewer times than TCP_MAXRXTSHIFT specifies.
* 3 retransmits corresponds to a timeout with default values of
- * TCPTV_RTOBASE * ( 1 +
- * tcp_syn_backoff[1] +
- * tcp_syn_backoff[2] +
- * tcp_syn_backoff[3]) + 3 * tcp_rexmit_slop,
- * 3000 ms * (1 + 1 + 1 + 1) + 3 * 200 ms = 12600 ms,
+ * TCPTV_RTOBASE * ( 1 +
+ * tcp_backoff[1] +
+ * tcp_backoff[2] +
+ * tcp_backoff[3]) + 3 * tcp_rexmit_slop,
+ * 3000 ms * (1 + 2 + 4 + 8) + 3 * 200 ms = 45600 ms,
* the odds are that the user has given up attempting to connect by then.
*/
#define SYNCACHE_MAXREXMTS 3
@@ -426,7 +426,7 @@ syncache_timeout(struct syncache *sc, struct syncache_
if (sc->sc_rxmits == 0)
rexmt = TCPTV_RTOBASE;
else
- TCPT_RANGESET(rexmt, TCPTV_RTOBASE * tcp_syn_backoff[sc->sc_rxmits],
+ TCPT_RANGESET(rexmt, TCPTV_RTOBASE * tcp_backoff[sc->sc_rxmits],
tcp_rexmit_min, TCPTV_REXMTMAX);
sc->sc_rxttime = ticks + rexmt;
sc->sc_rxmits++;
Modified: head/sys/netinet/tcp_timer.c
==============================================================================
--- head/sys/netinet/tcp_timer.c Wed Feb 20 17:10:30 2019 (r344366)
+++ head/sys/netinet/tcp_timer.c Wed Feb 20 17:56:38 2019 (r344367)
@@ -233,9 +233,6 @@ tcp_slowtimo(void)
VNET_LIST_RUNLOCK_NOSLEEP();
}
-int tcp_syn_backoff[TCP_MAXRXTSHIFT + 1] =
- { 1, 1, 1, 1, 1, 2, 4, 8, 16, 32, 64, 64, 64 };
-
int tcp_backoff[TCP_MAXRXTSHIFT + 1] =
{ 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 512, 512, 512 };
@@ -671,7 +668,7 @@ tcp_timer_rexmt(void * xtp)
TCPSTAT_INC(tcps_rexmttimeo);
if ((tp->t_state == TCPS_SYN_SENT) ||
(tp->t_state == TCPS_SYN_RECEIVED))
- rexmt = TCPTV_RTOBASE * tcp_syn_backoff[tp->t_rxtshift];
+ rexmt = TCPTV_RTOBASE * tcp_backoff[tp->t_rxtshift];
else
rexmt = TCP_REXMTVAL(tp) * tcp_backoff[tp->t_rxtshift];
TCPT_RANGESET(tp->t_rxtcur, rexmt,
Modified: head/sys/netinet/tcp_timer.h
==============================================================================
--- head/sys/netinet/tcp_timer.h Wed Feb 20 17:10:30 2019 (r344366)
+++ head/sys/netinet/tcp_timer.h Wed Feb 20 17:56:38 2019 (r344367)
@@ -199,7 +199,6 @@ extern int tcp_rexmit_slop;
extern int tcp_msl;
extern int tcp_ttl; /* time to live for TCP segs */
extern int tcp_backoff[];
-extern int tcp_syn_backoff[];
extern int tcp_totbackoff;
extern int tcp_rexmit_drop_options;
More information about the svn-src-head
mailing list