魔術新手症候群

魔术新手症候群（英语：Sorcerer's Apprentice Syndrome，简称SAS）是一个糟糕的网络协议瑕疵，在原先的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将被直接忽略。