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

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

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

TCP協(xié)議擁塞控制的滑動(dòng)窗口協(xié)議解析

西西 ? 來(lái)源: Chinaunix ? 作者:windhawkgyang ? 2020-10-08 17:04 ? 次閱讀

TCP協(xié)議作為一個(gè)可靠的面向流的傳輸協(xié)議,其可靠性和流量控制由滑動(dòng)窗口協(xié)議保證,而擁塞控制則由控制窗口結(jié)合一系列的控制算法實(shí)現(xiàn)。

一、滑動(dòng)窗口協(xié)議

關(guān)于這部分自己不曉得怎么敘述才好,因?yàn)槔斫獾牟糠指啵旅婢陀米约旱睦斫鈦?lái)介紹下TCP的精髓:滑動(dòng)窗口協(xié)議。

所謂滑動(dòng)窗口協(xié)議,自己理解有兩點(diǎn):1. “窗口”對(duì)應(yīng)的是一段可以被發(fā)送者發(fā)送的字節(jié)序列,其連續(xù)的范圍稱之為“窗口”;2. “滑動(dòng)”則是指這段“允許發(fā)送的范圍”是可以隨著發(fā)送的過(guò)程而變化的,方式就是按順序“滑動(dòng)”。在引入一個(gè)例子來(lái)說(shuō)這個(gè)協(xié)議之前,我覺(jué)得很有必要先了解以下前提:

-1. TCP協(xié)議的兩端分別為發(fā)送者A和接收者B,由于是全雙工協(xié)議,因此A和B應(yīng)該分別維護(hù)著一個(gè)獨(dú)立的發(fā)送緩沖區(qū)和接收緩沖區(qū),由于對(duì)等性(A發(fā)B收和B發(fā)A收),我們以A發(fā)送B接收的情況作為例子;

-2. 發(fā)送窗口是發(fā)送緩存中的一部分,是可以被TCP協(xié)議發(fā)送的那部分,其實(shí)應(yīng)用層需要發(fā)送的所有數(shù)據(jù)都被放進(jìn)了發(fā)送者的發(fā)送緩沖區(qū);

-3. 發(fā)送窗口中相關(guān)的有四個(gè)概念:已發(fā)送并收到確認(rèn)的數(shù)據(jù)(不再發(fā)送窗口和發(fā)送緩沖區(qū)之內(nèi))、已發(fā)送但未收到確認(rèn)的數(shù)據(jù)(位于發(fā)送窗口之中)、允許發(fā)送但尚未發(fā)送的數(shù)據(jù)以及發(fā)送窗口外發(fā)送緩沖區(qū)內(nèi)暫時(shí)不允許發(fā)送的數(shù)據(jù);

-4. 每次成功發(fā)送數(shù)據(jù)之后,發(fā)送窗口就會(huì)在發(fā)送緩沖區(qū)中按順序移動(dòng),將新的數(shù)據(jù)包含到窗口中準(zhǔn)備發(fā)送;

TCP建立連接的初始,B會(huì)告訴A自己的接收窗口大小,比如為‘20’:

字節(jié)31-50為發(fā)送窗口

A發(fā)送11個(gè)字節(jié)后,發(fā)送窗口位置不變,B接收到了亂序的數(shù)據(jù)分組:

只有當(dāng)A成功發(fā)送了數(shù)據(jù),即發(fā)送的數(shù)據(jù)得到了B的確認(rèn)之后,才會(huì)移動(dòng)滑動(dòng)窗口離開(kāi)已發(fā)送的數(shù)據(jù);同時(shí)B則確認(rèn)連續(xù)的數(shù)據(jù)分組,對(duì)于亂序的分組則先接收下來(lái),避免網(wǎng)絡(luò)重復(fù)傳遞:

二、流量控制

