運輸層-可靠數據傳輸原理:選擇重傳 Selective Repeat Protocol


篇首語:回退N步(GBN)和選擇重傳(SR)是解決流水線的差錯恢復的兩種基本方法。

本篇我們再來看看SR。

首先我們要知道序號空間這個概念,這對於我們后面理解窗口長度的選擇意義非凡。在一次傳輸中,分組數也許很大,我們不可能給每個分組一個唯一一個編號,所以只能選擇一個序號空間,令分組數進行取模操作。比如分組數為7,我們取序號空間為 0 1 2 ,則分組編號為 0 1 2 0 1 2 0

現在來看SR,通過前面的學習,我們了解了GBN的基礎上,也知道了GBN協議可能會將失序的分組丟掉,而這部分失序的分組也許沒有必要被重新傳輸。而選擇排序(SR),顧名思義,就是通過讓發送方僅重傳哪些它懷疑在接收方出錯(丟失或受損)的分組而避免了不必要的重傳。

為了達到這一目的,我們首先仍需要利用窗口來限制流水線中的分組數。

現在我們來講述傳輸過程,我們將各個分組編號,設窗口大小為N。發送方一次傳輸N個分組過去,當接收方正確接受到其中任意一個分組,接收方都會返回一個ACK。這時候接收方會判斷這個分組是否按序,並將目前按序的所有分組提交給上一層,否則,進行緩存。而發送方接受到ACK后,也會查看ACK對應序號是否按序(== base ?),按序則窗口滑動,否則窗口不滑動並進行等待。一旦等待超時(可能是分組丟失或ACK丟失引起的)就將觸發重傳。

在接收方緩存的失序分組將被緩存知道所有的丟失分組(即序號更小的分組)都被接受為止,然后才將這一批分組按序交付給上一層。需要注意,當SR正確接收到一個分組,無論目前擁有與否,都要返回一個ACK,否則發送方窗口將無法滑動。而同時與GBN不同的是,每個在被發送的分組都有自己的邏輯定時器。

最后我們來說說,為什么之前要提到序號空間。實際上,我們窗口大小的選擇不是隨意的,序號空間的大小是有限的,而我們窗口長度必須小於等於序號空間的一半。

以上就是SR的運行基本原理。

 

 我們可以看到,使用選擇重傳,我們可以避免重復傳送那些接收方已經正確接受的分組,但代價是接收方要具有相當容量的緩存空間,而這在許多情況下是不夠經濟的。

這里同樣建議大家看看一個java小程序,來實操一下SR的過程.

https://media.pearsoncmg.com/ph/esm/ecs_kurose_compnetwork_8/cw/content/interactiveanimations/selective-repeat-protocol/index.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM