XMODEMのソースを表示
←
XMODEM
移動先:
案内
、
検索
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
要求した操作を行うことは許可されていません。
このページのソースの閲覧やコピーができます。
'''XMODEM'''(えっくすもでむ)は、[[バイナリ転送プロトコル]]の一種である。128[[バイト (情報)|バイト]]単位で[[非同期通信]]を行う。開発者の Ward Christensen が[[パブリックドメイン]]扱いで仕様を公開したため、[[パソコン通信]]で広く使われた。XMODEMを元に考案されたプロトコルも多く、またXMODEM自身にもいくつかのタイプがある。 == 特徴 == *構造が簡単。ただし転送効率が悪い。 *128バイトもしくは1024バイト単位でデータを転送する。 *エラー検出に8ビットの[[チェックサム]]もしくは16ビットの[[巡回冗長検査|CRC]]符号を利用する。 *転送エラーがあった場合、エラーのあったブロックを再送することができる。しかし指定したブロックからやり直す機能はない。 *ファイル名やファイルサイズ、[[タイムスタンプ]]などのファイル情報を転送する機能はない。 *一度に転送できるのは1ファイルのみ(バッチ転送不能)。 *ファイルの末尾がEOF文字(1Ah)であった場合にファイルの破損を招く可能性がある。データブロックのパディングにEOF文字を使用するが、ファイルサイズを転送する機能がないので、それがファイルデータの一部なのか「詰め物」なのか判別できないためである。 *[[ASCII#ASCII制御文字|コントロールコード]]のクォート(置換)処理を行わない。このため、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つの[[ASCII#ASCII制御文字|コントロールコード]]と文字 ’C’(43h) を使用して通信制御を行い、後述するデータブロックの単位でデータを転送する。 === 基本的な流れ === {| class="wikitable" ! 受信側 ! ! 送信側 |- | NAK(送信要求) | → | |- | | ← | ブロック1 |- | ACK([[肯定応答]]) | → | |- | | ← | ブロック2 |- | ACK | → | |- | colspan=3 style="text-align: center;" | (中略) |- | | ← | 最終ブロック |- | ACK | → | |- | | ← | EOT(転送終了) |- | ACK | → | |- | colspan=3 style="text-align: center;" | (通信終了) |} #受信側が送信要求として'''NAK'''を送出する。XMODEM/CRCもしくはXMODEM/1kでは'''NAK'''ではなく '''’C’''' を送出する。 #送信側が最初の'''データブロック'''を送出する。 #受信側はブロック番号、チェックサムやCRC符号を確認し、受信したデータにエラーがないことを確認した後に'''ACK'''を送出する。Flying-XMODEMでは'''データブロック'''を受け取り終わる前に'''ACK'''を送出してしまう。 #'''ACK'''を受けた送信側は次の'''データブロック'''を送出する。全てのデータを送出するまでこれを繰り返す。全てのデータを送出し終わった場合は、送信すべきデータが終了したことを示す'''EOT'''を送出する。 #受信側が'''ACK'''を送出し、通信を終了する。 === エラーが発生した場合 === {| class="wikitable" |+ ブロック8でエラーが発生した場合の例 ! 受信側 ! ! 送信側 |- | | ← | ブロック7 |- | ACK | → | |- | | ← | ブロック8 |- | colspan=3 style="text-align: center;" | (ブロック8に何らかのエラーがあった) |- | NAK(再送要求) | → | |- | | ← | ブロック8(再度同じブロックを送出) |- | ACK | → | |- | | ← | ブロック9 |} ブロック番号がおかしい、チェックサムやCRC符号とデータの間に矛盾があるなどのエラーが発生した場合、受信側は'''ACK'''の代わりに'''NAK'''(否定応答)を送出する。'''NAK'''を受信した送信側は再度同じ'''データブロック'''を送出する。ブロック番号を指定して送信を要求する機能はないため、ブロック番号が連続しない場合やFlying-XMODEMの場合は中断処理(後述)を行うことになる。 === 中断処理 === 一定時間待っても相手側からの応答がない、Flying-XMODEM転送中にエラーが発生したなど、何らかの事情により転送途中に通信を終了させたい場合は'''CAN'''を送出する。これは受信側・送信側のどちらが送出しても良い。 === データブロック構成 === {| class="wikitable" |- ! ヘッダ ! データブロック番号 ! データブロック番号の[[補数#例2_-_2進法|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は効率があまり良くないため、これを改良した[[YMODEM]]、[[ZMODEM]]などが後に開発された。 == 関連項目 == *[[バイナリ転送プロトコル]] *[[YMODEM]] *[[ZMODEM]] *[[B Plus]] *[[QuickVAN]] *[[カーミット (プロトコル)]] *[[バイナリ]] [[Category:パソコン通信|えつくすもてむ]]
XMODEM
に戻る。
案内メニュー
個人用ツール
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
その他
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
新しいページ
最近の更新
おまかせ表示
sandbox
commonsupload
ヘルプ
ヘルプ
井戸端
notice
bugreportspage
sitesupport
ウィキペディアに関するお問い合わせ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報