流量控制方面主要有兩個(gè)要點(diǎn)需要掌握。一是TCP利用滑動(dòng)窗口實(shí)現(xiàn)流量控制的機(jī)制;二是如何考慮流量控制中的傳輸效率。

1. 流量控制

所謂流量控制,主要是接收方傳遞信息給發(fā)送方,使其不要發(fā)送數(shù)據(jù)太快,是一種端到端的控制。主要的方式就是返回的ACK中會(huì)包含自己的接收窗口的大小,并且利用大小來(lái)控制發(fā)送方的數(shù)據(jù)發(fā)送:

這里面涉及到一種情況,如果B已經(jīng)告訴A自己的緩沖區(qū)已滿,于是A停止發(fā)送數(shù)據(jù);等待一段時(shí)間后,B的緩沖區(qū)出現(xiàn)了富余,于是給A發(fā)送報(bào)文告訴A我的rwnd大小為400,但是這個(gè)報(bào)文不幸丟失了,于是就出現(xiàn)A等待B的通知||B等待A發(fā)送數(shù)據(jù)的死鎖狀態(tài)。為了處理這種問(wèn)題,TCP引入了持續(xù)計(jì)時(shí)器(Persistence timer),當(dāng)A收到對(duì)方的零窗口通知時(shí),就啟用該計(jì)時(shí)器,時(shí)間到則發(fā)送一個(gè)1字節(jié)的探測(cè)報(bào)文,對(duì)方會(huì)在此時(shí)回應(yīng)自身的接收窗口大小,如果結(jié)果仍未0,則重設(shè)持續(xù)計(jì)時(shí)器,繼續(xù)等待。

2. 傳遞效率

一個(gè)顯而易見(jiàn)的問(wèn)題是:?jiǎn)蝹€(gè)發(fā)送字節(jié)單個(gè)確認(rèn),和窗口有一個(gè)空余即通知發(fā)送方發(fā)送一個(gè)字節(jié),無(wú)疑增加了網(wǎng)絡(luò)中的許多不必要的報(bào)文(請(qǐng)想想為了一個(gè)字節(jié)數(shù)據(jù)而添加的40字節(jié)頭部吧!),所以我們的原則是盡可能一次多發(fā)送幾個(gè)字節(jié),或者窗口空余較多的時(shí)候通知發(fā)送方一次發(fā)送多個(gè)字節(jié)。對(duì)于前者我們廣泛使用Nagle算法,即:

*1. 若發(fā)送應(yīng)用進(jìn)程要把發(fā)送的數(shù)據(jù)逐個(gè)字節(jié)地送到TCP的發(fā)送緩存,則發(fā)送方就把第一個(gè)數(shù)據(jù)字節(jié)先發(fā)送出去,把后面的字節(jié)先緩存起來(lái);

*2. 當(dāng)發(fā)送方收到第一個(gè)字節(jié)的確認(rèn)后(也得到了網(wǎng)絡(luò)情況和對(duì)方的接收窗口大?。?,再把緩沖區(qū)的剩余字節(jié)組成合適大小的報(bào)文發(fā)送出去;

*3. 當(dāng)?shù)竭_(dá)的數(shù)據(jù)已達(dá)到發(fā)送窗口大小的一半或以達(dá)到報(bào)文段的最大長(zhǎng)度時(shí),就立即發(fā)送一個(gè)報(bào)文段;

對(duì)于后者我們往往的做法是讓接收方等待一段時(shí)間,或者接收方獲得足夠的空間容納一個(gè)報(bào)文段或者等到接受緩存有一半空閑的時(shí)候,再通知發(fā)送方發(fā)送數(shù)據(jù)。

三、擁塞控制

網(wǎng)絡(luò)中的鏈路容量和交換結(jié)點(diǎn)中的緩存和處理機(jī)都有著工作的極限,當(dāng)網(wǎng)絡(luò)的需求超過(guò)它們的工作極限時(shí),就出現(xiàn)了擁塞。擁塞控制就是防止過(guò)多的數(shù)據(jù)注入到網(wǎng)絡(luò)中,這樣可以使網(wǎng)絡(luò)中的路由器或鏈路不致過(guò)載。常用的方法就是:

