2025/07/21 20:14 Sorcerer's Apprentice Syndrome

ロボ子、今日はSorcerer's Apprentice syndrome (SAS)について話すのじゃ!

SAS、ですか?それは一体何でしょう、博士?

これはTFTPの初期バージョンにおけるネットワークプロトコルの欠陥のことじゃ。ゲーテの詩「魔法使いの弟子」にちなんで名付けられた、面白い名前じゃろ?

魔法使いの弟子…なんだか難しそうですね。具体的にはどんな問題が起こるんですか?

転送におけるすべてのパケットが際限なく複製される問題なのじゃ!

パケットが際限なく複製…それは大変なことになりそうですね。

TFTPはロックステップで動作するから、常に1つのパケットが未処理の状態なのじゃ。受信したパケットごとに応答パケットが送信される仕組みになっておる。

なるほど。信頼性の低いネットワークを想定しているから、タイムアウトと再送信の仕組みがあるんですね。

そうじゃ!SASは、パケットがインターネットワーク内で遅延し、タイムアウト後に配信された場合に発生するのじゃ。

タイムアウトで再送信されたパケットが、さらに重複を生むんですね。

その通り!TFTP仕様では、パケットの受信ごとに応答パケットの生成が強制されるから、重複した応答が生成され、パケットの複製が繰り返されるのじゃ!

パケットが増え続けると、ネットワークが輻輳してしまいますね。

そう!ファイルが大きい場合、輻輳崩壊が発生し、転送が失敗するまでパケットがインターネットワークから排出されないのじゃ。

恐ろしい…。

でも大丈夫!解決策はあるのじゃ。TFTP仕様を修正して、最初の受信確認のみが次のデータブロックを送信するように変更すれば良いのじゃ。

重複した受信確認は無視して、再送信ループを遮断するんですね。

その通り!新しいバージョンでは、ブロックはタイムアウト時にのみ再送信されるのじゃ。

受信側の実装を簡素化するために、再送信タイマーを省略することもできるんですね。

そうじゃが、タイマーを保持することで、ACKの損失に効率的に対処できるのじゃ。

なるほど、博士。勉強になりました!

ところでロボ子、魔法使いの弟子といえば…プログラミングで無限ループに陥るのも、ある意味SASみたいなものじゃな!

あはは、確かにそうかもしれませんね!でも、魔法使いの弟子と違って、私たちはデバッグできますから!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。