ZMODEMの基本
|
●基本的に、パケット単位で送受信する。パケットは、フレームと本体からなり、パケットの種類によっては、フレームのない「サブパケット」が付随していることがある。
●XON,XOFFが使用できるように、エスケープキャラクタ(ZDLE=18H)を使用する。その他,ZDLEに続く文字は全て特殊な文字(バイト)と考えたほうがよい。
●18H,10H,11H,13H,90H,91H,93Hをエスケープする。オプションで全てのコントロールコードをエスケープする事も可。エスケープはZDLEに続いてエスケープ文字を40HでXORする。また、7FH,FFHは、それぞれZDLEに続いて'l','m'とする。
●ZCAN(=18H)を5つ受信したら、キャンセルとみなす。送信する場合は8つのZCANを送信する。
●CRCは、エスケープする前で計算する。
|
ヘッダ
|
●すべてのZMODEMフレームはヘッダーで始まる。
●ヘッダにはバイナリヘッダーとヘキサヘッダー(1バイトの数値を2バイトの16進文字であらわす)があり、バイナリヘッダーには32ビットCRCと16ビットCRCがある。
●受信側はヘキサヘッダーを使用する。送信側は、バイナリーデータサブパケットがないフレームではヘキサヘッダーを使用する。
●ヘッダタイプによっては、いくつかのバイナリーデータサブパケットがヘッダに続く場合がある。1つのパケットのデータは最大1024バイトで、ZDLEでエンコードされる(エンコードする前が最大1024バイト)。
【16ビットCRCバイナリヘッダー】
・ZPAD(='*'),ZDLE,ZBIN(='A')で始まる
・1バイトのフレームタイプ(後述)。これは必要ならZDLEでエンコードする。
・4バイトのパラメータ(必要ならZDLEでエンコードする)
・2バイトの16ビットCRC(必要ならZDLEでエンコードする)
・フレームによっては、バイナリーデータサブパケット(後述)が(場合によっては複数)続く。これにも2バイトの16ビットCRCをつける
【32ビットCRCバイナリーヘッダ】
・ZPAD(='*'),ZDLE,ZBIN(='C')で始まる
・1バイトのフレームタイプ(後述)。これは必要ならZDLEでエンコードする。
・4バイトのパラメータ(必要ならZDLEでエンコードする)
・4バイトの32ビットCRC(必要ならZDLEでエンコードする)
・フレームによっては、バイナリーデータサブパケット(後述)が(場合よっては複数)続く。これにも4バイトの32ビットCRCを付ける
【16ビットヘキサヘッダ】
・ZPAD(='*'),ZPAD,ZDLE,ZBIN(='B')で始まる
・ヘキサ表現の1バイトのフレームタイプ(後述)。結局2バイトになる。
・ヘキサ表現の4バイトのパラメータ。結局8バイトになる。
・ヘキサ表現の2バイトの16ビットCRC。結局4バイトになる。
・CR(0DH),LF(0AH),XON(11H)。ただし,フレームタイプがZACK、ZFINの場合は付けない。
【サブパケット部】
・データ
・ZDLE
・ZCRCx
-
ZCRCE(='h'):このフレームでサブパケットは終了
-
ZCRCG(='i'):次のフレームにサプパケットが続いている
-
ZCRCQ(='j'):次のフレームにサブパケットが続いている。ZACKを要求するが応答待ちは行わない
-
ZCRCW(='k'):次のフレームにサブパケットが続いている。ZACKを待つ
・CRC:16ビットまたは32ビット
|
パケットの種類
|
フレームタイプの種類です。
コード シンボル 方向 意味
00h ZRQINIT 送→受 ファイル転送の開始
01h ZRINIT 受→送 状況の通知
02h ZSINIT 送→受 エスケープ処理の通知
03h ZACK 双方向 正常受信応答
04h ZFILE 送→受 ファイル送信開始
05h ZSKIP 受→送 ファイル転送スキップ指示
06h ZNAK 双方向 ヘッダーエラー応答
07h ZABORT 受→送 ユーザーによる中断
08h ZFIN 双方向 ファイル転送終了
09h ZRPOS 受→送 転送ポインタ指示
0Ah ZDATA 送→受 データ転送開始
0Bh ZEOF 送→受 1ファイル転送終了
0Ch ZFERR 双方向 ファイルエラー
0Dh ZCRC 双方向 CRCファイルチェック
0Eh ZCHALLENGE 受→送 セキュリティチェック
0Fh ZCOMPL 受→送 コマンド実行終了
10h ZCAN (内部使用)
11h ZFREECNT 送→受 受信側残量チェック
12h ZCOMMAND 送→受 コマンド実行
送信側がZRQINITを送信する事で始まり、ZFINを送信側、受信側の順でお互いに送り合っておわります。そのあと、送信側は'OO'(アルファベットの’O’です)を送ってきますが、無視して構いません。実際、作者の通信ソフトは無視しています。
それぞれの意味については、主要なもの(というか、Peopleでのやり取りに必要だったもの 汗)について、詳しく解説します。
|