TCP セグメントの再構成について質問があります。パケットが複数のセグメントに分割される可能性があることを知りました (これは MSS と関係があります)。
ie) メッセージ フロー (仮定):
- クライアントは、アプリケーション層から渡されたパケットを送信します
- クライアント側の TCP 層で、パケットは 3 つのセグメントに分割されます。
- クライアントの IP 層に渡されるセグメント。
- サーバーの IP レイヤーがセグメントを受信します。
- サーバー側の TCP 層では、3 つのパケットを受け取り、1 つのパケットとして再構成します。
- サーバーのアプリケーション層は 1 つのパケットを受け取ります。
私の理解では、TCP レイヤーは、分割されたセグメントが再構築される場所です。私が間違っている場合は修正してください。
ここが私が本当に明確にしたいことです。
Netty を使用すると、サーバー側の「messageReceived()」メソッドが 1 回または 3 回だけ呼び出されますか? 分割されたセグメントを再構築する場所が TCP 層である場合、「messageReceived()」メソッドは 1 回だけ呼び出されますよね?
それでは、サーバーが受信するバイト数を保証するために「ReplayingDecoder」のようなものを使用することは本当に必要ですか?
よろしくお願いいたします。
追加の質問:
サーバーがセグメントの1つが失われたか何かのために再構築に失敗した場合、TCP層は不完全なパケットをアプリケーション層に渡しますか?