Based on my understanding, in Go Back N, an acknowledgement with sequence number i indicates that all packets up to and including i-1 have been acknowledged.
Hence, if a sender has window size w, and base b, so the window is [b, b+w-1], and receives an acknowledgement n, n > b, the sender may slide the window forward to [n, n+w-1].
Assuming modulo arithmetic is used, how does Go Back N ensure safety in the face of out of order acknowledgements?
For example, assume sequence numbers 0, 1, 2, 3 and a maximum window size of 3. Assume, because of dynamic routing, the sender receives acks in the following order
ack 2
ack 3
ack 1
On receiving acks 2 and 3, it will slide the window forward
| 0 1 2 | 3 0 1 2 3 0 1 2 3
0 1 | 2 3 0 | 1 2 3 0 1 2 3
0 1 2 | 3 0 1 | 2 3 0 1 2 3
On receiving ack 1 (indicating receipt of packet 0), will the sender not slide the window forward again, to
0 1 2 3 0 | 1 2 3 | 0 1 2 3
So the sender cannot disambiguate between ack 2, ack 3, ack 1 (reordered) and ack 1 (dropped), ack 2, ack 3, ack 0 (dropped), ack 1