網(wǎng)絡(luò)的可靠傳輸機(jī)制

image.png

網(wǎng)絡(luò)是不可靠的,資料在通信鏈路的傳輸過(guò)程中践险,可能因?yàn)樾盘?hào)干擾問(wèn)題而導(dǎo)致信號(hào)錯(cuò)誤。在這種情況下,通常使用循環(huán)冗余校驗(yàn)(CRC)來(lái)檢測(cè)錯(cuò)誤巍虫。雖然有些偵錯(cuò)程序足夠強(qiáng)大彭则,強(qiáng)大到可以更正錯(cuò)誤的信號(hào),但是這個(gè)過(guò)程會(huì)消耗大量的計(jì)算資源占遥。接收端若是收到了錯(cuò)誤的訊框則會(huì)丟棄這個(gè)訊框俯抖,為了達(dá)到可靠傳輸?shù)哪康模l(fā)送端必須重新發(fā)送這些被丟棄的訊框瓦胎。

為了達(dá)到重送錯(cuò)誤訊框的目的芬萍,我們使用了以下 2 種基礎(chǔ)方法

  1. 肯定回復(fù)(Acknowledgment,ACK)
  2. 等待超時(shí)(timeout)

ACK 是一個(gè)控制訊框搔啊,接收端用它來(lái)通知傳送端其已收到之前的訊框柬祠,發(fā)送端端則通過(guò)接收到 ACK 確認(rèn)其訊框發(fā)送成功。
若是發(fā)送端在經(jīng)過(guò)一段等待時(shí)間后還沒(méi)有收到 ACK负芋,發(fā)送端會(huì)重新發(fā)送原來(lái)的訊框漫蛔,發(fā)送端等待 ACK 的一段合適的時(shí)間的動(dòng)作叫做等待超時(shí)。

停止和等待協(xié)議

發(fā)送端在傳送完一個(gè)訊框之后必須等收到 ACK之后旧蛾,才能發(fā)送下一個(gè)訊框莽龟。當(dāng)發(fā)送端等待一段時(shí)間后還未收到 ACK,發(fā)送端發(fā)送等待超時(shí)锨天,重新發(fā)送原來(lái)的訊框毯盈。

image.png

上圖所示,發(fā)送端在等待超時(shí)前收到 ACK病袄。

image.png

上圖所示搂赋,發(fā)送端的原始訊框丟失,發(fā)送端等待超時(shí)后重新發(fā)送訊框陪拘。

image.png

上圖所示厂镇,接收端的 ACK 丟失,發(fā)送端等待超時(shí)左刽,重新發(fā)送訊框。

image.png

上圖所示酌媒,接收端的 ACK 延遲到達(dá)欠痴,接收端重新發(fā)送訊框。

接收端的 ACK 在到達(dá)發(fā)送端的過(guò)程中丟失或者延遲了秒咨,那么傳送端會(huì)等待超時(shí)并且重送原本的訊框喇辽。這樣的話(huà)重復(fù)發(fā)送同樣的訊框,造成網(wǎng)絡(luò)資源浪費(fèi)雨席。

image.png

上面存在的問(wèn)題菩咨,通過(guò)給訊框設(shè)置一個(gè)序號(hào)則可以解決。當(dāng)發(fā)送端發(fā)送編號(hào)為 0 的訊框,接收端可以知道這個(gè)訊框 0 重復(fù)抽米,因此可以忽略這個(gè)訊框特占,但是依舊會(huì)給發(fā)送端發(fā)送 ACK。

滑動(dòng)窗口協(xié)議 (Sliding Window Protocol)

image.png

到現(xiàn)在為止云茸,發(fā)送端和接收端的通信模型在同一個(gè)時(shí)間只有一個(gè)訊框在發(fā)送是目,嚴(yán)重浪費(fèi)網(wǎng)絡(luò)資源。為了充分利用網(wǎng)絡(luò)資源标捺,發(fā)送端在停下來(lái)等待 ACK 之前懊纳,發(fā)送端必須發(fā)送更多的訊框。

