Zmodem协议由浅入深(废话不多说直接解释)

1. 最简单的 ZMODEM 文件传输显示如下

例如:
发送器要发送:”爸爸的爸爸到底叫什么呀丫鸭压?” ----->>>>>给接收器

逻辑如下 发送器:问---接收器可以接受什么类型的数据接受器:回---我可以接收“xxx”这几种类型的数据发送器:发---文件名称、大小、日期....接收器:回---准备好接收文件了,发过来吧!(重传暂时不讨论)发送器:发---数据内容如--->>> “爸爸的爸爸+ZCRCG(结束符合)”发送器:发---数据内容如--->>> “到底叫什么+ZCRCG(结束符合)”发送器:发---数据内容如--->>> “呀丫鸭压?+ZCRCE (数据最后一个结束符合)”发送器:发---数据已经发完+ZEOF(数据最后一个结束符合)”接收器:回---收到,是否发送新文件?(ZACK和CRC通过)发送器:发---要终止会话接收器:回---同意终止

实际程序是这样的逻辑:

ZMODEM 发送器 ZMODEM 接收器 帧类型
发送器请求接收器发送它的初始化参数 ZRQINIT=0
接收器以提供它的大多数能力的帧进行响应 ZRINIT=1
发送器提供要传输文件的名称,以及关于长度和日期等可选数据 ZFILE=4
接收器请求文件数据再某个位置开始。对于新文件这一般是位置 0 ZRPOS=9
发送包含所有文件内容的单个数据帧。所有数据子包以 ZCRCG 结束,最后一个例外,它以 ZCRCE 结束 ZDATA=10
发送所有数据,并指明了文件尾 ZEOF=10
接收器指明已经准备好开始接收新文件 ZRINIT=1
发送器指明它要终止会话。如果发送器有更多文件要发送,它将再发送一个 ZFILE帧 ZFIN=8
接收器同意而连接中断 ZFIN=8

2. ZMODEM数据包格式

ZMODEM的帧:ZMODEM发送器和接收器之间传递的所有信息都包含在数据包中(在ZMODEM 中称数据包为帧),即使是简单的协议协议信息(比如确认信号)也在数据包中。

十六进制报头:
ZPAD ZPAD ZDLE B FrameType ZF3 ZF2 ZF1 ZF0 CRC1 CRC2 CR LF XON

1. ZPAD ZPAD ZDLE表示帧的开始
2. 字符 B 用于表示十六进制报头
3. frame-type表示帧类型
4. ZF3 ZF2 ZF1 ZF0:是4个字节的信息,当帧类型不同时,它的含义也不同
5. CRC-1 CRC-2为校验码

注意:在 B 字符------------CR/LF/XON 序列之间,所有字符都是
十六进制编码的,这意味着每一个字节使用两个字符的可打印值。

/ 附录说明 / /

附录1、ZMODEM 帧类型

ZRQINIT=0:
当 ZMODEM 发送器启动时,它发送这种帧。它是请求接收器发送它的 ZRINIT帧,该帧将开始文件传输。ZRQINIT 帧头可用于在接收程序中触发一个自动下载。ZRQINIT 帧不发送任何数据子包。如果发送器试图发送一个命令给接收器,头字节 ZF0 包含常量 ZCOMMAND;否则它包含一个 0。

ZRINIT=1:
接收器发送这种帧以指明它准备好从发送器处接收文件。可以自发地发送它,或者应答 ZRQINIT 帧。这个帧具有 4 个字节地能力信息包装在报头中。ZF0 和 ZF1 的下列位可以进行设置和清除,这要取决于接收器的能力。
CANFDX=1:接收器具有确实的全双工操作,意味着它可以同时发送和接收数据。
CANOVIO=2:接收器在写磁盘时可以接收数据,要充分利用 ZMODEM 的流特性,就需要这种能力。
CANBRK=4: 接收器可以发送一个中断信号。
CANCRY=8: 接收器可以解码 RLE 帧。应用例中不支持这种能力(Omem Technology
可能把这种能力看做对 ZMODEM 的专有扩展)。
CANLZW=16: 接收器可以解压缩 UNIX 压缩式的数据。这种能力在应用例中不支持。
CANFC32=64: 接收器可以接受 CRC32,应用例不支持 CRC32。
ESCCTL=64: 接收器需要看到所有控制字符转换码,而不是仅 XON/XOFF 等少数几个。
ZF2 和 ZF3 包含接收器输入缓冲的尺寸。如果这个值是非零的就意味着接收器不能在完全的流模式中工作。相反,当它向磁盘写数据时,它将停止接收。

