ステートフル(Stateful)とステートレス(Stateless)の違い

ステートフルとステートレスの違いは気が利く奴か否か

ステートフルとは状況によって、あるリクエストをしたら、レスポンス(対応や反応、応答内容等)が変わるもの。特に、それ以前のやり取りの状況(ステート)によって回答が変わるものを言います。

つまり、それまでの会話の文脈やニュアンスを踏まえてリクエストを理解し、臨機応変に適した回答をする、気の利く奴のことです。

ステートレスとは状況によらず、あるリクエストをしたら、必ず同じ結果になるもの。特に、それまでのリクエスト・レスポンスのことは一切考えず、今来たリクエストを額面通りに受け取って回答するものを言います。

つまり、1歩歩いたら前のやり取りはもう忘れる、それまでの会話の文脈やニュアンス、空気などを一切読まずマイペースな回答をする、気の利かない奴のことです。

IPv6のアドレス払い出し方式の例

例えば IPv6 の RS/RA による IPv6 アドレス配布(ステートレス自動設定)においては、PC が RS で要求すれば、ルータはどんな状況でも 同じ回答(/64のプレフィックス)を RA で返しますので、その結果 PC に割り当たる IPv6 アドレスも毎回同じです。

一方、DHCPv6 による IPv6 アドレスは、プレフィックスだけでなく後半64bitも含めた128bitのアドレスを返します。他の端末への払い出し状況によって、回答する IPv6 アドレスは変わりますので、ステートフルです。

また、いきなり DHCP Request を受け取っても応答せず、必ず DHCP Discover から始まる、という点もステートフルです。

ステートレスなプロトコルの例

HTTP, UDP, IP, DNS 等

ステートフルなプロトコルの例

FTP, TCP, BGP, OSPF, EIGRP, SMTP, SSH 等

HTTPはステートレスなの?

ステートレスです

httpの代表的なコマンドは、ファイルをダウンロードするGET、情報をWebサーバへ送るPOSTがありますが、それまでのリクエスト・レスポンスには一切影響されず同じリクエストなら必ず同じ結果(レスポンス)になります

ログイン情報を維持するHTTP

でも楽天とかでログインして買い物するときって、ログイン情報とか買い物かご情報とか状況に応じてサイトの遷移(回答)が違いますよね?

これはHTTP通信の中にCookie(クッキー)と呼ばれるセッション情報を含ませており、これによってステートフルな環境を提供しているのです。

なお、Cookie は HTTP の規格には正式には含まれていないため、やはりプロトコルとしては正式にステートレスなままですが、この Cookie は非常に頻繁に根強く使われています

HTTPはステートレスなのにステートフル・インスペクションには引っ掛かるの?

はい、引っ掛かりますステートフル・インスペクションとは、『そのパケット単体を見るのではなく、それまでの会話の文脈やニュアンスを汲み取って、正しいと思われる会話のみを許可する』ものですが、これはステートレスなプロトコルに対しても有効です。

つまり、ステートフル・インスペクションは、ステートレスなプロトコルのあるリクエストに対するレスポンスが、妥当なものかを検査し、問題なければ許可、問題があれば拒否する、といったことができます。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする