轉自: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
【背景】
在串口中傳輸文件,所用到的協議,常常有Kermit,Xmodem,Ymodem,Zmodem等,對這些協議,單獨看名字,就很容易混淆,搞不懂都是啥意思。所以,寫此文,總結各自的特點,解釋他們之間的區別和聯繫。
【常見的RS232串口中所用到的傳輸協議之間的區別和聯繫】
此處主要討論RS232即串口應用中,用來傳輸數據或文件的協議,主要有這些:
Kermit,Xmodem,Xmodem-1K,Ymodem,Ymodem-G,Ymodem-1K,Zmodem
協議名稱 |
相同點 |
各自特性 |
說明 |
對應軟件或命令 |
||
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 |
(1)Xmodem最開始是在早期的BBS系統中很流行,因爲其協議足夠簡單,很容易實現。 (2)由於效率太低,導致其他很多人在此基礎上去對其擴展,以提高性能。 (3)Chuck Forsberg收集了衆多的擴展功能,以此形成Ymodem,但是由於沒有很成功的實現,導致實際應用產生各種變體。 但是其後來設計了Zmodem,由於效果太好,導致完全取代了之前的各種Xmodem的變體,包括Ymodem。 |
(1)PC Linux中的rx/sx; (2)嵌入式Linux中lrzsz; |
|
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)嵌入式Linux中lrzsz; |
||
Ymodem-1K |
此協議是在,原先Ymodem的數據包大小是(同Xmodem協議相同的)128byte的基礎上,改成了 Packet size=1024byte=1KB。 |
原先Ymodem協議中,數據包大小爲1KB,是個可選的設置項。此Ymodem-1K,作爲Ymodem的變體,卻沒有實現Ymodem其他的一些特性,所以,最好是叫做XModem-1K |
||||
Ymodem-G |
Ymodem的變體,流數據傳輸,用於信號很好(error-free)的傳輸環境中。 其(1)取消了CR(2)取消了,在發送下一個數據包之前,必須等待接受者的ACK |
由於取消CRC和ACK等待,此協議理論上,速度會比Zmodem快,但是實際上用此此協議的很少。因爲,在16550 UAT出現之前,很明顯,此協議有個嚴重的問題,那就是緩存溢出(buffer overrun),即接受者來不及處理數據,你就接着發下一個數據包了。 |
||||
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