魔法使いの弟子症候群(Sorcerer's Apprentice Syndrome, SAS)は、
インターネットプロトコルのTFTPにおける重要な欠陥によって生じる問題です。この名称は、
ゲーテの有名な詩『
魔法使いの弟子』に由来しており、その詩では、魔法をかけられた箒が増え続ける様子が描かれています。この現象とTFTPにおける
パケットの増殖が類似しているところから、この名がつけられました。ここでは、SASがどのように発生するのか、またその対策について詳しく説明します。
技術的背景
TFTP(
Trivial File Transfer Protocol)は、シンプルなファイル転送プロトコルであり、通常1つの
パケットをロックステップで処理します。このプロトコルは、送信側が送った
パケットに対して、受信側が確認応答を返すという流れで動作します。TFTPは、信頼性が低いネットワーク上でも運用可能なようにタイムアウト機能を備えています。つまり、送信側は、
パケットを送信後に指定の時間内に応答がなければ、その
パケットを
再送します。
SASの発生過程
SASは、次のような状況で発生します。例えば、送信側の端末(S)がデータブロックXを受信側(D)に送信したとします。Dはそれを受信し、確認応答をSに送りますが、これがネットワーク内で遅延します。Sでは設定されたタイムアウトが発生すると、再びデータブロックXをDに送り直します。ここで問題が生じます。最初のXも
再送されたXも両方ともDに到着します。
Dはそれぞれのブロックに対して確認応答を返すため、Sは双方の確認応答を受け取ります。この結果、Sは同じデータブロックを
再送することが続き、Dも同じ確認応答を送り続けることになります。これが繰り返されることによって、ネットワーク上で同じデータが急増し、最終的にはネットワークの過負荷・遅延を引き起こします。これはまさに、
魔法使いの弟子が箒を増やし続ける様子に似ています。
特に、小さなファイルの転送ではこの問題はそれほど顕著にはならないものの、大きなファイルを扱う場合には膨大な
パケットが生成され、実用上は大きな問題となります。
解決策
この問題を軽減するために、TFTPのプロトコル仕様が改訂されました。複数の確認応答を受け取った場合、最初の確認応答に対してのみ次のデータブロックを送信するように変更され、これにより余分な
パケットの生成を防ぐことが可能となりました。この仕様変更により、受信側のプログラムでは
再送のタイマーを省略できるようになり、効率的なデータ転送が実現しました。
以上のように、
魔法使いの弟子症候群は、データ通信における重要な問題であり、適切な対策を取ることでその発生を防ぎ、円滑なデータ転送を促進することが可能となります。