XMODEM(えっくすもでむ)は、バイナリ転送プロトコルの一種である。128バイト単位で非同期通信を行う。開発者の Ward Christensen がパブリックドメイン扱いで仕様を公開したため、パソコン通信で広く使われた。XMODEMを元に考案されたプロトコルも多く、またXMODEM自身にもいくつかのタイプがある。
SOH、STX、EOT、ACK、NAK、CANの6つのコントロールコードと文字 ’C’(43h) を使用して通信制御を行い、後述するデータブロックの単位でデータを転送する。
| 受信側 | 送信側 | |
|---|---|---|
| NAK(送信要求) | → | |
| ← | ブロック1 | |
| ACK(肯定応答) | → | |
| ← | ブロック2 | |
| ACK | → | |
| (中略) | ||
| ← | 最終ブロック | |
| ACK | → | |
| ← | EOT(転送終了) | |
| ACK | → | |
| (通信終了) | ||
| 受信側 | 送信側 | |
|---|---|---|
| ← | ブロック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ビット |
未登録
IPFS未登録
📡 0ピア
N=1
CRITICAL
PQS D31