Go-Back- N ARQ は、自動繰り返し要求(ARQ) プロトコルの特定のインスタンスで、送信プロセスは、受信側から確認応答(ACK) パケットを受信しなくても、ウィンドウ サイズで指定された数のフレームを送信し続けます。これは、送信ウィンドウ サイズがN 、受信ウィンドウ サイズが 1 である一般的なスライディング ウィンドウ プロトコルの特殊なケースです。ACKを要求する前に、ピアに N 個のフレームを送信できます。
受信側プロセスは、次に受信すると予想されるフレームのシーケンス番号を追跡します。受信側プロセスは、予想されるシーケンス番号と正確に一致しないフレーム(すでに確認応答した重複フレーム、または後で受信すると予想される順序が間違っているフレーム)を破棄し、最後の正しい順序のフレームに対してACKを送信します。[1]送信側がウィンドウ内のすべてのフレームを送信すると、最初の失われたフレーム以降のすべてのフレームが未処理であることが検出され、受信側プロセスから受信した最後のACKのシーケンス番号に戻って、そのフレームからウィンドウを埋め、このプロセスを繰り返します。
Go-Back- N ARQ はStop-and-wait ARQよりも接続を効率的に使用します。これは、各パケットの確認応答を待つのとは異なり、パケットが送信されている間も接続が利用されるためです。言い換えると、待機に費やされる時間の間に、より多くのパケットが送信されます。ただし、この方法ではフレームが複数回送信されることになります。フレームが失われたり破損したりした場合、またはフレームを確認する ACK が失われたり破損したりした場合、そのフレームと送信ウィンドウ内の後続のすべてのフレーム (エラーなしで受信された場合も含む) が再送信されます。これを回避するには、選択的繰り返し ARQ を使用できます。[2]
擬似コード
これらの例では、シーケンス番号とリクエスト番号が無限にあることを前提としています。[1]
N := ウィンドウサイズ
Rn := リクエスト番号
Sn := シーケンス番号
Sb := シーケンスベース
Sm := シーケンス最大値
関数の受信側は
Rn :=0
次のことを永久に実行します。
受信したパケットがRnで、パケットにエラーがない場合
パケットを受け入れ、上位層に送信する
Rn := Rn + 1
それ以外の場合
拒否パケットRn
のリクエストを送信
関数の送信者は
Sb :=
0Sm := N +1
次の手順を永久に繰り返します。
Rn > Sb となる要求番号を受信した場合は、
Sm := ( Sm − Sb ) + Rn
Sb := Rn
となり、送信中のパケットがない場合は、Sb ≤ Sn ≤ Sm
となるパケットを送信します。
パケットは順番に送信されます。
ウィンドウサイズの選択(いいえ)
Nの値を選択する際には、いくつか留意すべき点があります。
- 送信側は送信速度を速すぎてはなりません。Nは受信側のパケット処理能力によって制限される必要があります。
- パケット(データパケットまたはACKパケット)がドロップされた場合に伝送を検証するには、 Nはシーケンス番号の数(0からNまで番号が付けられている場合)よりも小さくなければなりません[説明が必要]。[2]
- (1)と(2)で示された境界を前提として、Nを可能な限り大きな数として選択します。[3] [検証失敗]
参考文献
参照
外部リンク
- Java アプレットでの Go-Back-N ARQ のデモ
