
ストップアンドウェイトARQ(交互ビットプロトコルとも呼ばれる)は、通信において接続された2つのデバイス間で情報を送信するための方式です。パケットの損失による情報損失を防ぎ、パケットが正しい順序で受信されることを保証します。これは最も単純な自動再送要求(ARQ)メカニズムです。ストップアンドウェイトARQ送信側は一度に1つのフレームを送信します。これは、送信ウィンドウと受信ウィンドウのサイズが両方とも1である一般的なスライディングウィンドウプロトコルの特殊なケースです。送信側は各フレームを送信した後、確認応答(ACK)信号を受信するまでそれ以上のフレームを送信しません。受信側は有効なフレームを受信するとACKを送信します。ACKがタイムアウトと呼ばれる一定時間内に送信側に届かない場合、送信側は同じフレームを再度送信します。タイムアウトのカウントダウンは、各フレーム送信後にリセットされます。上記の動作はストップアンドウェイトの基本的な例です。ただし、実際の実装では、設計上の特定の問題に対処するためにさまざまな方法が用いられます。
通常、送信機は各フレームの末尾に冗長チェック番号を追加します。受信機はこの冗長チェック番号を使用して、フレームの損傷の有無を確認します。フレームが正常であると受信機が判断した場合、ACKを送信します。フレームが損傷していると受信機が判断した場合、受信機はそのフレームを破棄し、ACKを送信しません。つまり、フレームが単に損傷したのではなく、完全に失われたものとして扱います。
問題の一つは、受信側から送信されたACKが破損または紛失した場合です。この場合、送信側はACKを受信できず、タイムアウトとなり、フレームを再送信します。すると受信側は同じフレームのコピーを2つ持つことになり、2つ目のフレームが重複したフレームなのか、それとも同一のデータを含むシーケンスの次のフレームなのかが分からなくなります。
もう一つの問題は、伝送媒体の遅延が非常に長く、フレームが受信側に到達する前に送信側のタイムアウトが切れてしまう場合です。この場合、送信側は同じパケットを再送信します。最終的に、受信側は同じフレームのコピーを2つ受け取り、それぞれに対してACKを送信します。1つのACKを待っていた送信側は2つのACKを受信し、2つ目のACKがシーケンス内の次のフレームに対するものだと誤解すると問題が発生する可能性があります。
これらの問題を回避するために、最も一般的な解決策は、フレームのヘッダーに1ビットのシーケンス番号を定義することです。このシーケンス番号は、後続のフレームで交互に(0から1へ)変化します。受信側がACKを送信する際、次に受信するパケットのシーケンス番号を含めます。このようにして、受信側はフレームのシーケンス番号が交互に変化しているかどうかを確認することで、重複したフレームを検出できます。連続する2つのフレームのシーケンス番号が同じ場合、それらは重複しており、2番目のフレームは破棄されます。同様に、連続する2つのACKが同じシーケンス番号を参照している場合、それらは同じフレームを承認していることになります。
ストップアンドウェイトARQは、ACKとデータが正常に受信された場合、パケット間の時間が伝送時間の2倍になるため(ターンアラウンドタイムがゼロであると仮定した場合)、他のARQに比べて非効率的です。そのため、チャネルのスループットは本来の性能のほんの一部に過ぎません。この問題を解決するには、より大きなシーケンス番号で複数のパケットを同時に送信し、1つのACKでパケットセットを処理すればよいでしょう。これは、Go-Back-N ARQやSelective Repeat ARQで採用されている方式です。