0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux內(nèi)核網(wǎng)絡(luò)擁塞控制算法的具體實(shí)現(xiàn)框架(一)

麥辣雞腿堡 ? 來源:技術(shù)簡說 ? 作者:董旭 ? 2023-07-28 11:32 ? 次閱讀

談起網(wǎng)絡(luò)擁塞控制,大家可能很熟悉八股文中的“加法增大“、”乘法減小“、”慢開始“、“擁塞避免”、“快重傳”、“快恢復(fù)”等概念。沒錯(cuò),這是一種經(jīng)典網(wǎng)絡(luò)擁塞控制算法的基礎(chǔ)理論,但在實(shí)際的實(shí)現(xiàn)時(shí)不同的擁塞控制算法,有很大差別。本文從Linux內(nèi)核源碼中學(xué)習(xí)網(wǎng)絡(luò)擁塞控制算法的具體實(shí)現(xiàn)框架。從當(dāng)前網(wǎng)絡(luò)擁塞控制算法的發(fā)展歷程上看,網(wǎng)絡(luò)擁塞控制算法的類型主要有以下四種:

基于丟包的擁塞控制算法,這類算法將丟包視為發(fā)生了網(wǎng)絡(luò)擁塞。采取緩慢的探測方式,逐漸增大擁塞窗口,當(dāng)出現(xiàn)丟包時(shí),將擁塞窗口減少,代表的算法有Tahoe、Reno、NewReno、BIC、Cubic等。

基于延時(shí)的擁塞控制算法,這類算法將延時(shí)增大視為發(fā)生了網(wǎng)絡(luò)擁塞,延時(shí)增大時(shí)減少擁塞窗口,延時(shí)減少時(shí)增大擁塞窗口,代表的算法有Vegas、Westwood等。

基于鏈路容量的擁塞控制算法,代表算法是BBR,其采用了另類的方式,不再使用丟包、延時(shí)等信號去衡量擁塞是否發(fā)生,而是直接對網(wǎng)絡(luò)建模來避免以及應(yīng)對真實(shí)的網(wǎng)絡(luò)擁塞。

基于學(xué)習(xí)的擁塞控制算法,這類算法也沒有特定的擁塞信號,一般是基于訓(xùn)練數(shù)據(jù)、評價(jià)函數(shù),通過機(jī)器學(xué)習(xí)生成網(wǎng)絡(luò)擁塞控制策略模型,代表算法有Remy、PCC、Aurora、DRL-CC、Orca等。

由于每類擁塞控制算法的核心理念有很大差別,關(guān)于每種算法的實(shí)現(xiàn)與原理在后續(xù)的文章中進(jìn)行呈現(xiàn)。

本次文章先對Linux內(nèi)核中網(wǎng)絡(luò)擁塞控制實(shí)現(xiàn)細(xì)節(jié)、大致框架,進(jìn)行分析和大概學(xué)習(xí)。在進(jìn)行正式的分析前先簡單梳理一下常識與概念:

什么是網(wǎng)絡(luò)擁塞:網(wǎng)絡(luò)擁塞是指在網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)量超過網(wǎng)絡(luò)鏈路或節(jié)點(diǎn)的處理能力,導(dǎo)致網(wǎng)絡(luò)延遲增加、丟包率升高和帶寬利用率下降的現(xiàn)象。

窗口(Window):如下圖的TCP協(xié)議頭中占據(jù)16位,用于接收端告訴發(fā)送端還有多少緩沖區(qū)可以接收數(shù)據(jù)。

圖片

滑動窗口、發(fā)送窗口:下圖所示黑色方框代表發(fā)送窗口?;瑒哟翱谥皇且环N形象的稱呼,即發(fā)送窗口一直移動從而達(dá)到發(fā)送新的數(shù)據(jù)的目的,如下圖當(dāng)接收到接收端發(fā)來的ACK數(shù)據(jù)包后發(fā)送窗口向右移動。圖中灰色的方框代表已經(jīng)發(fā)送且確認(rèn)的數(shù)據(jù),紅色代表已發(fā)送且剛剛確認(rèn)的數(shù)據(jù),正是因?yàn)閯倓偞_認(rèn)了5byte的數(shù)據(jù),才驅(qū)動發(fā)送窗口可以向右移動5個(gè)單位,使得序號52~56的數(shù)據(jù)(綠色方框,代表允許發(fā)送的待發(fā)送數(shù)據(jù))可以發(fā)送,當(dāng)37 ~51區(qū)間的數(shù)據(jù)(藍(lán)色方框,代表發(fā)送但未確認(rèn)的數(shù)據(jù)包)能夠被確認(rèn)時(shí),發(fā)送窗口才能向右滑動。發(fā)送窗口前方的數(shù)據(jù)(黃色方框,不允許發(fā)送的待發(fā)送數(shù)據(jù))只能等待發(fā)送窗窗口區(qū)間內(nèi)才能發(fā)送。TCP的滑動窗口是動態(tài)的,我們可以想象成小學(xué)常見的一個(gè)數(shù)學(xué)題,一個(gè)水池,體積V,每小時(shí)進(jìn)水量V1,出水量V2。當(dāng)水池滿了就不允許再注入了,如果有個(gè)液壓系統(tǒng)控制水池大小,那么就可以控制水的注入速率和量。這樣的水池就類似TCP的窗口。應(yīng)用根據(jù)自身的處理能力變化,通過本端TCP接收窗口大小控制來對對對端的發(fā)送窗口流量限制。圖片

