{{위키데이터 속성 추적}}
{{Infobox networking protocol
|       title = XMODEM
|        logo = 
|    logo alt = 
|       image = 
|   image alt = 
|     caption = 
|    is stack = 
|     purpose = 파일 전송 프로토콜
|   developer = [[워드 크리스텐슨]]<ref>[https://books.google.com.au/books?id=9eJxx_ZGKngC&lpg=PA451&dq=%22Ward%20Christensen%22&pg=PA451#v=onepage&q=%22Ward%20Christensen%22&f=false Telecommunications: XMODEM: A Standard Is Born], By Alfred Glossbrenner, PC Mag, 17 April 1984, Page 451-452, ''... but the protocol itself was long ago placed in the public domain by its creator, Chicagoan Ward Christensen. Since its introduction in 1978, XMODEM ...''</ref><ref>[https://books.google.com.au/books?id=EzAEAAAAMBAJ&lpg=PA26&dq=%22Ward%20Christensen%22&pg=PA26#v=onepage&q=%22Ward%20Christensen%22&f=false In Focus: History lesson: Ward Christensen's free free-exchange software], By Michael Swaine, InfoWorld, 1 Nov 1982, Page 26</ref>
|        date = {{시작 날짜와 나이|  1977  |  |  }}<!--Fill in: Year (4 digits), month and day (2 digits)-->
|    based on = 
|  influenced = [[YMODEM]] 외 다수
|    osilayer = 
|       ports = 
|        rfcs = 
|    hardware = [[모뎀]]
}}
'''XMODEM'''은 [[워드 크리스텐슨]](Ward Christensen)이 1977년 자신의 '''MODEM.ASM''' [[단말 에뮬레이터]]에 사용할 목적으로 빠른 [[해커|해킹]]으로 개발된 단순 [[파일 전송]] 프로토콜이다. 사용자들은 양측이 MODEM을 사용하는 경우 컴퓨터 간 파일을 전송할 수 있게 허용하였다. 케이스 피터슨(Keith Petersen)은 "조용한 모드"(quiet mode)를 무조건 활성화시키는 사소한 업데이트를 진행하였는데 그 결과 XMODEM이 탄생하게 되었다.<ref>Ward Christensen, [http://www.bbsdocumentary.com/software/AAA/AAA/CBBS/memories.txt "Memories"], 25 November 1992</ref>

XMODEM은 초기 [[전자 게시판]](BBS) 시장에서 큰 인기를 끌었는데, 이는 대체적으로 구현이 매우 단순하였기 때문이었다. 한편으로는 상당히 비효율적이어서 모뎀 속도가 증가될 때 이러한 문제로 인해 성능을 개선하거나 프로토콜의 다른 문제를 해결하기 위해 수많은 XMODEM 수정판이 개발되었다. 크리스텐슨은 자신의 오리지널 XMODEM이 "컴퓨터 역사상 가장 많이 수정된 하나의 프로그램"이 될 것이라 생각하였다.<ref>{{웹 인용|url=http://www.well.com/user/hlr/vcbook/vcbook4.html|title=The Virtual Community}}</ref> Chuck Forsberg는 자신의 [[YMODEM]] 프로토콜에 수많은 수정사항을 집약했지만 구현을 잘 하지 못하여 나중에 나올 자신의 [[Z모뎀]] 프로토콜에 재병합되기 전까지는 추가적인 균열이 발생되었다.

대부분의 파일 전송 프로토콜과 같이 XMODEM은 원래의 데이터를 일련의 [[패킷]]으로 쪼개어 수신자에게 보내며 여기에 추가 정보를 담고 있어서 수신자가 어느 패킷을 올바르게 받았는지를 결정할 수 있게 한다.

== 패킷 구조 ==
오리지널 XMODEM은 128바이트 데이터 패킷을 사용하였으며, 이는 [[CP/M]] [[플로피 디스크]]에 사용된 기본 블록 크기와 동일하다.

== XMODEM-CRC ==
오리지널 프로토콜에 사용된 체크섬은 극히 단순했으며 패킷 내 오류는 눈치채지 못할 수 있었다. 이로 인해 John Byrns는 '''XMODEM-CRC'''를 도입하게 되었고,<ref>{{웹 인용
| url = http://techheap.packetizer.com/communication/modems/xmodem.html
| title = XMODEM Protocol Overview
| first = Ward
| last = Christensen
| authorlink = Ward Christensen
| date = 1 January 1982
| 확인날짜 = 2017-10-02
| archive-date = 2017-10-03
| archive-url = https://web.archive.org/web/20171003025834/http://techheap.packetizer.com/communication/modems/xmodem.html
| url-status = 
}}</ref><ref>{{웹 인용
| url = http://techheap.packetizer.com/communication/modems/xmodem-ymodem_reference.html
| title = XMODEM/YMODEM PROTOCOL REFERENCE
| first = Chuck
| last = Forsberg
| authorlink = Chuck Forsberg
| date = 11 September 1986
| 확인날짜 = 2017-10-02
| archive-date = 2017-10-02
| archive-url = https://web.archive.org/web/20171002215725/http://techheap.packetizer.com/communication/modems/xmodem-ymodem_reference.html
| url-status = 
}}</ref> 이는 8비트 체크섬 대신 16비트 [[순환 중복 검사|CRC]]를 사용한다.
CRC는 패킷 내 데이터뿐 아니라 위치까지 인코딩하므로 체크섬이 놓칠 수 있는 비트 치환 오류를 감지할 수 있다.

== 더 높은 스루풋 ==
송신자가 <code><ACK></code> 또는 <code><NAK></code> 메시지를 수신자로부터 받아야할 것을 XMODEM 프로토콜이 요구하기 때문에 매우 속도가 느린 경향이 있다.

이러한 문제를 해결하기 위해 수많은 새로운 버전의 XMODEM이 도입되었다.

=== WXModem ===
'''WXmodem'''("Windowed Xmodem"의 준말)은 피터 보스웰(Peter Boswell)이 개발한 높은 [[랙|레이턴시]] 데이터 링크에 최적화된 Xmodem [[파일 전송]] 프로토콜의 한 종류이다.<ref>[https://github.com/cpeterso/wxmodem WXmodem 4 program and source code]</ref> 최대 512 [[바이트]]의 블록 크기를 지원한다. Xmodem은 정지 및 대기 프로토콜을 사용하는 반면 WXmodem은 슬라이딩 윈도 프로토콜을 사용한다.

== 각주 ==
{{각주}}

== 외부 링크 ==
* [http://textfiles.com/programming/ymodem.txt XMODEM / YMODEM Protocol Reference by Chuck Forsberg], October 10, 1985
* [http://pauillac.inria.fr/~doligez/zmodem/ymodem.txt XMODEM / YMODEM Protocol Reference by Chuck Forsberg], June 18, 1988 (document reformatted October 14, 1988) [https://web.archive.org/web/20121110151951/http://www.techfest.com/hardware/modem/xymodem.htm (HTML version with text issues)]
* [http://wiki.synchro.net/ref:xmodem XMODEM / XMODEM-CRC / WXMODEM File Transfer Protocols], synchro.net
* [http://www.adontec.com/xmodem_e.htm Adontec XMODEM/32k and XMODEM/64k extensions], adontec.com

[[분류:네트워크 프로토콜]]
[[분류:PC통신]]