割り当てのために、c ++(winsock 2を使用)で記述されたクライアントアプリケーションとサーバーアプリケーション間で3ウェイストップとハンドシェイクを待機する必要があります。クライアントはSYNを送信します。サーバーはクライアントシーケンス番号をインクリメントし、SYN-ACKを送信します。クライアントはサーバーシーケンス番号をインクリメントし、ACKを送信します。
パケット損失をシミュレートするために、クライアントとサーバーは、パケットを転送しないことがある中間ルータープログラムに接続されているため、損失が発生します。パケット損失の可能性を考慮して、sendto()、select()、recvfrom()ステートメントをどのように構成する必要がありますか?
たとえば、SYNが失われ、クライアントがタイムアウトした場合は、SYNを再送信します。SYN-ACKが失われると、クライアントはタイムアウトしてSYNを再送信します。ACKがなくなったらどうしたらいいのかわかりません。
編集:それは基本的に私のクライアントでは次のようになります:
- SYNを送信します。
- select()ステートメントが失敗している間にループし、SYNを再送信します
- SYN-ACKを受信する
- ACKを送信する
- ACKが失われた場合は、ループしてSYN-ACKを再受信する可能性があります。
ループを停止するタイミングを知るにはどうすればよいですか?