이모뎀
YMODEM| 통신 프로토콜 | |
| 목적 | 파일 전송 프로토콜 |
|---|---|
| 개발자 | 척 포르스버그 |
| 소개 | 1985년;( |
| 에 기반을 둔 | 엑스모뎀 |
| 영향받은 | Z모뎀 |
| 하드웨어 | 모뎀 |
YMODEM은 모뎀을 사용하여 함께 연결된 마이크로컴퓨터 사이에 사용되는 파일 전송 프로토콜이다.그것은 주로 게시판 시스템과 파일을 주고 받는 데 사용되었다.YMODEM은 척 포르스버그에 의해 XMODEM의 확장으로 개발되었으며, 그의 CP/M YAM 프로그램에서 처음 구현되었다.처음에는 YAM이라고도 알려졌으며, 1985년 원래의 XMODEM의 작가인 워드 크리스텐센에 의해 정식으로 "YMODEM"이라는 이름이 붙여졌다.
YMODEM은 다른 확장형 XMODEM 품종에서 발견되는 특징을 결합하여 XMODEM을 세 가지 방식으로 확장했다.XMODEM-CRC와 마찬가지로 YMODEM은 8비트 체크섬을 16비트 순환 중복 검사(CRC)로 대체했지만 선택사항 대신 기본 보정 형태로 만들었다.TeLink에서 파일 이름과 크기를 전송하는 "블록 0" 헤더를 추가했는데, 이는 일괄 전송(단일 세션에서 다중 파일)을 허용하고 파일 끝에 패딩을 추가할 필요가 없게 했다.마지막으로, YMODEM은 XMODEM-1k에서와 같이 블록 크기를 원래 128바이트의 데이터에서 1024로 늘릴 수 있게 하여 고속 모뎀의 처리량을 크게 향상시켰다.
Forsberg는 이러한 모든 기능을 런타임 옵션으로 사용하여 표준을 구축하여 비 YAM 시스템에 연결할 때 단일 프로토콜 드라이버가 XMODEM-CRC 또는 심지어 XMODEM으로 다시 되돌릴 수 있도록 했다.그는 프로그래머들이 어떤 주어진 플랫폼에서든지 가능한 한 많은 이러한 특징들을 구현하기를 원할 것이라고 믿었다.그는 대부분의 구현이 실제로 1k 블록 크기에 불과하며, YMODEM 이름을 계속 사용하면서 "블록 0"을 구현하지 못하고 있다는 사실을 알고 실망했다.그 결과 상호 호환되지 않는 많은 YMODEM 구현이 발표되었고, 완전한 표준을 지원하는 버전을 명확히 나타내기 위해 YMODEM Batch라는 이름을 사용하게 되었다.
특징들
엑스모뎀
원래의 XMODEM은 매우 단순한 프로토콜이었고 그것이 성공의 이유였다; XMODEM은 매우 제한된 프로세서와 스토리지를 가진 사람들조차도 그 시대의 거의 모든 기계에서 구현될 수 있었다.전송될 데이터를 128바이트 패킷으로 분해해 3바이트 헤더와 1바이트 체크섬 풋러를 추가하고, 결과 132바이트 패킷을 순서대로 내보내는 방식으로 작동했다.수신 컴퓨터는 128바이트의 데이터로부터 체크섬을 다시 계산했고, 만약 그것이 바닥글에 전송된 체크섬과 일치한다면, 그것은 , 그리고 만약 그것이 일치하지 않는다면, a . 송신자가 다음 패킷을 보냈고, 반면에 그것은 마지막 패킷을 다시 보내게 되었다.
프로토콜에 여러 가지 문제가 있었다.간단한 체크섬을 사용했다는 것은 몇몇 흔한 오류들이 눈에 띄지 않게 될 수 있다는 것을 의미했다.또는 더 빠른 속도 링크 또는 상당한 지연 시간을 가진 링크에서 느린 성능으로 이어지는 작은 패킷 크기와 요구 사항.마지막으로, 파일 전송에 대한 세부사항이 없어 모든 파일을 수동으로 시작해야 했는데, 이는 많은 작은 파일들이 전송되고 있을 때 번거로움이 될 수 있었다.
이러한 문제에 대한 해결책은 1980년대 초반에 개발되었다. XMODEM-CRC는 체크섬을 16비트 순환 중복 검사(CRC)로 대체하였는데, 이는 일반적인 오류에 훨씬 더 저항적이었다. XMODEM-1k는 패킷 크기를 128바이트에서 1024로 확장하여 고속 연결에서의 성능을 향상시켰으며, WXMODEM이나 SEALINK와 같은 다른 것들은 대신하여 개발되었다.슬라이딩 윈도우 시스템을 도입하여 약간의 복잡성을 감수하고 성능과 지연 시간을 모두 극복했다.여전히 TeLink와 모뎀7과 같은 다른 것들은 하나의 전송이 여러 개의 파일을 포함할 수 있도록 파일 정보를 추가했고, 하나의 명령으로 파일 묶음을 보낼 수 있게 했다.
이모뎀
유감스럽게도, 이러한 확장된 버전에는 이러한 기능이 모두 포함되어 있지 않았다.CP/M "Yet Another 모뎀 프로그램" 또는 YAM의 저자인 척 포스버그는 이 모든 옵션을 지원하는 단일 프로토콜 드라이버를 작성하기로 결정했다.사용자가 전송을 시작할 때 명령행에 CRC를 사용하고 싶다고 말하는 등 원하는 옵션을 표시할 수 있었다.이 프로토콜은 이 스타일을 시도하도록 작성되었지만, 원격 소프트웨어가 구현한 어떤 역량과 일치하도록 우아하게 예비되었다.
중단
원래 XMODEM의 한 가지 문제는 일단 시작되면 이전을 중단할 수 있는 정의된 방법이 없다는 것이었다.일반적인 해결책은 사용자가 요청하면 이후의 모든 패킷으로 s를 전송하는 것이었다.XMODEM 프로토콜은 전송을 중단하는 데 10초의 제한을 정의했고, 각 패킷은 전송하는 데 1초가 걸릴 수 있기 때문에, 이것은 송신자가 단순히 무시되는 데이터를 지속적으로 전송하는 10초의 지연이 있다는 것을 의미했다.
일부 구현에서는 수신된 패킷 대신 또는 패킷의 끝에 a를 전송하여 중단을 나타내는 기능을 추가했다.유감스럽게도, 라인 노이즈에 의해 a가 생성되어 중단을 유발할 수 있는 가능성이 있었다.따라서 YAM은 이를 약간 수정하여 송신기 끝에서 즉시 "그레이스 다운"을 수행할 2초의 연속성을 요구하였다.
CRC
XMODEM-CRC에 CRC 지원이 도입되었다.이것은 원래 프로토콜에 대한 매우 간단한 변경이었다. 요청하면, 수신자는 CRC 옵션을 지원하는 원격 송신자가 정상적으로 패킷 전송을 시작하지만 1바이트 체크섬이 아닌 바닥글에 16비트 CRC를 가지고 패킷 전송을 시작할 것이다.YAM은 변경 없이 이 옵션을 지원했다.
1k
1024바이트 패킷은 XMODEM-1k에 도입되었다.이 버전은 수신기에서 트리거 문자를 변경하지 않았으므로 송신자는 수신자가 더 큰 패킷을 지원하는지 알 방법이 없었다.대신, XMODEM-1k는 연결의 양쪽 끝에 별도의 프로토콜로 제시되었다.그러한 연결이 시작되었을 때, 송신자는 패킷으로 1024바이트 또는 128바이트 중 하나를 보낼 수 있었는데, 이는 정상보다 헤더에 문자가 있는 큰 패킷을 의미한다. 일반적으로 많은 양의 패딩을 보내지 않기 위해 마지막 몇 개의 패킷만이 작은 패킷을 사용한다.또한 1k는 모든 연결에 대해 CRC를 가정했다.YAM은 변경 없이 1k를 지원했다.
제로 패킷
모뎀7은 FidoNet 메일의 자동 전송을 지원하기 위해 첫 번째 데이터 블록을 전송하기 전에 파일 이름을 일반 텍스트로 전송하는 기능을 도입했다.이것은 신뢰할 수 없었고, TeLink는 파일 이름, 그리고 선택적으로 생성 날짜와 파일 길이와 같은 다른 데이터를 완전한 128바이트 패킷에 배치함으로써 이것을 개선했다.XMODEM은 1번 패킷으로 전송을 시작했기 때문에 TeLink는 이 패킷을 0번으로 보냈다.이 "제로 패킷" 또는 "블록 제로"는 SEAlink와 같은 다른 FidoNet 시스템에서 일반화되었다.
YAM은 제로 패킷 형식을 지원했지만, YMODEM의 많은 제3자 구현에 의해 무시되었다.하나의 구현이 제로 패킷을 인식되지 않는 버전으로 보내려고 할 때, 패킷 0은 불법이기 때문에 수신자는 당연히 패킷을 보낼 것이다.그러면 송신자는 를 전송 오류로 보고, 패킷을 다시 보내려고 할 것이고, 실패하기 전에 이것을 10번 시도했을 것이다.
완전히 명확하지 않은 이유로, YMODEM의 많은 구현은 이 기능을 구현하지 않았다.그들은 그것을 알지 못했기 때문에, 실패하기 전에 일련의 재전송 시도를 촉발시켰다.이는 사용자가 비준수 버전과 호환되는 YMODEM을 사용하기로 선택한 경우 전송이 실패한다는 것을 의미했다.그럼에도 불구하고 그러한 비준수 버전은 일반적이었다.
그 결과, YMODEM과 YMODEM Batch 모두 두 개의 별도 프로토콜로 나열되는 것이 일반적이었다.XMODEM-1k와 이러한 비호환 YMODEM의 유사성으로 인해 더 큰 혼란이 발생했는데, 이는 종종 같은 것으로 잘못 기재된 점과 유사했다.
스트리밍 지원
YMODEM-g는 오류 없는 연결에 사용되는 스트리밍 변형이다.그것은 다음 패킷을 보내기 전에 ACK가 수신되기를 기다리지 않는다.패킷 사이에 지연 시간이 도입되지 않아 프로토콜이 YMODEM보다 빠르지만 오류를 수정하는 기능이 없다.그것은 예를 들어 MNP를 지원하는 모뎀의 경우인 오류 없는 기본 연결에 의존한다.
일반적으로, YMODEM 전송은 수신자가 128바이트 형식을 CRC와 함께 사용하기를 원하거나 원래 체크섬 시스템을 사용하기를 원하는 경우 를 전송함으로써 시작될 것이다.g-프로토콜을 원할 때, 대신 송신자가 g-프로토콜을 지원하지 않으면 이를 오류로 간주하고 무시하지만, 지원하면 지속적인 스트림에서 패킷 전송을 시작한다.최종 패킷이 수신된 후에만 단일 패킷을 예상하며, 데이터의 문자 존재로 표시된다.YMODEM-g는 1k 패킷을 사용할 수 있다고 가정한다.
그러나, 이 프로토콜이 ZMODEM보다 잠재적으로 더 빠르지만, 여전히 거의 사용되지 않았다.이것은 부분적으로 다른 기능성의 결여 때문이기도 했지만, 또한 더 심각한 문제였다.16550 UART가 등장하기 전에는 직렬 포트에서 버퍼 오버런의 상당한 위험이 있었다.이는 YMODEM-g에 의해 감지되지만 블록 재전송이 불가능하므로 수정할 수 없다.수신기는 처음부터 전체 전송을 취소하고 다시 시작해야 할 것이다.반면 ZMODEM은 이전 이력서 기능이 있어 더욱 매력적이다.
참조
- 1985년 10월 10일 Chuck Forsberg에 의한 XMODEM / YMODEM 프로토콜 참조서
- 1988년 6월 18일 Chuck Forsberg에 의한 XMODEM / YMODEM 프로토콜 참조 (문서 재포맷 1988년 10월 14일)(텍스트 문제가 있는 HTML 버전)