選擇重傳協議也是基於滑動窗口流量控制技術的。它的接受窗口尺寸和發送窗口尺寸都大於 1,以便能夠一次性接受多個幀。如果采用 n 個比特對幀機型編號,為了避免接受端向前移動窗口后,新接收窗口與舊接收窗口產生重疊,發送窗口的最大尺寸應該不超過序列號范圍的一般:WT≤2n−1WT≤2n−1.當發送窗口取最大值時,WR=WT=2n−1WR=WT=2n−1(大部分情況都是發送窗口等於接收窗口並且都等於 2n−12n−1,因為在這種情況下可以達到最大效率),此時,如果 WTWT 取大於 2n−12n−1 的值,可能造成新、舊接收窗口重疊。
基本思想:如果某一幀出錯,其后續幀先存入接收方的緩沖區中,同時要求發送方重新傳輸出錯幀,就和原先存在緩沖區的其余幀一起按照正確的順序送到主機。選擇重傳協議避免了重復傳輸那些本來已經正確到達接收方的數據幀,進一步提高了信道利用率,代價是增加了緩沖空間。
補充:為什么選擇重傳協議的最大發送窗口大小是 2n−12n−1?
答:現在先假設選擇重傳協議的最大發送窗口是 W,那么可以一次性發送 0 ~ W - 1 號幀,並且接收方都已經收到了(就是說,這 W 個確認幀都已經發了),但是這 W 個確認幀全部在傳輸過程中丟失了,此時接收窗口的位置已經移動到 W ~ 2W - 1. 如果發送方再發一輪,這 W 個幀應該落在W ~ 2W - 1上,但是此時的 W 幀是重傳的,所以如要正確,就必須滿足 2W - 1 是在最大序號 2n−12n−1之內,也就是說 2W−1≤2n−12W−1≤2n−1,即 W≤2n−1W≤2n−1.
由於選擇重傳協議的最大發送窗口是 2n−12n−1 還是比較難以理解的。舉個例子,假設 n=3n=3 ,則 2n−1=4 2n−1=4.如果發送窗口和接收窗口為 5. 假設 t1t1 時刻發送方發送序號為 0~4 的幀 ,t2t2 時刻接收方收到序號為 0~4 的幀,但是確認幀在傳輸過程中丟失了。於是,發送方在 t3t3時刻重新發送幀0,當t4t4時刻接收方收到幀 0時候,由於幀0 在其接受范圍之內, 0 被錯誤的當作下一個新幀接受,導致協議錯誤。因此 W≤2n−1W≤2n−1.
另外一個疑問點:如果不按需接受,交給主機時不是全部亂套了?
答:如果沒有按序,正確的接受幀先存入接收方的緩沖區中,同時要求發送方重傳出錯幀,一旦接收到重傳幀之后,就和原先存在緩沖區的其余幀按照正確的順序發送到主機。所以說選擇重選協議避免了重復傳輸那些本來已經正確到達接收方的數據幀,進一步提高了信道的利用率,但是代價是增加了緩沖空間。