- 締切済み
フロー制御について
勉強中の初心者です 質問なのですが、連続した4つのセグメントが送られた時、 1,2,4番目のセグメントに対するACKが送信途中に破棄されたとします。 すると、3番目のセグメントに対するACKが最初に届くと思うのですが、 4番目は置いといて、5番目、6番目のセグメントを先に送信します。 その後、一定時間待っても4番目のセグメントに対するACKが返ってこないので、再送信しますよね? その後、相手側は6番目のセグメントに対するACK(7番目を要求)を送信した後、4番目が遅れて到達します。 この時、4番目のセグメントに対するACKも、7番目のセグメントを要求する と読んだのですが、この時なぜ、一度要求したセグメントと同じもの を要求するのでしょうか? ただ単に、ウインドウのサイズの更新的な意味合いからでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- semikuma
- ベストアンサー率62% (156/251)
#1の補足です。 無駄なことをしているように思えますが、大きすぎるウインドウサイズは確かに無駄です。 だから一般には、MTUを単位として徐々にウインドウサイズを大きくし(最大Rwin)、最も効率的なウインドウサイズを決定します。 ADSLなどでMTUやRwinを大きくしすぎると却って遅くなるのはこのためです。
- semikuma
- ベストアンサー率62% (156/251)
データの信頼性を確保するためです。 なぜACKを返すか考えてください。 TCPの基本は1つのパケットに1つのACKです。 1番目のACKが返って来なければ送信側は1番目のデータが失われたとみなして1番目から再送します。 高速化のためにウインドウサイズを大きくして複数のバケット(上の例では4セグメント)を送信するときは、1番目の(全部のだったかな?)セグメントにウインドウサイズ、4番目のセグメントに「これで終わりだよ」という信号を乗せて送信するので、ACKは4番目のセグメントのみです。 このACKが返って来ないときは、送信側はどれかのデータが失われたものとして、ウインドウサイズを小さくして1番目から再送します。 (7番目のACKは無視)
お礼
semikumaさん、回答ありがとうございます ウインドウサイズを大きくして、例えば4つのセグメントを送信する場合は、 4つとも送信が成功した場合のみACKが返ってくるという事ですよね? それで、ACKが返ってこない理由が何であろうが、送信成功が確認できない場合は、ウインドウサイズを小さくして再度送信という事ですよね 私が読んだ内容は初心者向けのものだったので、内容をわかりやすくして書かれていたのかもしれません。 どうもありがとうございました