1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        【漫話】三分鐘基礎(chǔ):什么是確認(rèn)重傳機(jī)制?

        共 3075字,需瀏覽 7分鐘

         ·

        2019-12-21 23:24

        來源公眾號:苦逼的碼農(nóng)
        作者:帥地
        625fdba4c83608b9cd358b9ac8b76f47.webp
        b7c58d4b8e3bc6e96edbe1bfd586406e.webp
        8eacb9b576e553d9bc9bcbf38aff874a.webp
        小白:你知道嗎?數(shù)據(jù)在傳輸?shù)臅r候是分割成一小塊一小塊傳輸?shù)?,我們把這一小塊的數(shù)據(jù)稱之為一個分組。我們在傳輸這塊分組的時候,主要面臨兩個問題。


        1、這個分組在傳輸?shù)倪^程中,由于在信道傳輸過程中,收到干擾,導(dǎo)致這個分組到達(dá)目的地之后出現(xiàn)了差錯,例如分組里面的二進(jìn)制位1變成了0,0變成了1。

        2、分組還沒傳輸?shù)侥康牡兀蛠G失了,我們也把這種情況稱之為丟包。

        接下來我們先來談?wù)劦谝环N情況吧,即分組傳到目的地之后出現(xiàn)了差錯。

        這里我們先假設(shè)計算機(jī)A給計算機(jī)B發(fā)送分組數(shù)據(jù)

        71b18cdf59ff1285f2cc2e3c759d6999.webp
        24562f23798b31c9bcd19e9a1a3ff39d.webp
        5374cfb4edbd35ead16fca3b850fc017.webp
        c1865806b2d95035feea0b7f8e3f7a16.webp
        5ed06591bcffa635ba791980216f9c58.webp在這里插入圖片描述
        一禪:如果沒有差錯的話,計算機(jī)B就給計算機(jī)A發(fā)送一個ACK分組,告訴對方,數(shù)據(jù)正確無誤。如果出現(xiàn)差錯的話,就給對方發(fā)送一個NAK分組,告訴對方,分組數(shù)據(jù)出現(xiàn)了差錯。


        當(dāng)計算機(jī)A收到接受方的反饋之后,如果收到的是ACK分組,那么就繼續(xù)發(fā)送下一個分組數(shù)據(jù)。如果收到的是NAK分組,那么就重新傳輸這個分組。

        6fbdadf50071ec0189845e4e2530e80d.webp
        5c604bca926b2115321c6f1f36613ed6.webp
        2d2c6bc0f60cfae345b8544bcc703b12.webp
        669d62232c0c26b24ad0976d0d66cf1d.webp在這里插入圖片描述
        d2701712206fcc6400b35703b0e9bf53.webp在這里插入圖片描述
        小白:這時就會出現(xiàn)了混亂,就相當(dāng)于兩個人A,B在對話。


        A : 傳輸給你一個分組

        B :你發(fā)的是啥,可以重發(fā)一次嗎?

        A :你發(fā)的又是啥?可以重發(fā)一次嗎?

        B :你發(fā)的又是啥?可以重發(fā)一次嗎

        ……

        進(jìn)去無限混亂之中

        8a403216c1dda710840898b9d7e89798.webp在這里插入圖片描述
        ed14ca81472bf2f415f1528555d8df8f.webp在這里插入圖片描述
        b010289deda826817bd9670c95d162df.webp
        小白:法子倒是不錯,不過如果分組出現(xiàn)大量差錯,會讓校驗(yàn)碼變的很難設(shè)計的,而且校驗(yàn)碼屬于與正文內(nèi)容無關(guān)的數(shù)據(jù),占了太多比特位的話,會降低傳輸效率。還有其他法子嗎?
        decd5fb327bfbeebfa5a01fce8643d82.webp
        ca68d4d509a4781dfbe9063b781204c7.webp
        46c6b4ae46138917b95606f90a7b27f5.webp
        3da004d54d106b27e1dfe32c3df03167.webp
        小白:我們可以給每個分組添加一個序號啊,這樣就可以知道是重傳的分組還是新的分組了。


        如果B收到的分組沒出差錯,這時又收到一個序號相同的分組,這時B就知道這個分組是屬于重傳的分組了,這時B就把這個重傳的分組丟棄。

        6467b8f05b823156527b427c329cddc2.webp在這里插入圖片描述

        情況二:分組丟失時的問題處理

        4794f277cffa947f092a627711e7ad87.webp在這里插入圖片描述
        一禪:哈哈,我知道怎么解決,可以采取和分組差錯類似的方法,如果A遲遲沒有收到B的反饋,A就可以認(rèn)為這個分組丟失了,重新發(fā)送。


        所以我們每次發(fā)送分組的時候,需要給該分組設(shè)置一個定時器

        166bb1b219135d50bc52c5ca1e0222d1.webp在這里插入圖片描述
        小白:腦子轉(zhuǎn)的挺快啊。不過你知道嗎?我們上面談的那些,都是A發(fā)送一個分組,收到B的反饋之后,再發(fā)送下一個分組。你不覺得這種方法很浪費(fèi)信道的資源嗎?
        606d6ae268105e45611670425c8bd703.webp
        698265c17c824defe09610c697fb4ed8.webp
        cec7388127c17217ba33455d272f9ddd.webp
        3f9d57ce50abe8611fe54a8bf79f3acb.webp
        7072f7ec106fd532ab9ca9259ef895ab.webp

        這里先說明一下,如果同時發(fā)送多個分組時,最需要處理的問題就是接受方收到分組時,并非按照順序收到分組的,有可能序號小的分組先達(dá)到,這時就會出現(xiàn)了亂序。

        回退N步協(xié)議(GBN)

        在回退N步法中允許發(fā)送多個分組而不需要等待確認(rèn),但它也受限于在流水線中未確認(rèn)的分組數(shù)不能超過某個最大允許數(shù)N。如下圖,我們將基序號定義為最早的未確認(rèn)分組的序號,將下一個序號(nextseqnum)定義為最小的未使用序號(即下一個待發(fā)送分組)。

        4db406f76511b8a5615f958c0f30a840.webp在這里插入圖片描述
        此時我們可以將序號分成4段。在[0, base-1]段內(nèi)的序號對應(yīng)已發(fā)送并且已經(jīng)確認(rèn)的分組序號,[base,nextseqnum]段內(nèi)對應(yīng)已經(jīng)發(fā)送但未確認(rèn)的分組序號,[nextseqnum, base+N-1]段內(nèi)表示即將要被發(fā)送的分組序號。而那些大于base+N的序號目前還不能使用,直到當(dāng)前流水線中未被確認(rèn)的分組得到確認(rèn),窗口整體向右移動之后,才能夠被使用。


        所以,我們常把N稱之為窗口長度,由于窗口在序號范圍內(nèi)移動,也被GBN協(xié)議稱之為滑動窗口協(xié)議。

        對于GBN協(xié)議,計算機(jī)A(發(fā)送方)需要響應(yīng)以下兩個事件:
        1、收到一個ACK:在GBN協(xié)議中,對序號為n的分組的確認(rèn)采取累計確認(rèn)的方式。也就是說,當(dāng)A收到序號為n的分組時,表明分組n以及n之前的分組已經(jīng)被B正確接受了。

        2、超時事件:當(dāng)久久沒有收到ACK時,A就認(rèn)為它發(fā)送的分組已經(jīng)丟失了,這時A會重傳所有已發(fā)送但還未被確認(rèn)的分組。這個時候需要注意的是,并不是為每個分組設(shè)置一個定時器,而是在序號[base,nextseqnum-1]中,設(shè)置一個定時器,當(dāng)base發(fā)送的那一刻,就開始計時,當(dāng)收到一個ACK時,則刷新重新開始計時。

        計算機(jī)B(接收方)則需要處理一下事件:

        如果一個序號為n的分組被正確收到,并且按序(所謂按序就是指n-1的分組也已經(jīng)收到了),則B為分組n發(fā)送一個ACK,否則,丟棄該分組,并且為最近按序接收的分組重新發(fā)送ACK。

        接收方的這種處理方式,意味著如果n被正確交付,則意味著比n小的所有分組也被正確交付了。

        109b4db17308414ddd27c81df38e6dd0.webp在這里插入圖片描述
        f5fa58b5a6b50fb5b3c3882b8e7c06f4.webp在這里插入圖片描述
        116344c0a0a60afad9f0d1ee331d2e9d.webp在這里插入圖片描述
        438e7497be989dd180a0f00c5899b17d.webp
        2b962c6fc7cadf1d4fce4c29c2552024.webp在這里插入圖片描述
        c7ed05579d17468c22f9a6dea901d573.webp
        小白:你這個想法其實(shí)也是挺不錯的,不過如果分組n-1丟失了,那么按照GBN的重傳規(guī)則,這時n-1和n都會被重傳,這時之前緩存的n就沒啥用了。而且,我們?nèi)绻裯丟棄了,那么我們就不需要緩存任何失序的分組了,這樣可以讓我們的設(shè)計更加簡單哦。


        選擇重傳(SR)

        回退N步協(xié)議的缺點(diǎn)也是很明顯的,單個分組的差錯能夠引起GBN重傳大量的分組,而且許多分組根本就沒有必要重傳。例如我們發(fā)送的序號為0-100,萬一序號為1的分組出現(xiàn)了某些差錯,這會導(dǎo)致1-100的分組會被重傳,想想這是多么恐怖的事情啊。

        因此,出現(xiàn)了選擇重傳這種協(xié)議。所謂“選擇”,也就是有選擇著去重傳。

        不過選擇重傳和回退N步是很相似的,只是在選擇重傳中,接收方收到失序的分組時,會把它緩存起來,直到拼湊到分組按序,才把分組傳輸給上一層。而發(fā)送方會為每個分組設(shè)置一個定時器,這樣,只需要重傳那些沒有被接收方正確接收的分組就可以了。

        我來個例子吧。

        假設(shè)窗口長度N=6,這時A向B發(fā)送分組1-5。

        c8088bad8ba0127c7f0d0ac79a9019e5.webp在這里插入圖片描述
        當(dāng)A收到序號為3的ACK,則狀態(tài)如下:
        65d1fa562e4016b1abea281fe8be7289.webp在這里插入圖片描述
        注意,這個時候雖然序號3被確認(rèn)接收了,但窗口并不能向右移動一格。


        接下來受到序號為1的ACK,則:

        8cb124d8fae42225323db8a1e036261d.webp在這里插入圖片描述
        這個時候窗口才可以向右移動一格。注意,黃色的那些序號是可以繼續(xù)發(fā)送分組的,只是我沒有繼續(xù)填充發(fā)送而已。


        接著收到序號為2的分組。

        71b20dea62a5ad5b162741fd0063e6c1.webp在這里插入圖片描述
        這個時候窗口向右移動了兩個格。


        接著繼續(xù)這樣接收下去,如果還有分組沒發(fā)送的,就從nextseqnum開始填充發(fā)送…

        如果某個分組超時了,就重新傳輸這個分組。

        對于接收方B的窗口來說也差不多也一樣,在此不展開。接收方對于失序的分組緩存起來,直到所有丟失的分組全部被收到為止,再把這批分組按序交付給上一層。

        我在書上截了張完整的例子圖:

        fe0e4e9b9ee0fb765cdf781abcd61edd.webp
        de72e0b8058be25bc77f6db8e58de9f6.webp在這里插入圖片描述
        7fc4d62a433978e31e55a626ff42baa5.webp在這里插入圖片描述
        3436bb529fba1b02baf0a3496983e9dd.webp在這里插入圖片描述
        230c9ce52503ed0316f1626767c49b60.webp在這里插入圖片描述

        這樣,兩個完全陌生的計算機(jī)就可以就行可靠數(shù)據(jù)傳輸了。這也是可靠數(shù)據(jù)傳輸?shù)脑怼?/p>

        3c305bebdf66648ae3f2ea60c7b4f035.webp在這里插入圖片描述

        最后一點(diǎn)感想

        總感覺這篇文章講的好一般,感覺有點(diǎn)小啰嗦或者…..也不知道怎么說,本來我是想寫成那種一點(diǎn)一點(diǎn)引導(dǎo)出知識點(diǎn)的,不過在回退N步和選擇重傳中,有點(diǎn)不知道怎么引導(dǎo)。不過我會爭取在后面的文章講的更加通俗易懂。

        說實(shí)話,這篇文章其實(shí)算是比較簡單的幾個知識點(diǎn),不過我還是寫了好久,加上自己畫圖之列的就更加了,哈哈。主要是一直不知道怎么下手。不過就算花時間,我也會盡最大努力去寫。再次感謝讀者們的支持,在之后的文章里,應(yīng)該會數(shù)據(jù)結(jié)構(gòu)與算法和計算機(jī)網(wǎng)絡(luò)穿插講。

        擁塞控制以及流量控制其實(shí)也寫過的了,兩篇看這里:
        三分鐘基礎(chǔ):什么是流量控制?

        三分鐘基礎(chǔ):什么是擁塞控制?

        推薦閱讀

        全部文章詳細(xì)分類與整理(算法+數(shù)據(jù)結(jié)構(gòu)+計算機(jī)基礎(chǔ))

        玩公眾號寫文章一年多以來,我經(jīng)歷了被噴被拉黑被贊美,我酸了

        有必要說一說即將到來的春招(經(jīng)歷+重要性+如何準(zhǔn)備)

        普普通通,我的三年大學(xué)

        歷經(jīng)兩個月,我的秋招之路結(jié)束了!


        瀏覽 129
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            娇妻裸体交换俱乐部换 | 玖玖精品在线视频 | 特级黄色片免费看 | 色草AV | AAA黄色片 | 深夜爽爽动态图无遮无挡 | 麻豆综合 | 久久国产强奸 | 日日夜夜逼 | 亚洲欧美日韩系列 |