ZSINIT=2:
在处理 ZRINIT 帧后,这个帧可以被发送器有选择地发送给接收器。它提供给接收器一些信息而不管接收器的能力。两个位装入 ZF0。
TESCCTL=64: 此位用于指明发送器期望所有控制字符都进行转换
TESC8=128: 此位用于指明发送器期望转换 8 位。ZMODEM 没有完全实现这种能力,但包含在未来改进的规范中。仅有一个数据子包跟随在报头后面。这个子包包含不超过 32 个字符的字符串,以空字符终止。这个字符串用于在出错时唤醒发送器。

ZACK=3:
这种帧类型用于确认 ZSINT 和 ZCHALLENGE 帧,以及其后跟随 ZCRCQ 或ZCRCW 终止符的数据子包。如果应答是给 ZCHALLENGE 帧的,4 个报头标志字节由ZCHALLENGE 报头所发送的 4 个字节副本来填充。

ZFILE=4:
这种帧类型用于初始化实际的文件传输。它包含一个报头,后面跟随单个数据子包,子包包含文件信息。4 个报头字节中填入了与要传输文件有关的各种标志。ZF0 包含文件转换选项;ZF1 包含可选的管理选项;ZF2 具有传输选项;ZF3 包含扩充选项。这个帧考虑的选项最多,而且很少使用。对于我们的目的,在 ZFILE 帧中传送的重要项是文件名称、长度及可选的日期。在此详细说明选项的其余部分是为了完整性。

附录2、ZF0 转换选项

ZF0 可以设置为下列值之一,它们指明存储文件数据时使用的转换方法。

ZCBIN=1:
二进制传输,数据不需要转换。

ZCNL=2:
使用本地约定转换接收行的结尾。这个选项在 UNIX 和 MS-DOS 之间发送 ASCII文件是有用的。

ZCRESUM=3:
从中断的文件传输中恢复。接收器检查目标文件是否比发送的文件短。若是,文件传输可在异常终止的地方重新开始。

附录3、ZF1 管理选项

ZF1 可以设置为以下的数值。
¾ ZMNEW=1: 只有在源文件更新或更长时覆盖目标文件。
¾ ZMCRC=2: 对比源文件和目标文件的 CRC。如果数值相同,传输文件,否则跳过传输。
¾ ZMAPND=3: 把源文件追加到目标文件。
¾ ZMCLOB=4: 如果目标文件存在,则无条件的覆盖目标文件。
¾ ZMSPARS=5: 如果目标文件存在,只有文件比较新才覆盖目标文件。
¾ ZMDIFF=6: 如果目标文件存在,只有文件的长度或日期不同才覆盖目标文件。
¾ ZMPROT=7: 这个选项与 ZMCLOB 相对。它告诉接收器只有在目标文件不存在时才传输文

附录4、ZF2 传输选项

ZF2 可以设置为以下的数值。
ZTLZW=1: 要传输的数据经过 UNIX 压缩程序压缩的。在应用例中不支持这个选项。
ZTRLE=3: 数据是使用 Run Length Encoding 压缩的。通过创建专用的 RLE 帧,在 ZMODEM后来的版本中,这部分规范被取代。丢失的选项 2 属于 ZTCRYPT,是在最初的 ZMODEM 规范中定义,但从未实现的加密选项。

附录5、ZF3 扩展选项

ZF3 是位图,其中由条件的设置了扩充选项。在 ZMODEM 规范中定义的唯一选项是
ZTSPARS 选项,它考虑到对“稀疏文件”的特殊处理。这个选项在 ZMODEM 规范中定义,但它很少得到过支持

如果对你有帮助,请给予作者一丝丝奖励

