GobackNプロトコルを2つの別々のクライアントおよびサーバーアプリケーションに実装しようとしています。私のシーケンス番号は3ビットに収まらなければならないので、2 ^ 3 = 8つの最大数、2 ^ 3-1=7のウィンドウサイズだとします。
最初はウィンドウ全体を送信します。最初の2つのパケット(0と1)は正しく受信されます。パケット2はドロップされます。受信者がパケット3から6を取得するとき、それは2を期待していたので、受信したパケットを2が欲しいと言ってナックする必要があります。
Sender Receiver
0 0
1 1
2 (packet dropped)
3 nack2
4 nack2
5 nack2
6 nack2
送信者が最初のnack2を受信すると、0と1が(ピギーバックによって)受信されたことを認識し、ウィンドウを前方に移動しますが、シーケンス番号2からウィンドウを再送信する必要もあります(つまり、2-3-4-5-6)。 -そしておそらく7-0)。送信者が2番目のnack2を受信するまでに、送信者はすでにそれらのパケットを送信しています。プロトコルのため、送信者は2を含むウィンドウ全体を再送信します。これで受信者は2(およびその他)を受信する可能性がありますが、2番目のnack2バッチでは、順序が正しくない2を再受信します。予想されるパケットをナックする必要があります。私はこれらすべての仮定で正しいですか?
私の場合、Go Back Nは、Stop and Waitよりもはるかに多くのパケットを送信しているように見えます。特に、ウィンドウサイズを大きくするほどです。何が得られないのですか?