Go-Back-N ARQ نمونه مشخصی از پروتکل درخواست بازفرستی خودکار (ARQ) است که در آن فرایند ارسال تعدادی فریم مشخص شده با اندازه پنجره حتی بدون دریافت بسته تایید (ACK) از گیرنده ادامه پیدا میکند. این یک مورد خاص از پروتکل کشویی عمومی پنجره با اندازه پنجره انتقال N و اندازه پنجره دریافت 1 است. این می تواند N فریم را قبل از نیاز به ACK به همتا منتقل کند.

فرایند گیرنده شماره دنباله فریم بعدی را که انتظار دارد دریافت کند ، ثبت می کند و آن را با هر ACK که ارسال می کند ، ارسال می کند. گیرنده از هر فریم که عدد دنباله دقیقی از آن انتظار نداشته باشد (یا یک فریم تکراری که قبلاً تصدیق کرده است ، یا یک فریم خارج از سفارش که بعداً می خواهد دریافت کند) صرف نظر می کند و یک ACK را برای آخرین فریم صحیح مرتب شده مجدداً ارسال می کند. هنگامی که فرستنده تمام فریم ها را در پنجره خود ارسال کرد ، متوجه می شود که تمام فریم ها از اولین فریم گم شده برجسته هستند و به شماره توالی آخرین ACK که از فرایند گیرنده دریافت کرده است بر می گردند و پنجره ی آن را با شروع از آن فریم و پر می کند و این فرایند را دوباره تکرار میکند.

Go-Back-N ARQ وقتی که از یک اتصال استفاده میکند نسبت به بازفرستی با روش ایست و انتظار کارآیی بیشتر دارد ، زیرا برخلاف انتظار برای تصدیق برای هر بسته ، همانطور که بسته ها ارسال میشوند هنوز از این اتصال استفاده می شود. به عبارت دیگر ، در مدت زمانی که در غیر این صورت صرف انتظار می شود ، تعداد بیشتری بسته ارسال می شود. با این حال ، این روش همچنین باعث می شود چندین بار فریم ارسال شود - اگر هر فریم از بین رفت یا آسیب دید ، یا ACK تصدیق کرد که آنها گم شده اند یا آسیب دیده اند ، آن فریم و تمام فریم های دنبال کننده ی آن در پنجره ارسال (حتی اگر بدون خطا دریافت شده باشند) دوباره ارسال می شود. برای جلوگیری از این امر می توان از بازفرستی با روش Selective Repeat استفاده کرد.

شبه کد
------

این مثالها تعداد نامحدود دنباله و شماره های درخواست را فرض می کنند.

```
N  := window size
Rn := request number
Sn := sequence number
Sb := sequence base
Sm := sequence max

function receiver is
    Rn := 0
    Do the following forever:
        if the packet received = Rn and the packet is error free then
            Accept the packet and send it to a higher layer
            Rn := Rn + 1
        else
            Refuse packet
        Send a Request for Rn

function sender is
    Sb := 0
    Sm := N + 1
    Repeat the following steps forever:
        if you receive a request number where Rn> Sb then
            Sm := (Sm − Sb) + Rn
            Sb := Rn
        if no packet is in transmission then
            Transmit a packet where Sb ≤ Sn ≤ Sm.  
            Packets are transmitted in order.
```

انتخاب سایز پنجره (N)
---------------------

در هنگام انتخاب یک مقدار برای N ، چند نکته وجود دارد که باید در نظر داشته باشید:

1. فرستنده نباید خیلی سریع منتقل شود. N باید به توانایی گیرنده برای پردازش بسته ها محدود شود.
2. N باید از تعداد اعداد دنباله کوچکتر باشد (در صورتی که از صفر به N شماره گذاری شوند) تا صحت انتقال در مواردی که هر بسته (هر نوع داده یا بسته ACK) از بین رفته باشد تأیید شود.
3. با توجه به محدودیت های ارائه شده در (1) و (2) ، N باید طوری انتخاب شود که بیشترین مقدار ممکن باشد.

منابع
-----

1. 1 2  Kurose, James F.; Keith W. Ross. *Computer Networking: A Top-Down Approach*. شابک ۰-۳۲۱-۴۹۷۷۰-۸.نگهداری یادکرد:نام‌های متعدد:فهرست نویسندگان (رده)
2. 1 2  Tanenbaum, Andrew S. *Computer networks*. شابک ۰-۱۳-۰۶۶۱۰۲-۳.
3. ↑  Marbach, Peter. *"ARQ Protocols"* (PDF). دریافت‌شده در اوت ۲۴, ۲۰۱۳.

پیوند به بیرون
--------------

* Go-Back-N ARQ demonstration in a Java applet