無懈可擊的 TCP AIMD

不特指 TCP AIMD,而泛指控制范疇的所有 Additive Increase / Multiplicative Decrease 算法,繼 難以超越的 TCP AIMD 再敘。

“你永遠不能僅憑 BBR 的吞吐更高就說 BBR 比 CUBIC 更好” 這句話怎么總是沒人看,這句話是這一系列文章的前提論點,但卻總有人看了全文后用 “BBR 性能更高” 來表明自己見多識廣。

再次給出 AIMD 算法吞吐率 T 和丟包率 p 以及 RTT 關系的公式:

T=γRTT?p?0.5T=\dfrac{\gamma}{\text{RTT}}\cdot p^{-0.5}T=RTTγ??p?0.5

在三維坐標系里畫圖,結論就是:

  • AIMD 算法受 RTT 影響巨大,RTT 越大,吞吐越低;
  • AIMD 算法受丟包率 p 影響巨大,p 越大,吞吐越低;

如來自 IBM Aspera 的廣告圖描述上述正合適:
在這里插入圖片描述

還有個推論:

  • 端到端傳輸控制是 “and” 關系,丟包與路徑長度正相關,往往 RTT 越大,p 也越大;

這些即 “長肥管道中 TCP 窗口張開難的故有問題” 的量化描述,長肥管道問題歷經 30 年,終于在 2010 年代不能再無視,必須解決,原因在于 “依照 AIMD 公式,高速 TCP 需要控制 p 在某個值 Q 之下,而大多數傳輸介質的固有丟包率都在 Q 之上”,換句話說,介質由于固有丟包率太高而無法滿足高速 TCP 的要求。

如何解決長肥管道的問題,還得從本質入手。

這明明是介質不中用了,關 AIMD 公式什么事。引力距離超過洛希極限掌控不了了,就是牛頓錯了?介質不中用了就優化介質,介質電氣特性本身就有定義了傳輸吞吐極限的含義,比如所謂五類,超五類雙絞線,目前面對超高速 TCP 而言,只是沒有哪種介質對應 400Gbps 傳輸帶寬而已,而不是 AIMD 算法不好。

相反,綜合考慮成本,帶寬利用率,公平性等,AIMD 是綜合效能最好的算法,沒有之一,AIMD 恰如其分適應盡力而為的網絡。參考 難以超越的 TCP AIMD。

AIMD 公式的正則推導不難,我的總結看這里:

  • AIMD 公式的一般推導(附幾何推導引用)
  • TCP AIMD 公式的推導

更正式的論文參考 The Macroscopic Behavior of the TCP Congestion Avoidance Algorithm。

但這次我們用更加直觀的方式重新審視 AIMD 公式,-0.5 次冪值得注意,這意味著 p 和 W 的平方存在反比關系,這個平方如何理解。按照生滅守恒,MD 視作丟包懲罰,AI 視作獎勵,則:

(懲罰量)?(懲罰概率)∝(獎勵量)?(獎勵概率)(懲罰量)\cdot (懲罰概率) \propto (獎勵量)\cdot(獎勵概率)(懲罰量)?(懲罰概率)(獎勵量)?(獎勵概率)

AIMD 的懲罰量為 β·W,懲罰概率即丟包率 p,獎勵量為 1,獎勵概率即每個 RTT 一次,即 RWR=1W\dfrac{\frac{R}{W}}{R}=\dfrac{1}{W}RWR??=W1?,總體上就是:
β?W?p∝1?1W\beta\cdot W\cdot p \propto 1\cdot\dfrac{1}{W}β?W?p1?W1?

至于為什么如此,直觀上即可理解。

以吹氣球為例,氣球的破裂容量決定了兩個維度的度量,一個是氣球的最大容量,另一個是把氣球吹到最大容量的時間,而 AIMD 的過程非常像吹氣球,buffer 滿了丟包視為氣球吹爆,它決定了丟包時的最大窗口 W 以及到達最大窗口的時間 0.5·W·RTT,因此 W2∝1pW^2 \propto \frac{1}{p}W2p1?,剩下的就是待定系數了。