Zmodem协议由浅入深相关推荐

  1. python调用Moxa PCOMM Lite通过串口Zmodem协议发送文件 [

    代码如下所示: #encoding=utf-8 from ctypes import * dll = windll.LoadLibrary("PCOMM.DLL") port =  ...

  2. KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结

    转:http://blog.163.com/czblaze_3333/blog/static/208996228201272295236713/ Kermit协议 报文格式: 1.       MAR ...

  3. KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结【转】

    来自:http://blog.163.com/czblaze_3333/blog/static/208996228201272295236713/ Kermit协议 报文格式: 1.       MA ...

  4. Kermit,Xmodem,1K-Xmodem,Ymodem,Zmodem传输协议小结

    来自:http://blog.163.com/czblaze_3333/blog/static/208996228201272295236713/ Kermit协议 报文格式: 1.       MA ...

  5. Ymodem协议学习笔记

    介绍   Xmodem.Ymodem和Zmodem协议是最常用的三种通信协议.   Xmodem协议是最早的,支持传输128字节信息块.   Ymodem是Xmodem的改进版协议,具有传输快速稳定的 ...

  6. 异步协议与同步协议:面向字符的协议BSC协议

    在数据通信中,协议是用来实现OSI模型中一层或几层的一组规则或规范. 数据链路层协议是实现数据链路层的一组规范. 数据链路协议可以被分为两组:异步协议和同步协议.异步协 议对于比特流中的每个字符都单独 ...

  7. 网络原理考点之BSC协议

    如题:2017年4月 分析:啥是BSC协议呢? 同步协议主要在局域网(LAN).城域网(MAN)以及广域网 (WAN)中应用.控制同步传输的协议可以分成两个类型:面向字 符的协议和面向比特的协议. 面 ...

  8. STM32 CUbeIDE 使用Ymodem协议进行串口IAP升级

    STM32 CUbeIDE 使用Ymodem协议进行串口IAP升级 1.Ymodem协议简介 2.Boodload程序 2.1 传输32K限制解决 3.APP程序 4.升级测试 5.工程文件下载    ...

  9. 【转】Xmodem、Ymodem协议总结

    原文:https://blog.csdn.net/hkh5730/article/details/25145651 Xmodem.Ymodem协议总结 写在前面: 本文包含如下内容: 一.文件传输简介 ...

  10. Xmodem 协议介绍及应用(基于 ESP-IDF)

    Xmodem 协议介绍及应用(基于 ESP-IDF) 目录 1. 介绍 2. 目的 3. 硬件准备 4. 环境搭建 5. SDK 准备 6. 功能介绍 7. 编译&烧写&运行 1. 介 ...

最新文章

  1. springcloud上传文件_Spring Cloud实战:服务链路追踪Spring Cloud Sleuth
  2. 限时分享:产品经理面试高频考题及答案
  3. 8.8-8.10 usaco
  4. 查看修改Linux隐藏文件的四种简便方法
  5. pythonweb自动化测试实例_[转载]python webdriver自动化测试实例
  6. 自定义的ViewGroup中添加自定义View 造成的无法显示问题(个人)
  7. MySql(15)——Mysql在高并发情况下,防止库存超卖而小于0的解决方案
  8. new运算符做了什么
  9. python采用面向对象编程模式吗_python基础5-面向对象编程
  10. 数据结构---哈夫曼树的Java实现
  11. 胜为蓝牙适配器驱动_胜为USB蓝牙适配器4.0驱动下载
  12. Linux OBS虚拟摄像头 解决方案
  13. 谈一下wxid转扫一扫的核心
  14. 试验数据管理平台解决方案--MDM
  15. 谁说NTFS不支持UEFI启动的?启动U盘放不了超过4G的文件怎么办?Server2016 Win10 U盘UEFI启动制作方法...
  16. 《新编计算机科学概论》一第0章 绪  论
  17. Excel 2010 VBA 入门 098 导入Access数据库的数据
  18. sklearn K近邻KNeighborsClassifier参数详解
  19. java新闻管理系统代码下载_通用新闻管理系统
  20. 普通电脑U盘安装苹果系统简易方法

热门文章

  1. php获取qq头像地址,使用PHP语言通过邮箱获取全球公认的Gravatar头像地址
  2. 自实现Regsvr32注册dll功能
  3. xrd连续扫描和步进扫描_深度解析XRD
  4. 数学建模-TOPSIS法
  5. 达梦之路——基于Linux平台(redhat)安装部署DM7单库
  6. c语言标准库详解(五):stdio.h之直接IO/文件定位/错误处理
  7. 苹果微信分身版ios_苹果ios微信分身三开助手
  8. Perforce携手龙智成功举办2021年度中国用户大会助力中国企业“加速开发”
  9. office2010c盘_安装office2010一半时取消导致C盘空间少了将近8个G,卸载office后C盘内存没有变回来,有谁知道怎么办吗?...
  10. 通达信手机版分时图指标大全_今天教大家怎么把通达信副图指标源码导入手机通达信软件上。...