(來源: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
【背景】
在串口中傳輸文件,所用到的協議,常常有Kermit,Xmodem,Ymodem,Zmodem等,對這些協議,單獨看名字,就很容易混淆,搞不懂都是啥意思。所以,寫此文,總結各自的特點,解釋他們之間的區別和聯繫。
【常見的RS232串口中所用到的傳輸協議之間的區別和聯繫】
此處主要討論RS232即串口應用中,用來傳輸數據或文件的協議,主要有這些:
Kermit,Xmodem,Xmodem-1K,Ymodem,Ymodem-G,Ymodem-1K,Zmodem
下面簡述各自的異同點。
(1)相同點:
都是常見的文件傳輸協議,主要應用於RS232串口通信
(2)異同點:
【kermit】
計算機系統中的文件傳輸和管理協議。
特點:
(1)文本文件和二進制文件傳輸
(2)全雙工,半雙工(8 -bit),7-bit的串行連接;
(3)協議對底層介質不做限制,跨平臺性很好。
(4)已在N多平臺中實現了此協議,即用途相當地廣泛。
【Xmodem】
一個簡單的文件傳輸協議。將文件拆分成很多個固定大小的數據包,數據包大小是128字節,然後以一個數據包,一個數據包的形式發送數據。中間會帶有一些額外信息,用於握手協議等方面,以保證得知接收方正確接收了數據包。
要點:
(1)將文件拆分,以固定大小的數據包發送。
(2)數據包大小Packet size=128Byte
說明:
1)Xmodem最開始是在早期的BBS系統中很流行,因爲其協議足夠簡單,很容易實現。
(2)由於效率太低,導致其他很多人在此基礎上去對其擴展,以提高性能。
(3)Chuck Forsberg收集了衆多的擴展功能,以此形成Ymodem,但是由於沒有很成功的實現,導致實際應用產生各種變體。
但是其後來設計了Zmodem,由於效果太好,導致完全取代了之前的各種Xmodem的變體,包括Ymodem。
【Ymodem】在Xmodem(和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)嵌入式Linux中lrzsz;
註釋:
1.常見的Ymodem的實際是Ymodem-1K
雖然嚴格意義上說,Ymodem,數據表示128字節,但是很多具體Ymodem的實現,實際上是把Ymodem認爲是1KB的數據包,即這類Ymodem的實現,雖然也叫Ymodem,但是實際上是Ymodem-1K,即:
常見的Ymodem == Ymodem-1K
例子:
(1)Windows XP自帶的超級終端(Hyper Terminal)中的Ymodem,就是默認1KB的數據包大小。
(2)而SecureCRT中的Ymodem默認是數據包是128字節,可以設置爲128B或1KB。
2. lrzsz是嵌入式中常用的通過串口傳輸文件的工具,是PC版Linux中的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
6. lrzsz: free x/y/zmodem implementation
http://ohse.de/uwe/software/lrzsz.html