CC_NEWRENO(4)
π cc_newreno(4) β NewReno Congestion Control Algorithm π
okay bestie, gather round, because we're about to talk about cc_newreno, and it's literally the default TCP congestion control algorithm β like, the main character of your TCP stack. this is a Kernel Interfaces Manual page, section 4, and it's giving absolute legend energy. the algorithm deets live in RFC5681 if you wanna go read the source material. iykyk π«Ά
β¨ NAME β¨
cc_newreno β the NewReno Congestion Control Algorithm. that's it, that's the name, no notes π
πΈ SYNOPSIS πΈ
#include <netinet/cc/cc_newreno.h>
π¦ DESCRIPTION π¦
so the NewReno congestion control algorithm is the default for TCP. yes, THE default. the moment. the blueprint. if you didn't pick anything else, congrats, you're already running it π
want the full lore? all the algorithm details live in RFC5681. go read it, bestie, it's right there.
π Socket Options π
the cc_newreno module supports a bunch of socket options under TCP_CCALGOOPT β and heads up, tcp(4) and moc_cc(9) have the details on that whole situation. you set these with setsockopt(2) and you can peek at them with getsockopt(2). obsessed with a round trip β¨
these socket options use this struct, which is defined in <sys/netinet/cc/cc_newreno.h>:
struct cc_newreno_opts {
int name;
uint32_t val;
}
now, the options themselves:
CC_NEWRENO_BETAβ the multiplicative window decrease factor, expressed as a percentage, that gets applied to the congestion window when a congestion signal shows up, like:cwnd = (cwnd * CC_NEWRENO_BETA) / 100. the default is50. half off, but make it congestion control π«ΆCC_NEWRENO_BETA_ECNβ same idea, but this is the multiplicative window decrease factor, as a percentage, applied to the congestion window in response to an ECN congestion signal whennet.inet.tcp.cc.abe=1, like:cwnd = (cwnd * CC_NEWRENO_BETA_ECN) / 100. the default is80. softer touch, very demure π
π§ MIB Variables π§
the algorithm exposes these variables in the net.inet.tcp.cc.newreno branch of the sysctl(3) MIB:
betaβ the multiplicative window decrease factor, specified as a percentage, applied to the congestion window in response to a congestion signal per:cwnd = (cwnd * beta) / 100. default is50.beta_ecnβ the multiplicative window decrease factor, specified as a percentage, applied to the congestion window in response to an ECN congestion signal whennet.inet.tcp.cc.abe=1per:cwnd = (cwnd * beta_ecn) / 100. default is80.
π SEE ALSO π
also, the reading list, because we are cultured:
- Mark Allman, Vern Paxson, and Ethan Blanton, TCP Congestion Control,
RFC 5681. - Naeem Khademi, Michael Welzl, Grenville Armitage, and Gorry Fairhurst, TCP Alternative Backoff with ECN (ABE),
RFC 8511.
π ACKNOWLEDGEMENTS π
ngl, the dev and testing of this software were made possible in part by grants from the FreeBSD Foundation and the Cisco University Research Program Fund at Community Foundation Silicon Valley. funding girlies came through, and we love that for them π
πΈ HISTORY πΈ
- the
cc_newrenocongestion control algorithm first appeared in its modular form in FreeBSD 9.0. glow-up era β¨ - the module was first released in 2007 by James Healy and Lawrence Stewart, whilst they were working on the NewTCP research project at Swinburne University of Technology's Centre for Advanced Internet Architectures, Melbourne, Australia. that whole thing was made possible in part by a grant from the Cisco University Research Program Fund at Community Foundation Silicon Valley. more details live at:
http://caia.swin.edu.au/urp/newtcp/
β AUTHORS β
- the
cc_newrenocongestion control module was written by James Healy<jimmy@deefa.com>, Lawrence Stewart<lstewart@FreeBSD.org>and David Hayes<david.hayes@ieee.org>. dream team fr fr π₯ - support for TCP ABE was added by Tom Jones
<tj@enoti.me>. - this manual page was written by Lawrence Stewart
<lstewart@FreeBSD.org>.
π that's the whole page, bestie! no cap, every flag, every default, every formula, every reference β all accounted for. slay π
and for the cute sign-off: this beauty comes from Debian, dated August 6, 2019 β so go forth, tune your beta, and remember: NewReno is the default for a reason, periodt ππ¦
π¦ where this page comes from
- debian bookworm: freebsd-manpages 12.2-1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- debian trixie: freebsd-manpages 12.2-2 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu jammy: freebsd-manpages 12.2-1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu noble: freebsd-manpages 12.2-1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu questing: freebsd-manpages 12.2-2
- ubuntu resolute: freebsd-manpages 12.2-2build1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu stonking: freebsd-manpages 12.2-2build1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- Copyright (c) 2009 Lawrence Stewart <lstewart@FreeBSD.org>
- Copyright (c) 2011 The FreeBSD Foundation
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms