YMODEM
読み:ワイモデム
外語:YMODEM

 XMODEMをベースとしたファイル転送プロトコルの一つ。名称は、Xの次だからYなのだと思われる。
目次

概要
 XMODEMと比較し、次のような特徴を持つ。
 XMODEM 1024/CRCに、ファイル情報の自動転送機能を付けたようなもの、ともいえる。

特徴
 XMODEM(128)と比較して大幅に転送効率を改善した。しかしエラー制御のオーバーヘッドは依然残されたままとなっている。
 複数ファイルの連続転送をするため、ファイル名、ファイルサイズ、日付、ファイル属性なども送信することができる。
 通常YMODEMといえばバッチ転送有りのものを指すのだが、日本ではバッチ転送無しのものも作られてしまったため、バッチ転送ありのものをYMODEM/BATと呼ぶようになった。但し、プロトコル自体はどちらも同じものである。海外ではバッチ転送ありで固定である。

仕様
 基本的なプロトコルは、XMODEMとほぼ同じで、両方に対応した実装を作ることも難しくない。

シーケンス
 誤り訂正チェックサムならNAK、CRCなら'C'を送信することから始まるのも同様である。
 データ長が128バイトならブロック開始文字がSOH、1024バイトならSTXであるのも同様である。
 最大の差は、ヘッダー情報がある点で、これによって受信側はX/YMODEMの自動認識も可能である。
 その他の差として、ヘッダーを送った後と、ファイルを一つ送った後のACKに、続けて'C'またはNAKを送信する。後者は、複数のファイルを連続して送る、バッチ転送に対応するためである。

ヘッダー情報
 XMODEMの場合、ブロック番号1から始まるが、YMODEMはこれに対し、ブロック番号0としてヘッダー情報を最初に送信する。
 ヘッダーは、データ部に格納され、余った部分はNUL(0/0、0x00)で埋める。^Z(1/10、0x1A)ではないので注意。
 データ部の最初に、ファイル名ASCIIZで格納する。これは必須である。フルパスでファイル名を格納する場合、MS-DOSやWindowsのパスの区切り\は、/に変換する。
 ファイル名、0x00に続いて、最大で次の3情報を格納できる。
  1. ファイルサイズ
  2. タイムスタンプ
  3. (UNIXの)ファイルモード
 サイズは10進文字列で、タイムスタンプはUNIXのThe Epochつまり1970年1月1日00:00:00(UTC)からの経過秒数を10進文字列で、記述する。ファイルモードは100644、のような形式の8進文字列で記述する。
 この情報は、間を空白(2/0、0x20)で区切って記述する。

バッチ転送
 バッチ転送においては、複数をファイルを連続して送るので、ファイルの区切りのシーケンスが存在するのが、XMODEM等に対する特徴と言える。
 送信側は、一つのファイルが終わったらEOTを送る所はXMODEM等と同様だが、受信側は一旦故意にNAKを返す。送信側はそれに対しEOTを再送し、受信側がACKを返して一つのファイル送信を終える。
 そして、受信側は'C'またはNAKを送信し、次のファイルの送受信をする。
 全ファイルが転送されたら、送信側は、送信側からの次のファイル要求に対して、ブロックのデータ内容を全てNUL(0/0、0x00)で埋めたヘッダー情報(ブロック番号0)を送信する。受信側はこれを見て一連の送信が終了した旨を認識し、これにACKを返信して終了する。

実装
 mmmやNET-COCKなどでは最後まで現役のプロトコルだった。
 YMODEMが長く愛用されたのは、MLINKのような垂れ流しではなくエラーチェックがしっかりされている点、ZMODEMの仕様は複雑すぎてプログラムが追いつかなかった、更にWTERMなどの通信ソフトにプロトコルが内蔵された、などが挙げられる。
 なお、細かいところで仕様が決まっていないので方言が若干存在しているという問題もある。例えばKT-BBSや最新のmmmのYMODEM転送はうまくいかないことがあり、よく問題となった。

再検索