計算機網絡-傳輸層(2)流水線協議和滑動窗口協議


流水線技術允許發送方在收到ACK之前連續發送多個分組:
(1)必須增加序號范圍,因為每個輸送中的分組(不計算重傳的)必須有一個唯一的序號,而且也許有多個在輸送中未確認的報文。
(2)協議的發送方和接收方要能緩存多個分組。發送方至少要能緩存那些已發送但沒有確認的分組,接收方可能要緩存那些已正確接收的分組。
(3)所需序號范圍和對緩沖的要求取決於數據傳輸協議如何處理丟失、損壞及延時過大的分組。解決流水線的差錯恢復有兩種滑動窗口協議:回退N步(Go-Back- N,GBN) 和選擇重傳(Selective Repeat,SR) 。
 
 
回退N步(GBN)協議
在流水線中未確認的分組數不能超過最大允許數(窗口長度N<2^k)
基序號(base) 定義為最早的未確認分組的序號,將下一個序號(nextseqnum) 定義為最小的未使用序號(下一個待發分組的序號)
如果窗口已滿,發送方會緩存上層應用發來的數據,或使用同步機制(如一個信號量或標志)僅當窗口不滿時才允許上層應用發送數據。
對序號為n的分組的確認采取累積確認的方式, 接受方發送擁有最高序列號的、已被正確接收的分組的ACK,表明自己已正確接收到序號≤n的所有分組。
亂序到達的分組直接丟棄(接收方無需緩存)重新確認序列號最大的、按序到達的分組,因此可能產生重復ACK。
只有一個計時器,base每次增加1,如果base==nextseqnum,就停止計時器,否則重啟計時器。
如果出現超時,發送方重傳所有已發送但還未被確認過的所有分組。
缺點:單個分組的差錯就能夠引起GBN重傳大批分組,許多分組根本沒有必要重傳。隨着信道差錯率的增加,流水線可能會被這些不必要重傳的分組所充斥。
 
選擇重傳(Selective Repeat, SR)
發送方窗口和接受方窗口之和必須小於2^k
發送方:
從上層收到數據:當從上層接收到數據后,發送方檢查下一個可用於該分組的序號。如果序號位於發送方的窗口內,則將數據打包並發送;否則就像在GBN 中一樣,要么將數據緩存,要么將其返回給上層以便以后傳輸。
重傳:每個分組必須擁有其自己的邏輯定時器,超時發生后只能發送一個分組,並重啟該定時器
收到ACK :如果收到ACK,倘若該分組序號在窗口內,則發送方將那個被確認的分組標記為己接收;如果該分組的序號等於發送窗口基序號send_base, 則send_base向前移動到具有最小序號的未確認分組處;如果窗口移動了並且有序號落在窗口內的未發送分組,則發送這些分組。
緩存機制:接收方將確認一個正確接收的分組而不管其是否按序。失序的分組將被緩存直到所有丟失分組(序號更小的分組)皆被收到為止
接受方:
序號在[rcv_base, rcv_base + N-1] 內的分組被正確接收:如果該分組以前沒收到過,則緩存該分組。如果該分組的序號等於接收窗口的基序號rcv_base,則該分組以及以前緩存過的所有連續分組交付給上層。
序號在[rev_base-N, rev_base-1]內的分組被正確接收:雖然該分組是接收方以前已確認過的分組,也必須發送ACK
其他情況:忽略該分組。


免責聲明!

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



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