用吹氣球的過程套用生滅守恒,則氣球爆裂瞬間釋放 W 氣體,吹爆氣球的頻率為 p,按照 AIMD 將氣球吹起來需要 W 口氣,則吹氣頻率即 1W\dfrac{1}{W}W1?,那么 W?p=1?1WW\cdot p=1\cdot\dfrac{1}{W}W?p=1?W1?,還是一樣的結論。

考慮一個有 n +1 個氣孔的氣球,其中 1 個氣孔出氣,n 個氣孔進氣,如果我們要求氣球內部必須保留一定氣體從出氣孔持續放出,考慮 n 人一起從 n 個進氣孔吹同一個氣球的場景。如果 n = 1,為了照顧人有限的肺活量,氣球容量必須至少等于人的最大肺活量,且吹得太快容易爆裂,吹得太慢換氣時出氣孔沒氣體,但 n = 3 時,一個人換氣時,另外 2 人可能依然保持吹氣,就這樣讓 n 不斷增大。

隨 n 不斷增大,單個人的換氣行為導致的氣體波動被稀釋了。流越多,所需 buffer 越小,但帶寬利用率仍然很高,這就是網絡對 buffer 需求的平方反比律,參見 交換機 buffer 的平方反比律。

流越多,峰越容易被平滑到谷,總體方差越小,大數中心極限定理,整體越收斂,這就是統計的力量,勾勒出的是現實的美感。

因此 AIMD 算法對 buffer 的需求是向內斂的,不會膨脹,這意味著 AIMD 算法具有良好的擴展性。從這個論點再次看出,AIMD 只需要非常小的代價便可以保持網絡在整體上公平高效的可用性,且隨著流增多,buffer 需求卻不增反降,抖動也被平滑,時延亦具有擴展性。這一切竟然都是自動的,只要執行最簡潔的 AIMD。

維持互聯網公平高效可用的根基竟然就是多人吹氣球。

在這個和諧的場景,單獨侵入一條 BBR 流,然后說 BBR 可以獲得更大的吞吐,從而證明 BBR 比 AIMD 更優,這是當前絕大多數人的觀點,我早已拋棄了這個觀點,經歷了滿懷激情的無果優化,深入理解了 TCP/IP 盡力而為的本質后,我明白了 AIMD 少就是多。

現在開始考慮更加現實的情況。

網絡是一個開放系統而非封閉系統,這意味著網絡狀態時刻隨輸入,輸出,反饋而改變,正如股票,有人買它就會漲,有人賣它就會跌,讓你永遠捉摸不定它的下一步走勢,因為這個走勢直接由買賣者自己的行為決定。同樣, AIMD 公式需要修正,修正的重點在于,p 在 “多大程度” 上決定 AIMD 周期和最大窗口,這個程序是非線性的,因此需要重新建模:

T=γRTProp?p?αT=\dfrac{\gamma}{\text{RTProp}}\cdot p^{-\alpha}T=RTPropγ??p?α,其中 0<α≤10<\alpha\le 10<α1

以上更加實際的模型顯然無法通過理論推導計算出來參數,接下來就是在每一個特定場景用海量測量數據喂這個模型,求出該場景下最佳擬合結果的 α,β。區別就在于 “理論計算” 還是 “經驗總結”。
該模型可以精確預測一個開發中的系統最終的預期理論吞吐,比如用各種 p 得到的實際結果求出 α,β 后,就可以根據系統的結構蘊含的 p 求出 T。它比理論上的 -0.5 次冪以及各種不同 AIMD 算法理論上的 β 更具有實際意義。

以下是這件事和這場論述的緣起,我先給出我的一個擬合模型:

T=1.05?MSSRTT?p?0.75T=1.05\cdot\dfrac{\text{MSS}}{\text{RTT}}\cdot p^{-0.75}T=1.05?RTTMSS??p?0.75

我的 tun/tap 背靠背轉發程序里設置了 40MB buffer,在處理 RingBuffer 邊界回繞時沒處理好,意味著每 40MB 數據丟一個 MSS,測下來只有 490Mbps,fix bug 前需要一個期望,我的期望是跑滿千兆,依據就是以上公式。該模型的參數基于 cubic 精確擬合過,至于 40MB 還是 5MB,也可反算,最終得到最佳解。

將 p 視作通用損耗率,該模型幾乎適合任何系統求解最佳吞吐。

該總結一下了,形而上時間。

AIMD 公式雖簡潔,但與性能掛鉤就很不好看,吞吐隨 p 衰減太厲害。人們總覺得有 “巨大優化空間”,總想著去 “優化” 它,BBR 出來了,吞吐上來了,但付出了更大的公平性和測量的代價,代碼越搞越復雜。問題是如何定義 “更優”,值得編程者注意的是,網絡是一個開放非線性系統,而非線性系統的問題不僅僅關乎計算機技術,遺憾的是,BBR 出自計算機技術學科內線性的假設。

如果快速衰減就是不可違抗的自然律呢,而自然本就是典型的非線性系統,這種函數隨自變量非線性變化的自然律太正常了。觀測被編程者膜拜的無敵香農公式,設信號為 1,噪聲為 p,信道容量為

C=B?log?2(1+1p)C=B\cdot\log_2(1+\dfrac{1}{p})C=B?log2?(1+p1?)

與 AIMD 幾乎一致,二者均顯示非線性衰減特征:
在這里插入圖片描述

噪聲增加一點點,信道容量下降很多。

類似的,材料疲勞壽命和應力波動,金融投資收益與風險,生態學種群增長與流行病,均描述了相似的非線性特征。

這并非意味著這些公式描述的衰減存在優化空間,恰恰相反,這說明這些公式描述的世界本質上就是這樣的,這是真實世界中真實的衰減,無法抗拒的衰減。而真實世界符合最小作用量,這意味著它們已經是最優解。

回到 AIMD,它是一種極其自然的作用力,自然作用力天然具有公平性特征,其不變量就是時間在共享 buffer 里的彈性,一條流的 buffer 排隊時間多了,該作用力會更強烈讓其排出更多。

為什么收斂行為這么簡潔和優雅?只因為它是自然的,多一點都是多。

更直觀的例子是非牛頓流體,不管形狀如何,只要質量相同,在重力的作用下,它們最終肯定占據相同的占地面積,因為重心高了,重力會拉低它,將高度補償給面積后,拉低的力度逐漸變弱,最終大家一致,就好像大家剛擠上一輛公交車時氣都喘不過來,車開了點播一段時間后,就逐漸寬松且公平了,RTT=InfltBW\text{RTT}=\dfrac{\text{Inflt}}{\text{BW}}RTT=BWInflt? 表達的也是一個意思。

浙江溫州皮鞋濕,下雨進水不會胖。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/920546.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/920546.shtml
英文地址,請注明出處:http://en.pswp.cn/news/920546.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據集數量與神經網絡參數關系分析

1. 理論基礎 1.1 經驗法則與理論依據 神經網絡的參數量與所需數據集大小之間存在重要的關系&#xff0c;這直接影響模型的泛化能力和訓練效果。 經典經驗法則10倍法則&#xff1a;數據樣本數量應至少為模型參數量的10倍 公式&#xff1a;數據量 ≥ 10 參數量適用于大多數監督學…

項目經驗處理

訂單取消和支付成功并發問題 這是一個非常經典且重要的分布式系統問題。訂單取消和支付成功同時發生&#xff0c;本質上是一個資源競爭問題&#xff0c;核心在于如何保證兩個并發操作對訂單狀態的修改滿足業務的最終一致性&#xff08;即一個訂單最終只能有一種確定的狀態&…

rabbitmq學習筆記 ----- 多級消息延遲始終為 20s 問題排查

問題現象 在實現多級延遲消息功能時&#xff0c;發現每次消息延遲間隔始終為20s&#xff0c;無法按照預期依次使用20s→10s→5s的延遲時間。日志顯示每次處理時移除的延遲時間都是20000L。 問題代碼片段 1.生產者 Testvoid sendDelayMessage2() {List<Long> expireTimeLi…

軟件測試(三):測試流程及測試用例

1.測試流程1.需求分析進行測試之前先閱讀需求文檔&#xff0c;分析指出不合理或不明確的地方2.計劃編寫與測試用例測試用例用例即&#xff1a;用戶使用的案例測試用例&#xff1a;執行測試的文檔作用&#xff1a;用例格式&#xff1a;----------------------------------------…

Python:列表的進階技巧

列表&#xff08;list&#xff09;作為 Python 最常用的數據結構之一&#xff0c;不僅能存儲有序數據&#xff0c;還能在推導式、函數參數傳遞、數據處理等場景中發揮強大作用。下面介紹一些進階技巧與常見應用。一、去重與排序1、快速去重&#xff08;不保序&#xff09;nums …

【完整源碼+數據集+部署教程】硬幣分類與識別系統源碼和數據集:改進yolo11-SWC

背景意義 隨著經濟的發展和數字支付的普及&#xff0c;傳統硬幣的使用逐漸減少&#xff0c;但在某些地區和特定場合&#xff0c;硬幣仍然是重要的支付手段。因此&#xff0c;硬幣的分類與識別在自動化支付、智能零售和物聯網等領域具有重要的應用價值。尤其是在銀行、商超和自助…

萊特萊德:以“第四代極限分離技術”,賦能生物發酵產業升級

萊特萊德&#xff1a;以“第四代極限分離技術”&#xff0c;賦能生物發酵產業升級Empowering Upgrades in the Bio-Fermentation Industry with "Fourth-Generation Extreme Separation Technology生物發酵行業正經歷從 “規模擴張” 向 “質效提升” 的關鍵轉型&#xff…

外賣大戰之后,再看美團的護城河

美團&#xff08;03690.HK&#xff09;于近日發布了2025年Q2財報&#xff0c;市場無疑將更多目光投向了其備受關注的外賣業務上。毫無懸念&#xff0c;受外賣競爭和加大投入的成本影響&#xff0c;美團在外賣業務上的財務數據受到明顯壓力&#xff0c;利潤大幅下跌&#xff0c;…

R包fastWGCNA - 快速執行WGCNA分析和下游分析可視化

最新版本: 1.0.0可以對著視頻教程學習和使用&#xff1a;然而還沒錄呢, 關注B站等我更新R包介紹 開發背景 WGCNA是轉錄組或芯片表達譜數據常用得分析, 可用來鑒定跟分組或表型相關得模塊基因和核心基因但其步驟非常之多, 每次運行起來很是費勁, 但需要修改的參數并不多所以完全…

GitHub 熱榜項目 - 日榜(2025-08-29)

GitHub 熱榜項目 - 日榜(2025-08-29) 生成于&#xff1a;2025-08-29 統計摘要 共發現熱門項目&#xff1a;11 個 榜單類型&#xff1a;日榜 本期熱點趨勢總結 本期GitHub熱榜展現出三大技術趨勢&#xff1a;1&#xff09;AI應用持續深化&#xff0c;ChatGPT等大模型系統提示…

【深度學習實戰(58)】bash方式啟動模型訓練

export \PATHPYTHONPATH/workspace/mmlab/mmdetection/:/workspace/mmlab/mmsegmentation/:/workspace/mmlab/mmdeploy/:${env:PYTHONPATH} \CUDA_VISIBLE_DEVICES0 \DATA_ROOT_1/mnt/data/…/ \DATA_ROOT_2/mnt/data/…/ \DATA_ROOT_MASK/…/ \PATH_COMMON_PACKAGES_SO…sonoh…

