XMODEM, YMODEM, and ZMODEM

由于平时使用rz/sz较多,r/s好理解,一个send一个receive。但是由不太清楚z是什么意思,故有此文。
sx/rx, sb/rb (b=batch)和sz/rz分别实现了xmodem,ymodem和zmodem文件传输协议。

Xmodem(1977 Ward Christensen )->Ymodem(1985 Chuck Forsberg )->Zmodem(1986 Chuck Forsberg)

先有Xmodem,后逐渐演化成Ymodem,但是Ymodem还是不够快速缺点也多,再后来便发展为Zmodem,也就是我们日常工作中使用相当多的文件传输协议之一。

Xmodem

广泛使用的文件传输协议之一。最初的Xmodem协议使用128字节包和简单的校验和方式做为错误检测。随后改进为Xmodem-CRC,使用更加安全的循环冗余校验(Cyclic Redundancy Check )方式作为错误检测。Xmodem协议总是尝试优先使用CRC,如果发送方未收到使用CRC方式的请求消息,接收方则会切换为校验和方式继续请求传输。

校验和方式

包结构

byte1 byte2 byte3 bytes 4~131=128bytes byte132
SOH(Start of Header) block no 255-(block no) data packet checksum

打个比方,发一次文件需要分5块(block),那么block no 是从1到5,又假设这5块的数据包分别是d1~d5,那么checksum=sum(d1+d2+d3+d4+d5)/256 , 这里/是取模。

接收方如何知道某一块是不是最后一块?

以上述例子,在第5块发送完成后,紧接着会发送一个EOT(End of Transmission)标记字符,该字符是以单个字节单独发送。

传输过程

CRC方式

包结构

byte1 byte2 byte3 bytes 4~131=128bytes bytes132~133
SOH block no 255-(block no) data packet CRC-16

CRC方式在原有checksum的基础上,由一个字节更新为两个字节的CRC,相对于checksum更加安全。CRC循环冗余校验也属于校验和的一种,但是在严格意义上不属于而是属于

Xmodem-1K

包结构

byte1 byte2 byte3 bytes 4~1027=1024bytes bytes1028~1029
STX block no 255-(block no) data packet CRC-16

Xmodem-1K本质上是Xmodem-CRC,只是data packet长度增加为1024bytes(1K),然后第1个字节由SOH更新为STX。在其他系统和BBS上它也被成为YmodemXMODEM-1K最初是Chuck Forsberg在其YMODEM协议中对XMODEM进行的众多改进之一。 Forsberg建议,各种改进是可选的,希望软件作者能够实现尽可能多的改进。 相反,他们通常只实现了最低限度的最低要求,导致大量的半兼容实现,并最终从名称“ YMODEM”拆分为“ XMODEM-1K”和各种YMODEM。

Ymodem

Ymodem是Chuck Forsberg对Xmodem的改进,但Ymodem的命名由Xmodem的原始作者Ward Christensen给出。Ymodem本质上是Xmodem-1K,它允许在同一个会话(session)里同时进行多文件传输。 在某些系统上,它被列为Ymodem Batch

包结构

Ymodem在Xmodem基础上发展,沿用了TeLink协议的添加空头块的做法,也就是增加block 0。该block标识即将发送文件的文件名文件大小文件创建时间戳,如下:

byte1 byte2 byte3 bytes 4~131=128bytes bytes132~133
SOH 0x00 0xFF 文件名 文件大小 时间戳 CRC-16

Ymodem的block n结构(非第0块), data packet既可以是128位也可以是1024位,可以通过命令控制

byte1 byte2 byte3 bytes 4~131=128bytes bytes132~133
SOH block no 255-(block no) data packet CRC-16
byte1 byte2 byte3 bytes 4~1027=1024bytes bytes1028~1029
STX block no 255-(block no) data packet CRC-16

传输过程

Ymodem允许在同一个会话(session)内同时传输多个文件,以下以多文件为例展示传输过程,单个文件类似。

以128位传输

以1K传输

Ymodem-g

YMODEM-g是Ymodem的变体,是一种流协议,以连续流的形式发送和接收1K数据包,直到指示需要停止为止。 在发送下一个数据包之前,它不需要等待接收到ACK。 该协议比YMODEM更快,因为没有在数据包之间引入延迟,但是没有纠正错误的能力。 如果任何块传输失败,则取消整个文件的传输。

Zmodem

随着网络速度加快,已有的x/ymodem协议速度已经跟不上时代的步伐。Zmodem应运而生,它采用窗口滑动机制,Zmodem有两个最重要的特征:高效提供崩溃恢复

