25

HTTP、TCP プロトコル上に存在するプロトコルはステートレスであり、IP プロトコルもステートレスです。

4

4 に答える 4

59

スタック上の他のプロトコルを見るだけで、スタックされたプロトコルがステートフルまたはステートレスであると想定することはできません。ステートフル プロトコルはステートレス プロトコルの上に構築でき、ステートレス プロトコルはステートフル プロトコルの上に構築できます。レイヤード ネットワーク モデルのポイントの 1 つは、探している種類の関係 (特定のプロトコルと組み合わせて使用​​されるプロトコルの機能におけるステートフルネス) が存在しないことです。

TCP プロトコルがステートフルなプロトコルであるのは、IP を介して使用されるためでも、HTTP がその上に構築されているためでもありません。TCP は、ウィンドウ サイズ (エンドポイントが受信する準備ができているデータの量を相互に通知する) とパケットの順序 (エンドポイントが相手からパケットを受信したときに相互に確認する必要がある) の形式で状態を維持します。この状態(相手が受信できるバイト数、最後のパケットを受信したかどうか) により、本質的に信頼性の低いプロトコル上でも TCP を信頼できるものにすることができます。したがって、TCP は状態を有効にする必要があるため、ステートフル プロトコルです。

また、HTTP と HTTPS (実際には HTTP over SSL/TLS にすぎません) は本質的にステートレス (各要求はプロトコルごとの有効なスタンドアロン要求) ですが、HTTP と HTTPS の上に構築されたアプリケーションは「 t は必ずしもステートレスです。たとえば、Web サイトでは、メッセージを送信する前にログイン ページにアクセスする必要がある場合があります。クライアントがメッセージを送信するリクエストが有効なスタンドアロン リクエストであっても、クライアントが以前に自分自身を認証しない限り、アプリケーションはそれを受け入れません。これは、アプリケーションがHTTP経由で状態を実装することを意味します。

余談ですが、HTTP のステートフル性は、(明らかに異なるOSI レイヤー上の) いくつかのアプリケーションがその状態を HTTP にリークするため、多少混乱する可能性があります。たとえば、ユーザーが存在しないブログ投稿を表示しようとすると、ブログ投稿検索自体を処理するファイルが見つかった場合でも、ブログ アプリケーションは 404 ステータス コードを含む応答を返すことがあります。

于 2013-11-11T05:42:34.470 に答える