마법사의 도제 증후군
Sorcerer's Apprentice SyndromeSizarder's Apprentice Syndrome(SAS)는 TFTP의 원래 버전에 있는 네트워크 프로토콜 결함입니다.이것은 괴테의 1797년 시 "Der Zauberlehrling" (1940년 애니메이션 영화 판타지아의 "Sorcerer's Apprantice" 세그먼트에 의해 대중화됨)의 이름을 따서 지어졌는데, 그 이유는 그 운영의 세부 사항이 마법사의 견습생에게 닥친 재앙과 매우 유사하기 때문입니다: 이 문제는 전송에서 모든 패킷의 계속 증가하는 복제로 귀결되었습니다.
이 문제는 TFTP 프로토콜 설계자의 실수로 인해 TFTP 프로토콜 설계 시 고려되지 않은 기존의 네트워크 장애 모드에 의해 발생하였습니다. 장애 모드는 TFTP 메커니즘의 몇 가지 세부 사항과 상호 작용하여 SAS를 생성했습니다.
기술 배경
TFTP는 간단한 잠금스텝으로 동작합니다.항상 미결 패킷은 1개뿐이며, 어느 한쪽이 수신한 패킷은 모두 응답으로1 개의 패킷이 송신됩니다(전송이 종료될 때까지).TFTP 사양에서는, 패킷이 수신될 때마다, 수신측은 적절한 응답 패킷을 송신할 필요가 있습니다.따라서, 데이터 블록의 수신은 '승인'의 송신을 트리거하고, 승인 수신은 다음 데이터 블록의 송신을 트리거한다.
또한 TFTP는 신뢰할 수 없는 네트워크상에서 동작하도록 설계된 모든 프로토콜과 마찬가지로 타임아웃도 포함합니다.패킷을 송신하면, 응답이 예상되기 때문에, 타이머가 개시됩니다.응답이 수신되지 않고 타이머가 기한이 만료되면, 몇개의 액션이 실행됩니다(통상은 원래의 패킷을 재발송신합니다).
세부 사항
SAS는 패킷이 인터넷 워크에서 손실된 것이 아니라 타임아웃이 발생한 후(양쪽에서) 단순히 지연되고 나중에 정상적으로 전달되었을 때 발생했습니다.
타임 아웃에 의해, 「lost」패킷을 대체하기 위해서, 이전의 패킷의 2번째 카피가 송신됩니다.단, 첫 번째 복사본은 손실되지 않았습니다.TFTP 사양에 따르면 패킷을 수신하면 항상 응답 패킷이 생성되기 때문에 2개의 응답(복사마다 1개씩)이 생성되었습니다.그들은 그들에게 두 개의 회신을 생성하도록 강요했다.일반적인 시나리오는 다음과 같습니다.
- 컴퓨터 S(소스)가 데이터 블록 X를 컴퓨터 D(대상)로 전송
- 컴퓨터 D가 블록 X를 수신하여 X에 대한 확인 응답을 S로 되돌립니다.
- X에 대한 확인 응답을 포함하는 패킷이 인터넷 워크에서 지연됩니다.
- 컴퓨터 S가 타임아웃하여 데이터 블록 X를 D로 재발송합니다.
- 컴퓨터 S는 X에 대한 지연 확인을 수신하여 데이터 블록 X+1을 전송합니다.
- 컴퓨터 D는 블록 X의 두 번째 복사본을 수신하고 X에 대한 다른 확인 응답을 S로 보냅니다.
- 컴퓨터 D가 블록 X+1을 수신하여 X+1에 대한 확인 응답을 S로 되돌립니다.
- 컴퓨터 S는 X에 대한 두 번째 확인 응답을 수신하고 데이터 블록 X+1의 두 번째 복사본을 전송합니다.
- 컴퓨터 S는 X+1에 대한 확인 응답을 수신하고 데이터 블록 X+2를 전송합니다.
- 컴퓨터 D는 블록 X+1의 두 번째 복사본을 수신하고 X+1에 대한 다른 확인 응답을 S로 전송합니다.
- 컴퓨터 D가 블록 X+2를 수신하여 X+2에 대한 확인 응답을 S로 되돌립니다.
이 시점에서 상황은 안정되어 반복되고 있음을 알 수 있습니다.그 이후 모든 패킷은 복제됩니다(즉, 2개의 동일한 복사본이 인터넷 워크를 통해 전송됩니다).
게다가 네트워크상에서 송신되는 패킷의 수가 증가하면, congestion가 발생할 가능성이 높아져, 타임 아웃 후에 패킷이 다시 지연해, 타임 아웃에 의해서 또 다른 중복 패킷이 생성되어 그 이후, 각 패킷의 3번째 카피가 송신됩니다.말할 필요도 없이, 그 시점에서는, 통상, 상황은 눈덩이처럼 불어나, 한층 더 카피가 작성됩니다.따라서, 이 행동 패턴의 이름이 붙여졌습니다.
작은 파일의 경우 전송이 완료되어 중복된 패킷이 최종적으로 인터넷 워크에서 배출됩니다.다만, 파일이 큰 경우는, congestion collapse가 발생해, 전송에 실패했을 때만, 대량의 패킷이 인터넷 워크로부터 배출됩니다.
솔루션
SAS에 대한 수정에는 [1]루프를 차단하기 위해 TFTP 사양을 변경하는 작업이 포함되었습니다.수신된 확인 응답의 첫 번째 인스턴스만 다음 데이터 블록이 전송됩니다.특정 데이터 블록에 대한 확인 응답의 추가 복사본은 무시되므로 재전송 루프가 끊어집니다.새 버전의 프로토콜에서는 블록이 시간 초과 시에만 재전송됩니다.
또, 이 변경에 의해서, 패킷이 소실되면, 송신자가 송신한 마지막 패킷의 재발송신이 발생하기 때문에, 재발송 타이머를 생략하는 것으로, 수신측(종종, 저레벨 언어로 작성된 부트스트랩 프로그램)의 실장을 심플화할 수 있습니다.단, 타이머를 유지하면 잃어버린ACK를 보다 효율적으로 처리하는 등의 이점이 있습니다.
레퍼런스
- ^ Braden, Robert, ed. (October 1989). "Sorcerer's Apprentice Syndrome". Requirements for Internet Hosts -- Application and Support (rfc). IETF. pp. 43–45. sec. 4.2.3.1. doi:10.17487/RFC1123. RFC 1123. Retrieved 2012-10-05.