高效

只要接收方没有发现错误便允许发送方不停的发送数据包,而无需发送方接收接收方ACK标记(因为可能会有延迟或者错误发生)。允许连续发送的数据包数量称之为窗口,在大部分Zmodem的实现协议中采用2~16个包的数量。

崩溃恢复

如果Zmodem传输被取消或者因为某种原因被干扰,该稍候可以恢复传输,并且无需重新发送之前的内容。

参考

http://web.cecs.pdx.edu/~rootd/catdoc/guide/TheGuide_226.html#SEC237
https://en.wikipedia.org/wiki/XMODEM
https://en.wikipedia.org/wiki/YMODEM
https://en.wikipedia.org/wiki/ZMODEM

平时使用的Lszrz到底是什么协议?说说Xmodem/Ymodem/Zmodem相关推荐

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

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

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

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

  3. HTTPS 协议到底比 HTTP 协议多些什么?

    来源:杰哥的IT之旅 作者:阿拉斯加 最近卷了一篇 HTTP 协议的相关知识,大家可以一起来看一下~ HTTP 简介 HTTP 协议是 Hyper Text Transfer Protocol(超文本 ...

  4. 那么telnet到底是一个协议还是一个软件呢?

    中国浙江温州小型皮鞋厂老板,面对皮鞋进水发胖问题,没有任何解决的办法! 本周末写点轻松的好玩的事,所谓轻松的好玩的事,那就是既不怕犯错,又不用背锅的事,完全不用负责任,那就说说telnet吧. 如题目 ...

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

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

  6. X/Y/Z Modem、Kermit区别

    Z Modem是一种用于在PC之间传送文件的文件传输协议.Z Modem协议与X Modem.Y Modem很类似.Z Modem的不同之处在于,它实现的是全双工的通信,而且,不像X Modem或Y ...

  7. Xmodem Ymodem Zmodem

    根据modem所采用的文件传输协议:xmodem,ymodem,zmodem将其分类     xmodem:简单通用,传输信息单位是"包=128B",传输速度慢,适合电话线路质量差 ...

  8. mobaxterm 传文件夹_mobaxterm和CRT的文件上传

    引言 最近一直是在用SecureCRT和MobaXterm对服务器进行维护,前者是因为工作需要,后者是个人喜好.我记得在去年我写过一篇用MobaXterm对阿里云服务器进行相关的部署,那篇博文里也谈及 ...

  9. Bootloader概述

    Bootloader概述 Bootloader的含义 PC机上windows.linux引导过程简介 嵌入式Bootloader介绍与分析 嵌入式bootloader介绍 Bootloader的操作模 ...

最新文章

  1. 多媒体计算机技术在教学中的应用,【浅谈多媒体计算机技术在中学物理教学中的应用】计算机技术是什么...
  2. 纪中2016.8.13比赛不明总结
  3. css清除浮动方法总结
  4. python的基础命令_Python必学之命令行常用的命令
  5. 杭州飞畅告诉你工业环网交换机到底是什么?
  6. android跳转到相册需要权限,Android打开相册获取图片路径
  7. (一)pscc学习笔记
  8. Python大佬分析了15万歌词,告诉你民谣歌手们到底在唱什么
  9. mysql单表大小限制
  10. Pandas常用操作方法
  11. 解决远程桌面无法全屏的方法
  12. 浏览器打开默认为360主页,如何修改
  13. c语言如何算字节,C语言中结构字节的计算方法
  14. 最详细的工业网络通讯技术与协议总结解读(现场总线、工业以太网、工业无线)
  15. pyqt任务栏图标显示问题
  16. win10下使用Linux(ubuntu18.04)
  17. opencv绘制椭圆
  18. 拒绝男程序员?程序员就活该接盘?
  19. usb接口问题折腾记
  20. 织梦dedecms 本地模板安装步骤

热门文章

  1. 如何选择第三方物流供应商?
  2. 计算机图形学--方法篇(DDA画线算法)
  3. KEIL编译器【C语言编译选项优化等级说明】
  4. geoserver发布wms服务和wmts服务,并在cesium上进行调用
  5. vue使用高德地图加载kml文件
  6. 查看表空间的大小及使用情况sql语句
  7. 英文描述疫情的生活状态
  8. Delphi组件源码:HTML Component Library 3.9
  9. 某剧院有33排座位java_2017福建社区工作者行测数学题“拍档”:等差数列和等比数列...
  10. Java获取标准网络时间