【整理】Kermit Xmodem Xmodem-1K Ymodem Ymodem-G Ymodem-1K Zmodem

来源:互联网 发布:h5砸金蛋源码 编辑:程序博客网 时间:2024/05/22 01:52

(来源:http://bbs.chinaunix.net/thread-3587601-1-1.html)


整理】Kermit Xmodem Xmodem-1K Ymodem Ymodem-G Ymodem-1K Zmodem

version: 2011-08-26

Mail: green-waste (at) 163.com

【背景】

在串口中传输文件,所用到的协议,常常有KermitXmodemYmodemZmodem等,对这些协议,单独看名字,就很容易混淆,搞不懂都是啥意思。所以,写此文,总结各自的特点,解释他们之间的区别和联系。

【常见的RS232串口中所用到的传输协议之间的区别和联系】

此处主要讨论RS232即串口应用中,用来传输数据或文件的协议,主要有这些:

KermitXmodemXmodem-1KYmodemYmodem-GYmodem-1KZmodem

下面简述各自的异同点。

(1)相同点:

都是常见的文件传输协议,主要应用于RS232串口通信

(2)异同点:

【kermit】

计算机系统中的文件传输和管理协议。

特点:

1)文本文件和二进制文件传输

2)全双工,半双工(8 -bit),7-bit的串行连接;

3)协议对底层介质不做限制,跨平台性很好。

4)已在N多平台中实现了此协议,即用途相当地广泛。

       【Xmodem

一个简单的文件传输协议。将文件拆分成很多个固定大小的数据包,数据包大小是128字节,然后以一个数据包,一个数据包的形式发送数据。中间会带有一些额外信息,用于握手协议等方面,以保证得知接收方正确接收了数据包。

要点:

1)将文件拆分,以固定大小的数据包发送。

2)数据包大小Packet size=128Byte

说明:

1Xmodem最开始是在早期的BBS系统中很流行,因为其协议足够简单,很容易实现。

2)由于效率太低,导致其他很多人在此基础上去对其扩展,以提高性能。

3Chuck Forsberg收集了众多的扩展功能,以此形成Ymodem,但是由于没有很成功的实现,导致实际应用产生各种变体。

但是其后来设计了Zmodem,由于效果太好,导致完全取代了之前的各种Xmodem的变体,包括Ymodem

    【YmodemXmodem(和Modem7)的基础上开发出来的,本身协议和Xmodem是一样的,只是在文件传输开始之前,多加了个Block0,用于传输文件名,文件大小,时间戳等信息。

【说明】

本来协议设计者
Chuck Forsberg
都设计了好多可选的特性,以便于此协议可以用到多种环境和平台中,然后再换个协议名称的。但是实际上实现了Ymodem的应用中,都只是支持了1KB的包大小和CRC模式,除此之外的其他一些特性,都没实现,所以后来就还是沿用了旧的Ymodem这一叫法。同时,也导致了现存的很多Ymodem互相不是很兼容。

Zmodem

Xmodem发展而来,取代了Ymodem,算是Ymodem的终结者。

核心改进在于,引入了滑动窗口(sliding window)以提高性能。

其支持很多特性:

1)可重传机制;

2)发送者可自动开始传输;

3)扩展的32位的CRC校验;

4)可传输控制字符;

【说明】

(1)PC Linux中的rz/sz

(2)嵌入式Linuxlrzsz



注释:

1.常见的Ymodem的实际是Ymodem-1K

虽然严格意义上说,Ymodem,数据表示128字节,但是很多具体Ymodem的实现,实际上是把Ymodem认为是1KB的数据包,即这类Ymodem的实现,虽然也叫Ymodem,但是实际上是Ymodem-1K,即:

常见的Ymodem == Ymodem-1K

例子:

1Windows XP自带的超级终端(Hyper Terminal)中的Ymodem,就是默认1KB的数据包大小。

2)而SecureCRT中的Ymodem默认是数据包是128字节,可以设置为128B1KB

2. lrzsz是嵌入式中常用的通过串口传输文件的工具,是PCLinux中的rz/sz的精简版。


【引用】

1. XMODEM

http://en.wikipedia.org/wiki/XMODEM

2. Ymodem

http://en.wikipedia.org/wiki/YMODEM

3. Zmodem

http://en.wikipedia.org/wiki/ZMODEM

4. Kermit

http://en.wikipedia.org/wiki/Kermit_(protocol)

5. 
rz(1) - Linux man page

http://linux.die.net/man/1/rz

6. lrzsz: free x/y/zmodem implementation

http://ohse.de/uwe/software/lrzsz.html