為了實(shí)現(xiàn)滑動(dòng)窗口協(xié)議亡容,發(fā)送端給每個(gè)訊框一個(gè)序號(hào)嗤疯,假設(shè)這個(gè)序號(hào)值可以無(wú)限大,發(fā)送端需要持續(xù)記錄下面 3 個(gè)變量

  1. 傳送窗口的大泄刖ぁ(Sending Window Size鱼鼓,SWS)
  2. 最后收到的 ACK 序號(hào)(Last Acknowledgment Received,LAR)
  3. 最后發(fā)送的訊框序號(hào) (Last Frame Sent廓潜,LFS)
image.png

對(duì)于上面的 3 個(gè)變量結(jié)合圖示台丛,我們有底下的等式

LFS - LAR <= SWS

當(dāng)發(fā)送端接收到一個(gè)編號(hào)為 LAR+1 的 ACK,將 LAR 向右移動(dòng)戴而,使發(fā)送端可以發(fā)送另一個(gè)訊框凑术。每個(gè)發(fā)送端對(duì)每個(gè)發(fā)送出去的訊框都會(huì)有一個(gè)計(jì)時(shí)器,若是計(jì)時(shí)器在 ACK 到達(dá)前超時(shí)所意,則重送該訊框淮逊。發(fā)送端也需要一個(gè)有 SWS 容量大小的緩沖區(qū),用于存在發(fā)送出去的訊框扶踊,這樣才能在需要重送訊框的時(shí)候找到訊框泄鹏。

為了實(shí)現(xiàn)滑動(dòng)窗口協(xié)議,接收端需要持續(xù)記錄下面 3 個(gè)變量

  1. 接收窗口的大醒砗摹(Receiving Windows Size 备籽,RWS)
  2. 最大可接收的訊框序號(hào)(Largest Acceptable Frame ,LAF)
  3. 最后收到的訊框序號(hào) (Last Frame Received 分井,LFR)
image.png

對(duì)于上面的 3 個(gè)變量結(jié)合圖示车猬,我們有底下的等式

LAF - LFR <= RWS

當(dāng)接收端接收到序號(hào)為 SeqNum 的訊框時(shí),若是 SeqNum <= LFR 或者 SeqNum > LAF 尺锚,此訊框在接收端滑動(dòng)外面珠闰,那么接收端會(huì)將此訊框丟棄。若是 LFR < SeqNum <= LAF 瘫辩,接收端接收此訊框伏嗜。當(dāng)接收端接收到一個(gè)編號(hào)為 LFR+1 的 訊框坛悉,將 LFR 向右移動(dòng)。

image.png

如上圖所示承绸,假設(shè) LFR = 1, RWS = 7, LAF = 8裸影。若訊框 4,6八酒,3空民,5 先后到達(dá),雖然它們沒(méi)有按照序號(hào)順序到達(dá)羞迷,但是它們都會(huì)被收起來(lái)界轩,因?yàn)樗鼈兌荚诮邮斩舜翱趦?nèi)。但是接收端不會(huì)發(fā)送 ACK衔瓮,因?yàn)橛嵖?2 還沒(méi)有到達(dá)浊猾,等到訊框 2 到達(dá)之后,接收端發(fā)送訊框 6 的 ACK热鞍,此時(shí)窗口滑動(dòng)葫慎, LFR 改為 6, LAF 改為 13薇宠。

image.png

如上圖所示偷办,滑動(dòng)窗口協(xié)議中的 ACK 采用的是累積式的 ACK (Accumulative ACKs), SeqNumToAck 表示所有編號(hào)小于 SeqNumToAck 的訊框都已經(jīng)收到了,即使收到較高序號(hào)的訊框澄港,接收端還是會(huì)送出序號(hào)為 SeqNumToAck 的 ACK椒涯,對(duì)于接收端來(lái)說(shuō) LFR = SeqNumToAck -1, LAF = LFR+ RWS

