YMODEM
読み:ワイモデム
外語:YMODEM
XMODEM
をベースとしたファイル転送プロトコルの一つ。名称は、Xの次だからYなのだと思われる。
目次
概要
特徴
仕様
シーケンス
ヘッダー情報
バッチ転送
実装
概要
XMODEMと比較し、次のような特徴を持つ。
複数ファイルの連続転送(バッチ転送)に対応
各ファイルのファイル情報の送信が可能
チェックサム
だけでなく
CRC
も使用可能
ブロックサイズを128バイトと1024バイトから選択可能(ブロックごとに)
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情報を格納できる。
ファイルサイズ
タイムスタンプ
(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転送はうまくいかないことがあり、よく問題となった。
再検索