魔術新手症候群

魔術新手症候群（，簡稱）是一個糟糕的網路協議瑕疵，在原先的TFTP（RFC 783）版本裡發現。會被如此命名是因為SAS的細節很像《幻想曲》电影裡，魔法師的學徒中學徒所引發的災難：造成在傳送的過程封包不斷的被複製增長。這個問題的產生是因為一個在網路上已知的錯誤，由於協定的設計者在設計協定時沒有考慮到，與TFTP的機制細節互相影響而產生SAS。

技術背景
TFTP以一種很簡單的方式運作：在任一時刻外部網絡中只有一個數據包處于傳輸中，並且任一方每接收到一個包，就要又發送一個新的包來作為回復（一直到文件傳輸完畢）。TFTP的技術文檔上說，任何時間收到一個包，接收者必須發送相應的“應答包”。於是，一個數據塊的接受觸發了一個“確認”，而“確認”又觸發了下一個數據塊的發送。這聽起來可能相當正常，但實際上卻導致了災難的發生。

TFTP，同一切建立在不可信連接上的協議一樣，包含有超時機制。比方說，如果它做了某件事並期待接收者應答（一個很平常的例子是它發送了一個數據包），它就開啟一個計時器，如果預定時間已到卻仍沒有回復，它就要采取某些行動：通常，就是指把原來的數據包再發送一次。

SAS的細節
當一個數據包在網絡傳輸中只是延遲，而不是丟失時，魔術新手癥候群就發生了。此時超時已經發生，于是原來的數據包的一個副本被重新發送，為了去代替那個“丟失”的包。但是，第一個數據包并沒有丟失，于是，根據TFTP的文檔的“收到任何的數據包都強制性地回復一個應答包”的規定，產生了兩個回復（每個對應一個副本）。這又導致兩個新的回復，等等。一個典型的場景是這樣的：

電腦S（source）發送了“數據塊X”給電腦D（destination）。

電腦D收到“數據塊X”，發送收到“數據塊X”的確認給電腦S。

不幸的是包含有對“數據塊X”的確認的包在傳輸中延遲了。

電腦S的計時器超時，重新向電腦D發送“數據塊X”。

電腦S收到了延遲到達的對“數據塊X”的確認，然后發送下一個數據塊——“數據塊X+1”。

電腦D收到了“數據塊X”的第二份副本，又發了一個“確認”給電腦S。

電腦D收到了“數據塊X+1”，向電腦S發送了對“數據塊X+1”的確認。

電腦S收到對第二份對“數據塊X”的確認，又重新發送數據塊“數據塊X+1”。

電腦S收到對“數據塊X+1”的確認，發送“數據塊X+2”。

電腦D收到了“數據塊X+1”的第二個副本，又向電腦S發送了第二個對“數據塊X+1”的確認。

電腦D收到了“數據塊X+2”，向電腦S發送對“數據塊X+2”的確認。

可以看出現在情形穩定下來了，并不斷重復：之后的每一個包都加倍了（就是說，有兩個一樣的副本都通過互聯網的傳輸）。

更糟的是，包數量的增加很有可能導致堵塞，可能又會導致新的包的延遲，而這又會導致新一輪的包數量的加倍。不用說，如今，情況就像滾雪球一樣，新的副本會不斷地產生——這就是“魔術新手症候群”這一名稱的由來。

對一個小的文件來說，傳輸會完成，而那些同樣的包最終會在互聯網上消失。而如果文件較大，充血性崩潰就會發生；只有當傳輸最終失敗后，大量的包才從互聯網上消失。

修正SAS

修正SAS十分地簡單：在第二版的TFTP（RFC 1350）說明裡指出只有第一個ACK會被承認並引發下一個資料區塊的傳送，同一份資料的ACK將被直接忽略。

另見
廣播風暴
延伸閱讀

 Bob Braden（editor）,Requirements for Internet Hosts -- Application and Support（RFC 1123, USC/Information Sciences Institute, October 1989）See section 4.2
Category:网络协议
Category:程式錯誤