資料連結層

後退 N(go-back-N)

停止等待因為一次只送一個訊框而浪費連結。後退 N 用管線化修掉這個浪費:發送方被允許同時讓最多 N 個訊框尚未確認,不必等每一個的 ACK 才送下一個。想像把一連串編號的訊框射進管子,ACK 再流回來,而你一直把管子塞滿。這個 N 就是視窗大小——你最多可以讓幾個未確認的訊框在途中。

讓它之所以叫「後退 N」的,是它搭配一個刻意設計得很簡單的接收方來處理遺失的方式。接收方只嚴格地依序接受訊框,並丟掉任何亂序的東西;它送出累積式 ACK,意思是 ACK k 確認的是直到第 k 號訊框為止的一切。所以若第 5 號訊框遺失,但 6、7、8 仍然到達,接收方會把 6、7、8 丟掉,並持續只 ACK 到 4。當發送方第 5 號訊框的計時器逾時,它就「後退」並重送第 5 號「以及它之後的每一個」——5、6、7、8——即使其中有些之前已經到過一次。接收方因此保持便宜,因為它從不必緩衝亂序的訊框。

這個取捨很誠實:後退 N 讓管子保持忙碌、且用一個極小的接收方,但單單一個遺失的訊框,就可能觸發重送整整一個視窗份量的訊框,在遺失率高時浪費頻寬。選擇性重送是修掉這點的表親,它緩衝亂序訊框、只重送遺失的那些,代價是接收方更複雜、且要逐訊框 ACK。

視窗 N=4。發送方送出第 4、5、6、7 號訊框。第 5 號遺失;6 與 7 到了,但只依序接受的接收方把它們丟掉,並持續只 ACK 到 4。逾時時發送方後退並重送 5、6、7——三個全送,即使 6 與 7 之前已經到過一次。

一個遺失的訊框,逼得它與視窗中它之後的一切全部重送。

後退 N 的接收方極其簡單(不緩衝亂序、只用累積式 ACK),但這份簡單意味著一次遺失就可能花掉整整一個視窗的重送。它在遺失罕見時出色,在遺失頻繁時則很浪費。

又称
GBNgo-back-n ARQ回溯 N