計算機網絡--可靠數據傳輸原理(二)

            從計算機網絡--可靠數據傳輸原理(一)中已經可知如何設計一個可靠的傳輸機制來保證數據可以完整有序的到達目的地,可是該機制採用了「停等」協議(也就是每發送一個數據包都要等待接收方的反饋消息不然就超時重傳),它的傳輸效率比較低,所以出現了流水線可靠數據傳輸協議(在計算機網絡-自頂向下一書中已經從理論上詳細的討論了傳輸效率低下的緣由,不過我仍是從直覺上記住這個結論先,暫時不去看具體緣由了)。java

            它的基本思想是發送方能夠連續發送一批數據包給接受方,而不用每發一個數據包就等待確認。可是這批數據包的數量仍是有限制的,能夠稱之爲緩衝區,若是發送的數據包占滿了緩衝區尚未一個數據包被確認一樣須要發送方進行等待!不過該方法仍然行之有效的緣由是儘管網絡會丟包、亂序達到、數據損壞,可是大部分狀況下數據仍是能夠正常達到目的地,發送方大部分狀況下都會收到接受方的正常反饋,因爲發送方會有一個線程異步接受該反饋因此發送方能夠繼續發送新的數據包填滿那些已經反饋的數據包的空間。這種機制在網絡和雙方機器都正常的狀況下發送方會一直向接受方發送數據而感受不到停頓,這就是稱之爲流水線傳輸的緣由!緩存

            先假設緩衝區的大小爲N且恰能對2取模(這樣對N取餘時能夠簡化運算見 java位運算技巧--不按期更新),每一個數據包都有一個序號,經過對N取餘就能夠求出數據包在緩衝區佔用的位置。這裏要特別強調發送方和接收方的緩衝區大小必須相同,接收方發送的反饋消息可能丟失致使發送方從新發送數據包,接收方可緩存已正確接收的數據包經過數據包的序號來判斷是否爲新數據包,這點在計算機網絡--可靠數據傳輸原理(一)中也提過。          網絡

            當接收方正確接收了一段連續且完整的數據包時,會將這段數據包的最後一個編號附加到反饋消息中表示<=該編號的數據包都正確接收(而不須要爲每一個數據包都發送反饋消息從而節約了流量,這又叫累積確認),若是出現了丟包、亂序、數據包損壞狀況,就須要差錯恢復機制,流水線傳輸的處理方式有兩種:回退N步和選擇重傳。異步

            一、回退N步.net

                 發送方會對丟包、亂序、數據包損壞以及超時狀況從新發送數據包,接收方會丟棄全部亂序到達的數據包,這樣作看似很是天然且合理,可是丟棄已正常接收確亂序達到的包有點浪費流量,因此就有了選擇重傳。選擇重傳比該方法要複雜,將在下篇進行分析。計算機網絡

相關文章
相關標籤/搜索