1. 慢開(kāi)始、擁塞控制

2. 快重傳、快恢復(fù)

一切的基礎(chǔ)還是慢開(kāi)始,這種方法的思路是這樣的:

-1. 發(fā)送方維持一個(gè)叫做“擁塞窗口”的變量,該變量和接收端口共同決定了發(fā)送者的發(fā)送窗口;

-2. 當(dāng)主機(jī)開(kāi)始發(fā)送數(shù)據(jù)時(shí),避免一下子將大量字節(jié)注入到網(wǎng)絡(luò),造成或者增加擁塞,選擇發(fā)送一個(gè)1字節(jié)的試探報(bào)文;

-3. 當(dāng)收到第一個(gè)字節(jié)的數(shù)據(jù)的確認(rèn)后,就發(fā)送2個(gè)字節(jié)的報(bào)文;

-4. 若再次收到2個(gè)字節(jié)的確認(rèn),則發(fā)送4個(gè)字節(jié),依次遞增2的指數(shù)級(jí);

-5. 最后會(huì)達(dá)到一個(gè)提前預(yù)設(shè)的“慢開(kāi)始門限”,比如24,即一次發(fā)送了24個(gè)分組,此時(shí)遵循下面的條件判定:

*1. cwnd 《 ssthresh, 繼續(xù)使用慢開(kāi)始算法;

*2. cwnd 》 ssthresh,停止使用慢開(kāi)始算法,改用擁塞避免算法;

*3. cwnd = ssthresh,既可以使用慢開(kāi)始算法,也可以使用擁塞避免算法;

-6. 所謂擁塞避免算法就是:每經(jīng)過(guò)一個(gè)往返時(shí)間RTT就把發(fā)送方的擁塞窗口+1,即讓擁塞窗口緩慢地增大,按照線性規(guī)律增長(zhǎng);

-7. 當(dāng)出現(xiàn)網(wǎng)絡(luò)擁塞,比如丟包時(shí),將慢開(kāi)始門限設(shè)為原先的一半,然后將cwnd設(shè)為1,執(zhí)行慢開(kāi)始算法(較低的起點(diǎn),指數(shù)級(jí)增長(zhǎng));

上述方法的目的是在擁塞發(fā)生時(shí)循序減少主機(jī)發(fā)送到網(wǎng)絡(luò)中的分組數(shù),使得發(fā)生擁塞的路由器有足夠的時(shí)間把隊(duì)列中積壓的分組處理完畢。慢開(kāi)始和擁塞控制算法常常作為一個(gè)整體使用,而快重傳和快恢復(fù)則是為了減少因?yàn)閾砣麑?dǎo)致的數(shù)據(jù)包丟失帶來(lái)的重傳時(shí)間,從而避免傳遞無(wú)用的數(shù)據(jù)到網(wǎng)絡(luò)??熘貍鞯臋C(jī)制是:

-1. 接收方建立這樣的機(jī)制,如果一個(gè)包丟失,則對(duì)后續(xù)的包繼續(xù)發(fā)送針對(duì)該包的重傳請(qǐng)求;

-2. 一旦發(fā)送方接收到三個(gè)一樣的確認(rèn),就知道該包之后出現(xiàn)了錯(cuò)誤,立刻重傳該包;

-3. 此時(shí)發(fā)送方開(kāi)始執(zhí)行“快恢復(fù)”算法:

*1. 慢開(kāi)始門限減半;

*2. cwnd設(shè)為慢開(kāi)始門限減半后的數(shù)值;