擁塞窗口:上面介紹了發(fā)送窗口的概念,在TCP協(xié)議中有一個(gè)反映網(wǎng)絡(luò)傳輸能力的變量,叫做擁塞窗口(congestion
window),記作cwnd。發(fā)送端實(shí)際的發(fā)送窗口大小實(shí)際是為 接收端通告窗口 rwnd 與 擁塞窗口 cwnd 較小的那個(gè)值。

W=min(cwnd,rwnd)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1336

    瀏覽量

    40084
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207905
  • 網(wǎng)絡(luò)
    +關(guān)注

    關(guān)注

    14

    文章

    7389

    瀏覽量

    88211
收藏 人收藏

    評論

    相關(guān)推薦

    TCP協(xié)議技術(shù)之擁塞控制算法

    擁塞控制是在網(wǎng)絡(luò)層和傳輸層進(jìn)行的功能。在網(wǎng)絡(luò)層,擁塞控制可以通過路由
    的頭像 發(fā)表于 02-03 17:06 ?1555次閱讀
    TCP協(xié)議技術(shù)之<b class='flag-5'>擁塞</b><b class='flag-5'>控制</b><b class='flag-5'>算法</b>

    Linux內(nèi)核網(wǎng)絡(luò)的TCP傳輸控制塊相關(guān)資料分享

    1、Linux內(nèi)核網(wǎng)絡(luò)之傳輸層接收消息簡析在傳輸層發(fā)送消息時(shí),TCP發(fā)送出去消息后,會跟蹤這些數(shù)據(jù)包,直到得到對方的確認(rèn)為止。對于接收方來講,當(dāng)收到個(gè)報(bào)文段時(shí),其會根據(jù)情況把這些數(shù)據(jù)包添加到接收
    發(fā)表于 06-21 16:53

    基于衛(wèi)星網(wǎng)絡(luò)的TCP擁塞控制算法

    分析衛(wèi)星網(wǎng)絡(luò)的特點(diǎn)和現(xiàn)有慢啟動算法的不足,提出種使擁塞窗口平滑增長的慢啟動算法。引入門限因子和粒度因子
    發(fā)表于 03-20 13:54 ?18次下載

    Linux中傳輸控制協(xié)議的擁塞控制分析

    TCP(transport control protocol)的性能在很大程度上取決于其所使用的擁塞控制算法。傳統(tǒng)的TCP在實(shí)現(xiàn)多種擁塞
    發(fā)表于 06-17 07:43 ?21次下載

    高速網(wǎng)絡(luò)中TCP擁塞控制算法的研究

    針對TCP 在高速網(wǎng)絡(luò)中的缺陷,提出了改進(jìn)的BIC TCP 擁塞控制算法。優(yōu)化算法通過監(jiān)控鏈路緩存的變化,調(diào)整探索可用帶寬過程中的
    發(fā)表于 09-17 10:18 ?15次下載

    嵌入式LINUX內(nèi)核網(wǎng)絡(luò)棧(源代碼)

    本文選擇 LINUX-1.2.13 內(nèi)核所包含的網(wǎng)絡(luò)部分代碼分析(注意網(wǎng)絡(luò)部分代碼與內(nèi)核代碼的演變是分離的,如
    發(fā)表于 05-12 10:39 ?57次下載
    嵌入式<b class='flag-5'>LINUX</b><b class='flag-5'>內(nèi)核網(wǎng)絡(luò)</b>棧(源代碼)

    基于模糊控制和壓縮感知的無線傳感網(wǎng)絡(luò)擁塞算法

    針對無線傳感網(wǎng)絡(luò)(WSN)的擁塞問題,提出了種將模糊控制和壓縮感知(cs)技術(shù)相結(jié)合來緩解無線傳感網(wǎng)絡(luò)
    發(fā)表于 01-03 09:59 ?0次下載
    基于模糊<b class='flag-5'>控制</b>和壓縮感知的無線傳感<b class='flag-5'>網(wǎng)絡(luò)</b><b class='flag-5'>擁塞</b><b class='flag-5'>算法</b>

    具有預(yù)測與自我調(diào)節(jié)能力的擁塞控制算法

    隨著網(wǎng)絡(luò)技術(shù)的日益發(fā)展,計(jì)算機(jī)網(wǎng)絡(luò)擁塞問題已極大地影響了用戶的使用體驗(yàn)與數(shù)據(jù)傳遞。單地提高硬件設(shè)備的投入并不能持續(xù)地防止網(wǎng)絡(luò)
    發(fā)表于 01-18 16:18 ?0次下載
    具有預(yù)測與自我調(diào)節(jié)能力的<b class='flag-5'>擁塞</b><b class='flag-5'>控制</b><b class='flag-5'>算法</b>

    防止網(wǎng)絡(luò)擁塞現(xiàn)象的TCP擁塞控制算法

    ,近些年又出現(xiàn)了選擇性應(yīng)答(selectiveacknowledgement,SACK)算法,還有其他方面的大大小小的改進(jìn),成為網(wǎng)絡(luò)研究的個(gè)熱點(diǎn)。 TCP的擁塞
    的頭像 發(fā)表于 10-29 14:54 ?2354次閱讀

    如何使用Linux內(nèi)核實(shí)現(xiàn)USB驅(qū)動程序框架

    Linux內(nèi)核提供了完整的USB驅(qū)動程序框架。USB總線采用樹形結(jié)構(gòu),在條總線上只能有唯的主機(jī)設(shè)備。
    發(fā)表于 11-06 17:59 ?19次下載
    如何使用<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核實(shí)現(xiàn)</b>USB驅(qū)動程序<b class='flag-5'>框架</b>

    如何用eBPF寫TCP擁塞控制算法?

    是兩個(gè)痛點(diǎn): 內(nèi)核越來越策略化。 內(nèi)核接口不穩(wěn)定。 分別簡單說下。 所謂內(nèi)核策略化就是說越來越多的?靈巧的算法?,?小tricks?等靈活
    的頭像 發(fā)表于 12-26 09:44 ?1589次閱讀

    伙伴算法如何才能在Linux內(nèi)核實(shí)現(xiàn)應(yīng)用及其改進(jìn)

    伙伴算法是內(nèi)存管理的比較常用的算法。以Linux內(nèi)存管理為基礎(chǔ),闡述了Linux內(nèi)核中關(guān)于伙
    發(fā)表于 03-04 14:37 ?14次下載
    伙伴<b class='flag-5'>算法</b>如何才能在<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>中<b class='flag-5'>實(shí)現(xiàn)</b>應(yīng)用及其改進(jìn)

    Linux內(nèi)核配置的網(wǎng)絡(luò)資料說明

    Linux不止在上網(wǎng)時(shí)候才會用到網(wǎng)絡(luò)功能’些程序在單機(jī)時(shí)候也會需要內(nèi)核網(wǎng)絡(luò)支持。 X server是個(gè)典型的例子。如果你是從
    發(fā)表于 03-12 10:33 ?14次下載

    Linux內(nèi)核網(wǎng)絡(luò)擁塞控制算法實(shí)現(xiàn)框架(二)

    從上面的概念中可以得知,擁塞窗口可以間接反映網(wǎng)絡(luò)的狀況,進(jìn)而去限制發(fā)送窗口的大小。擁塞窗口作為網(wǎng)絡(luò)擁塞
    的頭像 發(fā)表于 07-28 11:34 ?696次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核網(wǎng)絡(luò)</b><b class='flag-5'>擁塞</b><b class='flag-5'>控制</b><b class='flag-5'>算法</b>的<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>框架</b>(二)

    Linux內(nèi)核網(wǎng)絡(luò)擁塞控制算法實(shí)現(xiàn)框架(三)

    下面看個(gè)特別重要的框架,也可以稱為是擁塞控制引擎,如下結(jié)構(gòu)體所示, tcp_congestion_ops描述了
    的頭像 發(fā)表于 07-28 11:38 ?843次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核網(wǎng)絡(luò)</b><b class='flag-5'>擁塞</b><b class='flag-5'>控制</b><b class='flag-5'>算法</b>的<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>框架</b>(三)