【物聯網】關于 GATT (Generic Attribute Profile)基本概念與三種操作(Read / Write / Notify)的理解

“BLE 讀寫”在這里具體指什么&#xff1f; 在你的系統里&#xff0c;樹莓派是 BLE Central&#xff0c;Arduino 是 BLE Peripheral。 Central 和 Peripheral 通過 **GATT 特征&#xff08;Characteristic&#xff09;**交互&#xff1a;讀&#xff08;Read&#xff09;&#x…

JavaSE丨集合框架入門(二):從 0 掌握 Set 集合

這節我們接著學習 Set 集合。一、Set 集合1.1 Set 概述java.util.Set 接口繼承了 Collection 接口&#xff0c;是常用的一種集合類型。 相對于之前學習的List集合&#xff0c;Set集合特點如下&#xff1a;除了具有 Collection 集合的特點&#xff0c;還具有自己的一些特點&…

金屬結構疲勞壽命預測與健康監測技術—— 融合能量法、紅外熱像技術與深度學習的前沿實踐

理論基礎與核心方法 疲勞經典理論及其瓶頸 1.1.疲勞失效的微觀與宏觀機理&#xff1a; 裂紋萌生、擴展與斷裂的物理過程。 1.2.傳統方法的回顧與評析。 1.3.引出核心問題&#xff1a;是否存在一個更具物理意義、能統一描述疲勞全過程&#xff08;萌生與擴展&#xff09;且試驗量…

【貪心算法】day4

&#x1f4dd;前言說明&#xff1a; 本專欄主要記錄本人的貪心算法學習以及LeetCode刷題記錄&#xff0c;按專題劃分每題主要記錄&#xff1a;&#xff08;1&#xff09;本人解法 本人屎山代碼&#xff1b;&#xff08;2&#xff09;優質解法 優質代碼&#xff1b;&#xff…

AI 與腦機接口的交叉融合:當機器 “讀懂” 大腦信號,醫療將迎來哪些變革?

一、引言&#xff08;一&#xff09;AI 與腦機接口技術的發展現狀AI 的崛起與廣泛應用&#xff1a;近年來&#xff0c;人工智能&#xff08;AI&#xff09;技術迅猛發展&#xff0c;已廣泛滲透至各個領域。從圖像識別、自然語言處理到智能決策系統&#xff0c;AI 展現出強大的數…

uniapp vue3 canvas實現手寫簽名

userSign.vue <template><view class"signature"><view class"btn-box" v-if"orientation abeam"><button click"clearClick">重簽</button><button click"finish">完成簽名</butt…

頁面跳轉html

實現流程結構搭建&#xff08;HTML&#xff09;創建側邊欄容器&#xff0c;通過列表或 div 元素定義導航項&#xff0c;每個項包含圖標&#xff08;可使用字體圖標庫如 Font Awesome&#xff09;和文字&#xff0c;為后續點擊交互預留事件觸發點。樣式設計&#xff08;CSS&…

Spring Boot自動裝配機制的原理

文章目錄一、自動裝配的核心觸發點&#xff1a;SpringBootApplication二、EnableAutoConfiguration的作用&#xff1a;導入自動配置類三、自動配置類的加載&#xff1a;SpringFactoriesLoader四、自動配置類的條件篩選&#xff1a;Conditional注解五、自動配置的完整流程六、自…

(未完結)階段小總結(一)——大數據與Java

jdk8-21特性核心特征&#xff1a;&#xff08;8&#xff09;lambda&#xff0c;stream api&#xff0c;optional&#xff0c;方法引用&#xff0c;函數接口&#xff0c;默認方法&#xff0c;新時間Api&#xff0c;函數式接口&#xff0c;并行流&#xff0c;ComletableFuture。&…