*3. 執(zhí)行擁塞避免算法(高起點(diǎn),線性增長(zhǎng));

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

    關(guān)注

    8

    文章

    1324

    瀏覽量

    78756
  • TCP協(xié)議
    +關(guān)注

    關(guān)注

    1

    文章

    89

    瀏覽量

    12046
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    深度解析TCP與UDP協(xié)議

    計(jì)算機(jī)與網(wǎng)絡(luò)設(shè)備要相互通信,它們必須遵循一種共同的方法或標(biāo)準(zhǔn)。對(duì)于不同硬件平臺(tái)和操作系統(tǒng)之間的交互而言,這種共同遵循的規(guī)范尤為關(guān)鍵。我們將這一系列指導(dǎo)通信過(guò)程的規(guī)則稱為“協(xié)議”。TCP 和 UDP
    的頭像 發(fā)表于 09-02 14:53 ?179次閱讀
    深度<b class='flag-5'>解析</b><b class='flag-5'>TCP</b>與UDP<b class='flag-5'>協(xié)議</b>

    一文了解TCP/IP協(xié)議

    TCP/IP協(xié)議是現(xiàn)代計(jì)算機(jī)網(wǎng)絡(luò)通信的基礎(chǔ),是互聯(lián)網(wǎng)及局域網(wǎng)廣泛使用的一套協(xié)議。TCP/IP協(xié)議集包括許多
    的頭像 發(fā)表于 08-07 15:38 ?367次閱讀
    一文了解<b class='flag-5'>TCP</b>/IP<b class='flag-5'>協(xié)議</b>

    華納云:TCP IP協(xié)議的發(fā)展和優(yōu)勢(shì)

    TCP/IP(Transmission Control Protocol/Internet Protocol,傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議)是互聯(lián)網(wǎng)和現(xiàn)代計(jì)算機(jī)網(wǎng)絡(luò)的基礎(chǔ)
    的頭像 發(fā)表于 07-25 16:49 ?248次閱讀

    TCP IP協(xié)議屬性設(shè)置中的IP配置

    的分配、子網(wǎng)掩碼的設(shè)置、網(wǎng)關(guān)和DNS的配置等方面,旨在為網(wǎng)絡(luò)工程師和IT專業(yè)人士提供科學(xué)、學(xué)術(shù)且專業(yè)的指導(dǎo)。 1. TCP/IP協(xié)議概述 TCP/IP(傳輸控制
    的頭像 發(fā)表于 07-23 10:10 ?314次閱讀

    plc協(xié)議解析網(wǎng)關(guān)是什么

    PLC協(xié)議解析網(wǎng)關(guān)是一種專門用于工業(yè)自動(dòng)化領(lǐng)域的設(shè)備,它的主要功能是實(shí)現(xiàn)不同通信協(xié)議之間的轉(zhuǎn)換和解析,以便于不同類型的PLC、傳感器、執(zhí)行器等設(shè)備能夠互相通信和數(shù)據(jù)交換。 在工業(yè)
    的頭像 發(fā)表于 07-12 15:41 ?191次閱讀
    plc<b class='flag-5'>協(xié)議</b><b class='flag-5'>解析</b>網(wǎng)關(guān)是什么

    TCP協(xié)議中的擁塞控制機(jī)制與網(wǎng)絡(luò)穩(wěn)定性

    TCP協(xié)議中的擁塞控制機(jī)制與網(wǎng)絡(luò)穩(wěn)定性的深度探討 隨著互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)絡(luò)流量呈現(xiàn)爆炸式增長(zhǎng),網(wǎng)絡(luò)擁塞問(wèn)題逐漸凸顯。為了維護(hù)網(wǎng)絡(luò)的穩(wěn)定運(yùn)行
    的頭像 發(fā)表于 04-19 16:42 ?277次閱讀

    mqtt協(xié)議tcp協(xié)議區(qū)別

    MQTT協(xié)議TCP協(xié)議在設(shè)計(jì)和應(yīng)用上存在以下主要區(qū)別: 1. 起源與設(shè)計(jì):MQTT協(xié)議誕生于1999年互聯(lián)網(wǎng)初期,而TCP
    的頭像 發(fā)表于 04-01 09:15 ?1368次閱讀

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

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

    TCP協(xié)議技術(shù)之自適應(yīng)重傳

    自適應(yīng)重傳是TCP協(xié)議中的一種擁塞控制機(jī)制,旨在通過(guò)智能的方式處理網(wǎng)絡(luò)擁塞,并進(jìn)行相應(yīng)的數(shù)據(jù)重傳,以提高網(wǎng)絡(luò)的可靠性和性能。
    的頭像 發(fā)表于 02-03 17:03 ?1160次閱讀
    <b class='flag-5'>TCP</b><b class='flag-5'>協(xié)議</b>技術(shù)之自適應(yīng)重傳

    如何選擇傳輸層協(xié)議?TCP和UDP的優(yōu)缺點(diǎn)和適用場(chǎng)合

    和可靠性至關(guān)重要。本文將詳細(xì)介紹TCP和UDP的優(yōu)缺點(diǎn)以及適用場(chǎng)合。 1. TCP的優(yōu)點(diǎn)和適用場(chǎng)合: TCP是一種可靠的、面向連接的傳輸層協(xié)議,它提供了重發(fā)機(jī)制、數(shù)據(jù)丟失檢測(cè)和
    的頭像 發(fā)表于 12-11 11:42 ?798次閱讀

    TCP傳輸控制協(xié)議知識(shí)科普拓展

    傳輸控制協(xié)議TCP,Transmission Control Protocol)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,由IETF的RFC 793定義。
    的頭像 發(fā)表于 11-27 17:46 ?840次閱讀
    <b class='flag-5'>TCP</b>傳輸<b class='flag-5'>控制</b><b class='flag-5'>協(xié)議</b>知識(shí)科普拓展

    TCP 協(xié)議的運(yùn)作機(jī)制

    今天我們將 從穩(wěn)定性角度深挖 TCP 協(xié)議的運(yùn)作機(jī)制 。 如今,大半個(gè)互聯(lián)網(wǎng)都建立在 TCP 協(xié)議之上,我們使用的 HTTP 協(xié)議、消息隊(duì)列
    的頭像 發(fā)表于 11-13 11:34 ?478次閱讀
    <b class='flag-5'>TCP</b> <b class='flag-5'>協(xié)議</b>的運(yùn)作機(jī)制

    TCP 協(xié)議深度解析

    從字面上來(lái)看,很多人會(huì)認(rèn)為 TCP/IP 是 TCP、IP 這兩種協(xié)議,實(shí)際上TCP/IP 協(xié)議族指的是在 IP
    的頭像 發(fā)表于 11-09 11:19 ?729次閱讀
    <b class='flag-5'>TCP</b> <b class='flag-5'>協(xié)議</b>深度<b class='flag-5'>解析</b>

    TCP協(xié)議詳細(xì)解析

    TCPTCP/IP協(xié)議族中一個(gè)最核心的協(xié)議,它向下使用網(wǎng)絡(luò)層IP協(xié)議,向上為應(yīng)用層HTTP、FTP、SMTP、POP3、SSH、Telne
    的頭像 發(fā)表于 11-03 09:14 ?3579次閱讀
    <b class='flag-5'>TCP</b><b class='flag-5'>協(xié)議</b>詳細(xì)<b class='flag-5'>解析</b>

    TCP/IP協(xié)議和OPC協(xié)議的區(qū)別

    隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,網(wǎng)絡(luò)通信已經(jīng)成為現(xiàn)代工業(yè)自動(dòng)化控制系統(tǒng)中不可或缺的一部分。在眾多的網(wǎng)絡(luò)通信協(xié)議中,傳輸控制協(xié)議TCP)和網(wǎng)際
    的頭像 發(fā)表于 10-20 17:34 ?3973次閱讀