選擇重傳ARQ

選擇重傳ARQ 是一個自動重傳請求ARQ)的具體實例。它可以用作一個消息單元傳送和確認的協議。 當用作傳送消息單元的協議時,發送進程根據一個指定大小的 窗口持續發送若干 ,即使發送過程中丟失,也會繼續發送。和 Go-back-N ARQ不一樣,接收進程在出錯後還是繼續接收和確認幀。這是 滑動窗口協議 的發送和接收窗口大小大於1的一般情況。

接收進程記錄它沒有收到的最早的幀的序列號,並發送ACK時使用這個序列號。如果一個發送的幀沒有到達接收方,發送方繼續發送後面的幀,直到它填滿發送窗口 。接收方持續用接收的幀填充它的接收窗口,並且每次回復一個帶有序列號的ACK幀。一旦發送窗口所有幀都發送了 ,發送方重新發送的幀號與ACK對應的幀,然後繼續。 發送和接收窗戶的大小必須是相同的,而且最大取值最大序列號的一半(序列號是假設編號從0到 n -1),為了當所有數據包都丟失時避免出錯。假設所有的ACK都丟失了,如果接收窗口大於最大序列號的一半,一些甚至可能是所有的超時重傳的幀,都是不能被識別的重複發送。

在每個發送的幀得到確認後,發送方移動發送窗口。

接收窗口的尺寸不能超過序號範圍的1/2,否則可能造成幀的重疊。另外,發送窗口的尺寸一般和接收窗口的尺寸相同,發送端為每一個發送緩存設置一個定時計數器,定時器一旦超時,相應輸出緩存區中的幀就被重發。