{"id":145,"date":"2025-06-05T11:57:21","date_gmt":"2025-06-05T10:57:21","guid":{"rendered":"https:\/\/www.bgptrace.com\/blog\/?p=145"},"modified":"2025-06-05T11:57:21","modified_gmt":"2025-06-05T10:57:21","slug":"tcp-congestion-control-again","status":"publish","type":"post","link":"https:\/\/www.bgptrace.com\/blog\/?p=145","title":{"rendered":"TCP Congestion Control &#8211;  again"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<p>This topic keeps coming up again and again:<br><\/p>\n\n\n\n<p>Which TCP congestion control algorithm has the best performance?<br>Which handles high latency, delays, and bottlenecks better?<br>And some might ask, <em>what does it mean when the congestion window becomes zero?<\/em> AH&#8230;<\/p>\n\n\n\n<p>Yes, it&#8217;s true \u2014 no matter how much technology improves, how fast chipsets and processors become, or how advanced fast-forwarding gets \u2014 <strong>congestion still happens<\/strong>.<\/p>\n\n\n\n<p>Today\u2019s topic isn&#8217;t about local datacenter LAN-side congestion (which may be caused by high network usage in clustered, fabric-based structures \u2014 AI workloads, maybe?).<\/p>\n\n\n\n<p>We\u2019re talking about <strong>long-haul network connections<\/strong> \u2014 like between two distant endpoints. Take Starlink, for example: a satellite-based system with unpredictable latency and environmental effects.<\/p>\n\n\n\n<p>So, how are these &#8220;OLD&#8221; TCP congestion control algorithms still being used today?<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Can monitoring TCP congestion control behavior \u2014 like how the congestion window changes \u2014 be used to detect potential congestion and trigger a BGP or transit path switch?<br>Maybe \u2014 but it depends on the access technology. If the last mile is wireless, measurements might not be reliable enough.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>So, which one is best suited for the modern era?<\/strong><\/p>\n\n\n\n<p><span style=\"text-decoration: underline;\">Here\u2019s a list of Linux-supported TCP congestion control algorithms (summarized by ChatGPT):<\/span><\/p>\n\n\n\n<p><strong>highspeed<\/strong>: Designed for networks with large bandwidth-delay products.<\/p>\n\n\n\n<p><strong>reno<\/strong>: The traditional TCP congestion control algorithm.<\/p>\n\n\n\n<p><strong>cubic<\/strong>: Default in Linux since kernel 2.6.19; optimized for high-speed networks.<\/p>\n\n\n\n<p><strong>bbr<\/strong>: Developed by Google (since kernel 4.9); focuses on bottleneck bandwidth and round-trip time.<\/p>\n\n\n\n<p><strong>bic<\/strong>: Binary Increase Congestion Control; predecessor to CUBIC.<\/p>\n\n\n\n<p><strong>htcp<\/strong>: Hamilton TCP; designed for high-speed, long-distance networks.<\/p>\n\n\n\n<p><strong>vegas<\/strong>: A delay-based algorithm that adjusts the sending rate based on RTT variations.<\/p>\n\n\n\n<p><strong>westwood<\/strong>: Optimized for lossy networks; adjusts congestion window based on bandwidth estimation.<\/p>\n\n\n\n<p><strong>yeah<\/strong>: Yet Another Highspeed TCP; combines delay and loss-based congestion detection.<\/p>\n\n\n\n<p><strong>hybla<\/strong>: Improves performance over high-latency networks by compensating for RTT.<\/p>\n\n\n\n<p><strong>illinois<\/strong>: Dynamically adjusts the congestion window for high-speed, long-distance links.<\/p>\n\n\n\n<p><strong>lp<\/strong>: Low Priority; designed for background traffic to yield to more important flows.<\/p>\n\n\n\n<p><strong>veno<\/strong>: Hybrid of Reno and Vegas; optimized for wireless networks.<\/p>\n\n\n\n<p><strong>scalable<\/strong>: Increases congestion window more rapidly than traditional TCP.<\/p>\n\n\n\n<p><strong>nv<\/strong>: New Vegas; an improvement over TCP Vegas.<\/p>\n\n\n\n<p><strong>cdg<\/strong>: Congestion Distance; uses delay gradients to detect congestion.<\/p>\n\n\n\n<p><strong>dctcp<\/strong>: Data Center TCP; optimized for data center networks using ECN.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This topic keeps coming up again and again: Which TCP congestion control algorithm has the best performance?Which handles high latency, delays, and bottlenecks better?And some might ask, what does it mean when the congestion window becomes zero? AH&#8230; Yes, it&#8217;s true \u2014 no matter how much technology improves, how fast chipsets and processors become, or &hellip; <a href=\"https:\/\/www.bgptrace.com\/blog\/?p=145\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;TCP Congestion Control &#8211;  again&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[36,7,39,152,151,150,153,116],"class_list":["post-145","post","type-post","status-publish","format-standard","hentry","category-internet","tag-ai","tag-bgp","tag-chatgpt","tag-congestion","tag-congestioncontrol","tag-tcp","tag-tcpip","tag-traffic"],"_links":{"self":[{"href":"https:\/\/www.bgptrace.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/145","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bgptrace.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bgptrace.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bgptrace.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bgptrace.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=145"}],"version-history":[{"count":1,"href":"https:\/\/www.bgptrace.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/145\/revisions"}],"predecessor-version":[{"id":146,"href":"https:\/\/www.bgptrace.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/145\/revisions\/146"}],"wp:attachment":[{"href":"https:\/\/www.bgptrace.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=145"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bgptrace.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=145"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bgptrace.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=145"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}