總結(jié)

  1. 為了達(dá)到可靠傳輸?shù)哪康模瑓f(xié)議設(shè)計(jì)者在通信鏈路上使用了 2 個(gè)基礎(chǔ)技術(shù)回梧,分別是 ACK 和 等待超時(shí)废岂。
  2. 停止和等待協(xié)議是一個(gè)可靠的協(xié)議,但是運(yùn)行效率不夠好狱意,同時(shí)只有一個(gè)訊框在通信鏈路上傳送湖苞,而且接收端可能受到重復(fù)的訊框。
  3. 滑動(dòng)窗口協(xié)議是一個(gè)可靠而且高效率的協(xié)議详囤,它會(huì)給所有的訊框設(shè)置一個(gè)序號(hào)财骨,多個(gè)訊框可以同時(shí)在通信鏈路上傳送。對(duì)于發(fā)送端需要維持 3 個(gè)變量纬纪,分別是發(fā)送端視窗大序驹佟(SWS),最后收到的 ACK 編號(hào)(LAR),最后發(fā)送的訊框編號(hào)(LFS)包各。對(duì)于接收端需要維持 3 個(gè)變量,分別是接收端窗口大邪忻怼(RWS),最大可接收的訊框編號(hào)(LAF),最后收到的訊框編號(hào)(LFR)问畅。

對(duì)于發(fā)送端來(lái)說(shuō),有以下等式


image.png

對(duì)于接收端來(lái)說(shuō),有以下等式

image.png
  1. 滑動(dòng)窗口協(xié)議提供了 3 個(gè)特性护姆,分別是可靠的傳輸矾端,維持訊框順序,流量控制卵皂。利用每個(gè)訊框都有序號(hào)秩铆,順序錯(cuò)誤的訊框會(huì)被置于緩沖區(qū)的功能來(lái)實(shí)現(xiàn)維持訊框順序特性。流量控制是利用接收端可以設(shè)定 RWS 的值來(lái)調(diào)節(jié)發(fā)送端的速度灯变,防止發(fā)送端發(fā)送過(guò)多的訊框?qū)⒔邮斩巳?/li>

參考

作為網(wǎng)絡(luò)方面的簡(jiǎn)單入門(mén)內(nèi)容殴玛,文章主要是介紹網(wǎng)絡(luò)的可靠傳輸機(jī)制的簡(jiǎn)單知識(shí)。這篇博客內(nèi)容總結(jié)于黃能富教授的《CS01060 2017-秋季-計(jì)算機(jī)網(wǎng)路概論》課程添祸,博客截圖來(lái)源于課程 PPT滚粟。

  1. http://www.sharecourse.net/sharecourse/course/view/courseInfo/1246
  2. https://book.douban.com/subject/26417896/
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市刃泌,隨后出現(xiàn)的幾起案子凡壤,更是在濱河造成了極大的恐慌,老刑警劉巖耙替,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亚侠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡俗扇,警方通過(guò)查閱死者的電腦和手機(jī)硝烂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)狐援,“玉大人钢坦,你說(shuō)我怎么就攤上這事∩督矗” “怎么了爹凹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)镶殷。 經(jīng)常有香客問(wèn)我禾酱,道長(zhǎng),這世上最難降的妖魔是什么绘趋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任颤陶,我火速辦了婚禮,結(jié)果婚禮上陷遮,老公的妹妹穿的比我還像新娘滓走。我一直安慰自己,他們只是感情好帽馋,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布搅方。 她就那樣靜靜地躺著比吭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪姨涡。 梳的紋絲不亂的頭發(fā)上衩藤,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音涛漂,去河邊找鬼赏表。 笑死,一個(gè)胖子當(dāng)著我的面吹牛匈仗,可吹牛的內(nèi)容都是我干的瓢剿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼锚沸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼跋选!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起哗蜈,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤前标,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后距潘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體炼列,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年音比,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了俭尖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡洞翩,死狀恐怖稽犁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情骚亿,我是刑警寧澤已亥,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站来屠,受9級(jí)特大地震影響虑椎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜俱笛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一捆姜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧迎膜,春花似錦泥技、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)镊讼。三九已至宽涌,卻和暖如春平夜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卸亮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工忽妒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人兼贸。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓段直,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親溶诞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鸯檬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容