Kermit Xmodem Xmodem-1K Ymodem Ymodem-G Ymodem-1K Zmodem

轉自:http://www.crifan.com/order_kermit_xmodem_xmodem-1k_ymodem_ymodem-g_ymodem-1k_zmodem/


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

【整理】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


協議名稱

相同點

各自特性

說明

對應軟件或命令

Kermit

都是常見的文件傳輸協議,主要應用於RS232串口應用中

計算機系統中的文件傳輸和管理協議。

特點:

1)文本文件和二進制文件傳輸

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

3)協議對底層介質不做限制,跨平臺性很好。

4)已在N多平臺中實現了此協議,即用途相當地廣泛。

Kermit名字的來源是來自Kermit the Frog from The Muppets

(1)Uboot中的loadb;

 

XYZModem

Xmodem

Xmodem

一個簡單的文件傳輸協議。將文件拆分成很多個固定大小的數據包,數據包大小是128字節,然後以一個數據包,一個數據包的形式發送數據。中間會帶有一些額外信息,用於握手協議等方面,以保證得知接收方正確接收了數據包。

 

要點:

1)將文件拆分,以固定大小的數據包發送。

2)數據包大小Packet size=128Byte

1Xmodem最開始是在早期的BBS系統中很流行,因爲其協議足夠簡單,很容易實現。

2)由於效率太低,導致其他很多人在此基礎上去對其擴展,以提高性能。

3Chuck Forsberg收集了衆多的擴展功能,以此形成Ymodem,但是由於沒有很成功的實現,導致實際應用產生各種變體。

但是其後來設計了Zmodem,由於效果太好,導致完全取代了之前的各種Xmodem的變體,包括Ymodem

(1)PC Linux中的rx/sx

(2)嵌入式Linuxlrzsz

Xmodem-1K

Ymodem-1K,詳情參見Ymode-1K

 

Ymodem

Ymodem

Xmodem(和Modem7)的基礎上開發出來的,本身協議和Xmodem是一樣的,只是在文件傳輸開始之前,多加了個Block0,用於傳輸文件名,文件大小,時間戳等信息。

本來協議設計者Chuck Forsberg都設計了好多可選的特性,以便於此協議可以用到多種環境和平臺中,然後再換個協議名稱的。但是實際上實現了Ymodem的應用中,都只是支持了1KB的包大小和CRC模式,除此之外的其他一些特性,都沒實現,所以後來就還是沿用了舊的Ymodem這一叫法。同時,也導致了現存的很多Ymodem互相不是很兼容。

(1)uboot中的loady命令;

(2)PC Linux中的rb/sb

(3)嵌入式Linuxlrzsz

Ymodem-1K

此協議是在,原先Ymodem的數據包大小是(同Xmodem協議相同的)128byte的基礎上,改成了 Packet size=1024byte=1KB

原先Ymodem協議中,數據包大小爲1KB,是個可選的設置項。此Ymodem-1K,作爲Ymodem的變體,卻沒有實現Ymodem其他的一些特性,所以,最好是叫做XModem-1K

Ymodem-G

Ymodem的變體,流數據傳輸,用於信號很好(error-free)的傳輸環境中。

其(1)取消了CR2)取消了,在發送下一個數據包之前,必須等待接受者的ACK

由於取消CRCACK等待,此協議理論上,速度會比Zmodem快,但是實際上用此此協議的很少。因爲,在16550 UAT出現之前,很明顯,此協議有個嚴重的問題,那就是緩存溢出(buffer overrun),即接受者來不及處理數據,你就接着發下一個數據包了。

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章