報(bào)文格式:
1.MARK,起始標(biāo)記START_CHAR,為0x01(CTRIL-A);
2.LEN,報(bào)文剩余部分的長度,取值范圍0~94,報(bào)文最大長度96,長度不包含換行符或者制表符;
3.SEQ,數(shù)據(jù)包編號(hào),取模64,;
4.TYPE,k_state數(shù)據(jù)包類型
D | 數(shù)據(jù)報(bào)文 |
Y | ACK報(bào)文(不能轉(zhuǎn)換編碼) |
N | NAK,未收到 |
S | 發(fā)送初始化報(bào)文 |
B | 傳輸結(jié)束 |
F | 文件頭部 |
Z | 文件結(jié)束 |
E | Error |
Q,T | 保留 |
5.DATA,0~31,127這33個(gè)控制字符需要進(jìn)行轉(zhuǎn)換,前面加’#’,0~31之間加上64,127減去64處理。加過前綴的序列不要分散在不同的包。前綴字符也包含在計(jì)數(shù)之內(nèi)。除S,I,A報(bào)文及其響應(yīng),都不能進(jìn)行編碼。
6.CHECK,假如S是整個(gè)報(bào)文字符的算術(shù)和,只是校驗(yàn)0~5位的和。
這是基本的默認(rèn)塊校驗(yàn),所有的kermit都必須可以實(shí)施。
kermit報(bào)文發(fā)送過程
1.發(fā)送方首先發(fā)送一個(gè)初始化報(bào)文S(以0x01起始),確定報(bào)文長度,超時(shí)時(shí)間等;-->
<--接收方返回一個(gè)確認(rèn)報(bào)文Y,在報(bào)文數(shù)據(jù)段存放自己的參數(shù)
2.發(fā)送方發(fā)送文件頭報(bào)文F,在數(shù)據(jù)段包含文件名-->(如果發(fā)送多個(gè)文件,重復(fù)此步驟即可)
<--返回ACK,數(shù)據(jù)段可以不包含數(shù)據(jù)
3.開始發(fā)送文件內(nèi)容,數(shù)據(jù)報(bào)文D,不在可打印ascii碼范圍內(nèi)的,需要被提前替換成等價(jià)的可打印字符,每個(gè)數(shù)據(jù)報(bào)文都會(huì)收到ACK。
4.文件數(shù)據(jù)發(fā)送結(jié)束后,發(fā)送方發(fā)送文件尾報(bào)文Z,收方接收后確認(rèn)。
5.沒有文件需要發(fā)送時(shí),發(fā)送傳輸結(jié)束報(bào)文B,并接收ACK,然后關(guān)閉連接,物理連接依然保留
每個(gè)報(bào)文都有編號(hào),0~63之間。
簡(jiǎn)單通用,傳輸信息單位是“包=128B”,傳輸速度慢,適合電話線路質(zhì)量差的情況下使用。
Xmodem是最廣泛使用的文件傳輸協(xié)議之一。原始的Xmodem協(xié)議使用128字節(jié)的數(shù)據(jù)包和一個(gè)簡(jiǎn)單的“校驗(yàn)和”的錯(cuò)誤檢測(cè)方法。隨后的版本XMODEM-CRC,使用了更安全的循環(huán)冗余校驗(yàn)(CRC)錯(cuò)誤檢測(cè)方法。Xmodem協(xié)議始終首先嘗試使用CRC。如果發(fā)送者不響應(yīng)CRC的請(qǐng)求,接收器轉(zhuǎn)移到校驗(yàn)和模式,并繼續(xù)其請(qǐng)求傳輸。
1.Xmodem協(xié)議是什么?
XMODEM協(xié)議是一種串口通信中 廣泛用到的異步文件傳輸協(xié)議。分為標(biāo)準(zhǔn)Xmodem和1k-Xmodem兩種,前者以128字節(jié)塊的形式傳輸數(shù)據(jù),后者字節(jié)塊為1k即1024字節(jié),并且每個(gè)塊都使用一個(gè)校驗(yàn)和過程來進(jìn)行錯(cuò)誤檢測(cè)。在校驗(yàn)過程中如果接收方關(guān)于一個(gè)塊的校驗(yàn)和與它在發(fā)送方的校驗(yàn)和相同時(shí),接收方就向發(fā)送方發(fā)送一個(gè)確認(rèn)字節(jié)(ACK)。由于Xmodem需要對(duì)每個(gè)塊都進(jìn)行認(rèn)可,這將導(dǎo)致性能有所下降,特別是延時(shí)比較長的場(chǎng)合,這種協(xié)議顯得效率更低。
2.Xmodem協(xié)議相關(guān)控制字符
3
2-1
SOH | 信息包序號(hào) | 信息包序號(hào)的補(bǔ)碼 | 數(shù)據(jù)區(qū)段 | 校驗(yàn)和 |
4.1k-Xmodem(每個(gè)數(shù)據(jù)包含有1024字節(jié)數(shù)據(jù))幀格式
2-2
STX | 信息包序號(hào) | 信息包序號(hào)的補(bǔ)碼 | 數(shù)據(jù)區(qū)段 | 校驗(yàn)和 |
5.?dāng)?shù)據(jù)包說明
6.如何啟動(dòng)傳輸?
7.傳輸過程
發(fā)送方發(fā)了第一包后就等待接收方的確認(rèn)字節(jié)ACK,收到接收方傳來的ACK確認(rèn),就認(rèn)為數(shù)據(jù)包被接收方正確接收,并且接收方要求發(fā)送方繼續(xù)發(fā)送下一個(gè)包;如果發(fā)送方收到接收方傳來的NAK(這里,NAK用來告訴發(fā)送方重傳,不是用來啟動(dòng)傳輸)字節(jié),則表示接收方請(qǐng)求重發(fā)剛才的數(shù)據(jù)包;如果發(fā)送方收到接收方傳來的CAN字節(jié),則表示接收方請(qǐng)求無條件停止傳輸。
8.如何結(jié)束傳輸?
9.特殊處理
接收方首先應(yīng)確認(rèn)數(shù)據(jù)包序號(hào)的完整性,通過對(duì)數(shù)據(jù)包序號(hào)取補(bǔ),然后和數(shù)據(jù)包序號(hào)的補(bǔ)碼異或,結(jié)果為0表示正確,結(jié)果不為0則發(fā)送NAK請(qǐng)求重傳。
10.校驗(yàn)和的說明
由XMODEM演變來,效率可靠性高,包=128*8B;一次傳輸可發(fā)送或接受幾個(gè)文件。
XMODEM1K本質(zhì)上是XMODEM CRC1K(1024字節(jié))的數(shù)據(jù)包。在某些系統(tǒng)中,它也可以被稱為YMODEM。有些通信軟件程序,著名的Procomm的1.x版本中,也將XMODEM-1K 稱為YMODEM,但在Procomm的2.0版本中不再稱XMODEM-1K為YMODEM。
YMODEM -G:YMODEM-G是一種YMODEM的變種。它被設(shè)計(jì)成用于支持錯(cuò)誤控制的調(diào)制解調(diào)器。該協(xié)議不提供軟件糾錯(cuò)或恢復(fù),但預(yù)計(jì)調(diào)制解調(diào)器提供的服務(wù)。這是一個(gè)流媒體協(xié)議,在一個(gè)連續(xù)的數(shù)據(jù)流上發(fā)送和接收1K的數(shù)據(jù)包,直顯式停止。每塊被發(fā)送后,它不會(huì)等待肯定的確認(rèn),而是快速連續(xù)地發(fā)送塊。如果任何塊傳輸失敗,本次傳輸將會(huì)失敗退出。
文件傳輸過程的開啟:
(1)開啟是由接收方開啟傳輸,它發(fā)一個(gè)大寫字母C開啟傳輸。然后進(jìn)入等待(SOH)狀態(tài),如果沒有回應(yīng),就會(huì)超時(shí)退出。
(2)發(fā)送方開始時(shí)處于等待過程中,等待C。收到C以后,發(fā)送(SOH)數(shù)據(jù)包開始信號(hào),發(fā)送序號(hào)(00),補(bǔ)碼(FF),“文件名”,“空格”“文件大小”“除去序號(hào)外,補(bǔ)滿128字節(jié)”,CRC校驗(yàn)兩個(gè)字節(jié)。進(jìn)入等待(ACK)狀態(tài)。
(3)接收方收到以后,CRC校驗(yàn)滿足,則發(fā)送ACK。發(fā)送方接收到ACK,又進(jìn)入等待“文件傳輸開啟”信號(hào),即重新進(jìn)入等待“C”的狀態(tài)。
(4)前面接收方只是收到了一個(gè)文件名,限制正式開啟文件傳輸,Ymodem支持128字節(jié)和1024字節(jié)一個(gè)數(shù)據(jù)包。128字節(jié)以(SOH)開始,1024字節(jié)以(STX)開始。
接收方又發(fā)出一個(gè)“C”信號(hào),開始準(zhǔn)備接收文件。進(jìn)入等待“SOH”或者“STX”狀態(tài)。
(5)發(fā)送接收到“C”以后,發(fā)送數(shù)據(jù)包,(SOH)(01序號(hào))(FE補(bǔ)碼)(128位數(shù)據(jù))(CRC校驗(yàn)),等待接收方“ACK”。
(6)文件發(fā)送完以后,發(fā)送方發(fā)出一個(gè)“EOT”信號(hào),接收方也以“ACK”回應(yīng)。
然后接收方會(huì)再次發(fā)出“C”開啟另一次傳輸,若接著發(fā)送方會(huì)發(fā)出一個(gè)“全0數(shù)據(jù)包”,接收方“ACK”以后,本次通信正式結(jié)束。
(7)當(dāng)然YMODEM相對(duì)于XMODEM改進(jìn)的地方就在于傳輸再次開啟以后,又可以發(fā)送另外一個(gè)文件,即一次傳輸允許發(fā)送多個(gè)文件。
所用到的符號(hào)
#define MODEM_SOH 0x01//數(shù)據(jù)塊起始字符
#define MODEM_STX 0x02//1028字節(jié)開始
#define MODEM_EOT 0x04//文件傳輸結(jié)束
#define MODEM_ACK 0x06//確認(rèn)應(yīng)答
#define MODEM_NAK 0x15//出現(xiàn)錯(cuò)誤
#define MODEM_CAN 0x18//取消傳輸
#define MODEM_C0x43
CRC計(jì)算方法
in_ptr =mblock->buf; //指向要計(jì)算CRC的緩沖區(qū)開頭
cksum = 0; //
for(stat=mblock->len ; stat>0; stat--)//len是所要計(jì)算的長度
{
cksum = cksum^(int)(*in_ptr++)<< 8; //
for (i=8; i!=0; i--)
{
if (cksum &0x8000)
cksum = cksum<< 1 ^ 0x1021;
else
cksum = cksum<< 1;
}
}
與上兩種不同,可以連續(xù)的數(shù)據(jù)流發(fā)送數(shù)據(jù),效率更高
在具體的環(huán)境中,通過多次采用的xmodem的傳輸可以發(fā)現(xiàn),不管是直接傳輸,還是按照網(wǎng)上的說法采用rz sz傳輸,都很難將文件正確傳輸?shù)角度胧皆O(shè)備上。當(dāng)采用zmodem進(jìn)行傳輸?shù)臅r(shí)候卻發(fā)現(xiàn)傳輸?shù)男屎芨?,幾乎沒有失敗。
Zmodem協(xié)議有兩個(gè)顯著的特點(diǎn):它是非常有效的,它提供了類似于YMODEM-G的崩潰恢復(fù)機(jī)制,Zmodem協(xié)議不會(huì)等待肯定的確認(rèn)后,每個(gè)塊被發(fā)送,而是快速連續(xù)地發(fā)送塊。Zmodem協(xié)議傳輸如果因任何原因被取消或中斷,恢復(fù)后,先前傳送的信息都需要重新發(fā)送。
聯(lián)系客服