資料連結層

選擇性重送(selective repeat)

後退 N 的毛病在於:一個遺失的訊框,就逼發送方重做整整一個視窗,連那些已經安全到達的訊框也一起。選擇性重送提出一個顯而易見的問題:為什麼不「只」重送真正遺失的那些訊框?它正是這麼做。發送方仍維持一個在途中的訊框視窗,但現在只重送那些遺失的特定訊框,把成功送達的那些放著不動。

要做到這點,接收方必須更聰明。它不再丟掉任何亂序的東西,而是「緩衝」那些正確到達的訊框——即使有個更早的還缺著——並且對它收到的每一個訊框各送一個獨立的 ACK,而非累積式。所以若第 5 號遺失,但 6、7、8 到了,接收方就把 6、7、8 留在它的緩衝區裡,並各自 ACK。當發送方透過逾時注意到第 5 號從未被確認,它「只」重送第 5 號。一旦它到達,接收方就把它接到緩衝著的 6、7、8 前面,把這四個依序、一次全部交給上層。

選擇性重送是經典 ARQ 方案中最省頻寬的,這正是現代傳輸層(帶選擇性確認 SACK 的 TCP)倚賴同一想法的原因。代價很誠實:它需要一個更複雜、具備真實緩衝空間的接收方、逐訊框的確認,以及每個未確認訊框各一個計時器。還有一條微妙的正確性規則——視窗大小必須不超過序號空間的一半——否則接收方可能把一個全新的訊框誤認成舊的重送,悄悄地把資料流弄壞。

視窗為 4。送出第 4、5、6、7 號訊框;只有第 5 號遺失。接收方緩衝 6 與 7,並各自 ACK 第 4、6、7 號。發送方只重送第 5 號;它到達後,接收方依序交付第 4、5、6、7 號。對照後退 N,它會把 5、6、7 都重送。

只重送遺失的那個訊框;其餘的先緩衝,等缺口補上後依序交付。

選擇性重送省頻寬,但需要一個會緩衝的接收方、獨立的 ACK,以及逐訊框的計時器。一個正確性陷阱:視窗大小最多只能是序號空間的一半,否則新訊框與舊重送會變得無法區分。

又稱
SRselective-repeat ARQ選擇性重傳