最常用的幾種通信傳輸協(xié)議有:XModem、YModem、ZModem等。
XModem是最早的協(xié)議之一,幾乎所有的通訊程序支持的文件傳輸協(xié)議,它傳輸128字節(jié)信息塊。
YModem協(xié)議是XModem的改進(jìn)協(xié)議,它最用于調(diào)制解調(diào)器之間的文件傳輸?shù)膮f(xié)議,具有快速,穩(wěn)定傳輸?shù)膬?yōu)點(diǎn)。它的傳輸速度比XModem快,這是由于它可以一次傳輸1024字節(jié)的信息塊,同時(shí)它還支持傳輸多個(gè)文件,也就是常說的批文件傳輸。
ZModem速度快于XModem和YModem,而且可以更好地?cái)嚅_后
恢復(fù)傳輸。
如今,XModem基本已經(jīng)被淘汰,最常用的就是YModem與ZModem。為了后面YModem升級(jí)程序?qū)崿F(xiàn)做鋪墊,下面就簡(jiǎn)單介紹下YModem協(xié)議。YModem的說明手冊(cè)在http://pauillac.inria.fr/~doligez/zmodem/ymodem.txt
網(wǎng)站上可以查看。
YModem分成YModem-1K與YModem-g。
YModem-1K用1024字節(jié)信息塊傳輸取代標(biāo)準(zhǔn)的128字節(jié)傳輸,數(shù)據(jù)的發(fā)送回使用CRC校驗(yàn),保證數(shù)據(jù)傳輸?shù)恼_性。它每傳輸一個(gè)信息塊數(shù)據(jù)時(shí),就會(huì)等待接收端回應(yīng)ACK信號(hào),接收到回應(yīng)后,才會(huì)繼續(xù)傳輸下一個(gè)信息塊,保證數(shù)據(jù)已經(jīng)全部接收。
YModem-g傳輸形式與YModem-1K差不多,但是它去掉了數(shù)據(jù)的CRC校驗(yàn)碼,同時(shí)在發(fā)送完一個(gè)數(shù)據(jù)塊信息后,它不會(huì)等待接收端的ACK信號(hào),而直接傳輸下一個(gè)數(shù)據(jù)塊。正是它沒有涉及錯(cuò)誤校驗(yàn),才使得它的傳輸速度比YModem-1K來得塊。
一般都會(huì)選擇YModem-1K傳輸,平時(shí)所說的YModem也是指的是YModem-1K。下面就講講它的傳輸協(xié)議。
1、起始幀的數(shù)據(jù)格式
YModem的起始幀并不直接傳輸文件的數(shù)據(jù),而是將文件名與文件的大小放在數(shù)據(jù)幀中傳輸,它的幀長(zhǎng)=3字節(jié)數(shù)據(jù)首部+128字節(jié)數(shù)據(jù)+2字節(jié)CRC16校驗(yàn)碼=33字節(jié)。它的數(shù)據(jù)結(jié)構(gòu)如下:
SOH 00 FF filename[ ] filezise[ ] NUL[ ] CRCH CRCL
其中SOH=0x01,表示這個(gè)數(shù)據(jù)幀中包含著128字節(jié)的數(shù)據(jù)部分;在SOH后面的00 FF,00表示數(shù)據(jù)幀序號(hào),因?yàn)槭瞧鹗紟,所以它的幀序(yàn)?0,至于FF,它是幀序的取反,YModem特地這么做是為了給數(shù)據(jù)是否正確提供一種判斷依據(jù),通過判斷這兩個(gè)字節(jié)是否為取反關(guān)系,就可以知道數(shù)據(jù)是否傳輸出錯(cuò);filename[ ]就是文件名,如文件名foo.c,它在數(shù)據(jù)幀中存放格式為:66 6F 6F 2E 63 00,一定要在文件名最后跟上一個(gè)00,表示文件名結(jié)束;filesize[ ]就是文件大小,如上面的foo.c的大小為1KByte,即1024Byte,需要先將它轉(zhuǎn)化成16進(jìn)制,即0x400,所以它在數(shù)據(jù)幀的存放格式為:34 30 30 00,即“400”,同樣的文件大小最后需要跟上00,表示結(jié)束;NUL[ ]表示剩下的字節(jié)都用00填充,數(shù)據(jù)部分大小為128字節(jié),除去文件名與文件大小占用的空間外,剩余的字節(jié)全部用00填充;CRCH CRCL分別表示16位CRC校驗(yàn)碼的高8位與低8位。
2、數(shù)據(jù)幀的數(shù)據(jù)格式
YModem的數(shù)據(jù)幀中會(huì)預(yù)留1024字節(jié)空間用來傳輸文件數(shù)據(jù),它跟起始幀接收差不多,如下:
STX 01 FE data[1024] CRCH CRCL
其中STX=0x02,表示這幀數(shù)據(jù)幀后面包含著1024字節(jié)的數(shù)據(jù)部分;STX后面的01 FE,01表示第一幀數(shù)據(jù)幀,F(xiàn)E則是它的取反,當(dāng)然如果是第二幀數(shù)據(jù)的話就是:01 FD;data[1024]表示存放著1024字節(jié)的文件數(shù)據(jù);CRCH與CRCL是CRC16檢驗(yàn)碼的高8位與低8位。
如果文件數(shù)據(jù)的最后剩余的數(shù)據(jù)在128~1024之前,則還是使用STX的1024字節(jié)傳輸,但是剩余空間全部用0x1A填充,如下結(jié)構(gòu):
STX [num] [~num] data[ ] 1A ...1A CRCH CRCL
有一種特殊的情況:如果文件大小小于等于128字節(jié)或者文件數(shù)據(jù)最后剩余的數(shù)據(jù)小于128字節(jié),則YModem會(huì)選擇SOH數(shù)據(jù)幀用128字節(jié)來傳輸數(shù)據(jù),如果數(shù)據(jù)不滿128字節(jié),剩余的數(shù)據(jù)用0x1A填充這是數(shù)據(jù)正的結(jié)構(gòu)就變成了:
文件大小小于128字節(jié):SOH 01 FE data[ ] 1A ...1A CRCH CRCL
文件最后剩余數(shù)據(jù)小于128字節(jié):SOH [num] [~~num] data[ ] 1A...1A CRCH CRCL
3、結(jié)束幀數(shù)據(jù)結(jié)構(gòu)
YModem的結(jié)束幀數(shù)據(jù)也采用SOH的128字節(jié)數(shù)據(jù)幀,它的結(jié)構(gòu)如下:
SOH 00 FF NUL[128] CRCH CRCL
結(jié)束幀同樣以SOH開頭,表示后面跟著128字節(jié)大小的數(shù)據(jù);結(jié)束幀的幀序也認(rèn)為是00 FF;結(jié)束幀的128字節(jié)的數(shù)據(jù)部分不存放任何信息,即NUL[128]全部用00填充。
4、文件傳輸過程
文件的傳輸過程,以具體的例子說明。把foo.c,大小為4196Byte(16進(jìn)制為0x1064)的文件作為傳輸?shù)膶?duì)象,則它的傳輸過程如下:發(fā)送接收端
123下一頁>
- 軟件性質(zhì):國產(chǎn)軟件
- 授權(quán)方式:免費(fèi)版
- 軟件語言:簡(jiǎn)體中文
- 軟件大。317 KB
- 下載次數(shù):547 次
- 更新時(shí)間:2019/10/16 5:22:26
- 運(yùn)行平臺(tái):WinXP,Win7,...
- 軟件描述:Ymodem文件傳輸又名Ymodem升級(jí)工具,是一個(gè)由VB6.0開發(fā)的程序,只要... [立即下載]