XMODEM

Article on other languages:

del.icio.us del.icio.us
Digg Digg
Furl Furl
Reddit Reddit
Rojo Rojo
Add to OnlyWire

XMODEM(えっくすもでむ)は、バイナリ転送プロトコルの一種である。128バイト単位で非同期通信を行う。開発者の Ward Christensen がパブリックドメイン扱いで仕様を公開したため、パソコン通信で広く使われた。XMODEMを元に考案されたプロトコルも多く、またXMODEM自身にもいくつかのタイプがある。

目次

特徴

  • 構造が簡単。ただし転送効率が悪い。
  • 128バイトもしくは1024バイト単位でデータを転送する。
  • エラー検出に8ビットのチェックサムもしくは16ビットのCRC符号を利用する。
  • 転送エラーがあった場合、エラーのあったブロックを再送することができる。しかし指定したブロックからやり直す機能はない。
  • ファイル名やファイルサイズ、タイムスタンプなどのファイル情報を転送する機能はない。
  • 一度に転送できるのは1ファイルのみ(バッチ転送不能)。
  • ファイルの末尾がEOF文字(1Ah)であった場合にファイルの破損を招く可能性がある。データブロックのパディングにEOF文字を使用するが、ファイルサイズを転送する機能がないので、それがファイルデータの一部なのか「詰め物」なのか判別できないためである。
  • コントロールコードのクォート(置換)処理を行わない。このため、XON/XOFF文字によるフロー制御を行っている場合には不具合をきたす可能性がある。

XMODEMの種類

XMODEM/SUM
128バイト単位でデータを転送し、エラー検出に8ビットのチェックサムを使用する。単に "XMODEM" といった場合は XMODEM/SUM を指す場合が多い。
XMODEM/CRC
128バイト単位でデータを転送し、エラー検出に16ビットのCRCを使用することで信頼性の向上を図ったもの。
XMODEM/1k
1024バイト単位でデータを転送し、エラー検出に16ビットのCRCを使用することで転送速度と信頼性の向上を図ったもの。
Flying-XMODEM
本来はデータブロックを全て受け取り、エラーがないことを確認した上で送信側に送るACKを、データブロックを受け取り終わる前に先に送ってしまう(フライングする)ことで転送速度の向上を図ったもの。-/SUM、-/CRC、-/1kのいずれに対しても使用される。規約違反であり、性質上エラーがあっても回復することができない。

手順

SOH、STX、EOT、ACK、NAK、CANの6つのコントロールコードと文字 ’C’(43h) を使用して通信制御を行い、後述するデータブロックの単位でデータを転送する。

基本的な流れ

受信側 送信側
NAK(送信要求)
ブロック1
ACK(肯定応答)
ブロック2
ACK
(中略)
最終ブロック
ACK
EOT(転送終了)
ACK
(通信終了)
  1. 受信側が送信要求としてNAKを送出する。XMODEM/CRCもしくはXMODEM/1kではNAKではなく ’C’ を送出する。
  2. 送信側が最初のデータブロックを送出する。
  3. 受信側はブロック番号、チェックサムやCRC符号を確認し、受信したデータにエラーがないことを確認した後にACKを送出する。Flying-XMODEMではデータブロックを受け取り終わる前にACKを送出してしまう。
  4. ACKを受けた送信側は次のデータブロックを送出する。全てのデータを送出するまでこれを繰り返す。全てのデータを送出し終わった場合は、送信すべきデータが終了したことを示すEOTを送出する。
  5. 受信側がACKを送出し、通信を終了する。

エラーが発生した場合

ブロック8でエラーが発生した場合の例
受信側 送信側
ブロック7
ACK
ブロック8
(ブロック8に何らかのエラーがあった)
NAK(再送要求)
ブロック8(再度同じブロックを送出)
ACK
ブロック9

ブロック番号がおかしい、チェックサムやCRC符号とデータの間に矛盾があるなどのエラーが発生した場合、受信側はACKの代わりにNAK(否定応答)を送出する。NAKを受信した送信側は再度同じデータブロックを送出する。ブロック番号を指定して送信を要求する機能はないため、ブロック番号が連続しない場合やFlying-XMODEMの場合は中断処理(後述)を行うことになる。

中断処理

一定時間待っても相手側からの応答がない、Flying-XMODEM転送中にエラーが発生したなど、何らかの事情により転送途中に通信を終了させたい場合はCANを送出する。これは受信側・送信側のどちらが送出しても良い。

データブロック構成

ヘッダ データブロック番号 データブロック番号の1の補数 データ チェックサムもしくはCRC符号
8ビット 8ビット 8ビット 128バイトもしくは1024バイト 8ビットもしくは16ビット
ヘッダ
データのサイズを表す。128バイトであればSOH、1024バイトであればSTXをセットする。
データブロック番号
ブロック番号をセットする。1から開始して1ずつカウントアップし、255の次は0になる。
データブロック番号の1の補数
ブロック番号の1の補数(全ビットを反転させたもの)をセットする。
データ
送信するデータを128バイトもしくは1024バイト単位でセットする。送信するデータが128バイトもしくは1024バイトに満たない場合はEOFでパディングする(空いた部分を埋める)。
チェックサムもしくはCRC符号
8ビットのチェックサム、もしくは16ビットのCRC符号をビッグエンディアンでセットする。

発展

XMODEMは効率があまり良くないため、これを改良したYMODEMZMODEMなどが後に開発された。

関連項目

This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.


Giant Panda

Mercedes Car
James Bond Guide
This site monitored by SitePinger.net