转:http://blog.163.com/czblaze_3333/blog/static/208996228201272295236713/

Kermit协议

报文格式:

1.       MARK,起始标记START_CHAR,为 0x01(CTRIL-A);

2.       LEN,报文剩余部分的长度,取值范围0~94,报文最大长度96,长度不包含换行符或者制表符;

3.       SEQ,数据包编号,取模64,;

4.       TYPE,k_state数据包类型

D

数据报文

Y

ACK报文(不能转换编码)

N

NAK,未收到

S

发送初始化报文

B

传输结束

F

文件头部

Z

文件结束

E

Error

Q,T

保留

NAK包用来说明等待的包没有正常接收,它不提供别的信息,例如不提供请求的服务之类。它的数据域总是空的。T报文用于内部kermit程序说明超时。

5.DATA,0~31,127这33个控制字符需要进行转换,前面加’#’,0~31之间加上64,127减去64处理。加过前缀的序列不要分散在不同的包。前缀字符也包含在计数之内。除S,I,A报文及其响应,都不能进行编码。

6.CHECK,假如S是整个报文字符的算术和,只是校验0~5位的和。

这是基本的默认块校验,所有的kermit都必须可以实施。

kermit报文发送过程

1.发送方首先发送一个初始化报文S(以0x01起始),确定报文长度,超时时间等;-->

<--接收方返回一个确认报文Y,在报文数据段存放自己的参数

2.发送方发送文件头报文F,在数据段包含文件名-->(如果发送多个文件,重复此步骤即可)

<--返回ACK,数据段可以不包含数据

3.开始发送文件内容,数据报文D,不在可打印ascii码范围内的,需要被提前替换成等价的可打印字符,每个数据报文都会收到ACK。

4.文件数据发送结束后,发送方发送文件尾报文Z,收方接收后确认。

5.没有文件需要发送时,发送传输结束报文B,并接收ACK,然后关闭连接,物理连接依然保留

每个报文都有编号,0~63之间。

XMODEM

这种古老的传输协议速度较慢,但由于使用了CRC错误侦测方法,传输的准确率可高达99.6%,传输信息单位是“包=128B”,传输速度慢,适合电话线路质量差的情况下使用。

Xmodem是最广泛使用的文件传输协议之一。原始的Xmodem协议使用128字节的数据包和一个简单的“校验和”的错误检测方法。随后的版本XMODEM-CRC,使用了更安全的循环冗余校验(CRC)错误检测方法。 Xmodem协议始终首先尝试使用CRC。如果发送者不响应CRC的请求,接收器转移到校验和模式,并继续其请求传输。
1.Xmodem协议是什么?
  XMODEM协议是一种串口通信中 广泛用到的异步文件传输协议。分为标准Xmodem和1k-Xmodem两种,前者以128字节块的形式传输数据,后者字节块为1k即1024字节,并且每个块都使用一个校验和过程来进行错误检测。在校验过程中如果接收方关于一个块的校验和与它在发送方的校验和相同时,接收方就向发送方发送一个确认字节 (ACK)。由于Xmodem需要对每个块都进行认可,这将导致性能有所下降,特别是延时比较长的场合,这种协议显得效率更低。
    除了Xmodem,还有Ymodem,Zmodem协议。他们的协议内容和Xmodem类似,不同的是Ymodem允许批处理文件传输,效率更高;Zmodem则是改进的了Xmodem,它只需要对损坏的块进行重发,其它正确的块不需要发送确认字节。减少了通信量。
2.Xmodem协议相关控制字符
    SOH                       0x01
    STX             0x02
    EOT                       0x04
    ACK                       0x06
    NAK                       0x15
    CAN                       0x18
    CTRLZ                 0x1A
3.标准Xmodem协议(每个数据包含有128字节数据)帧格式

2-1

SOH

信息包序号

信息包序号的补码

数据区段

校验和

4.1k-Xmodem(每个数据包含有1024字节数据)帧格式

2-2

STX

信息包序号

信息包序号的补码

数据区段

校验和

5.数据包说明
    对于标准Xmodem协议来说,如果传送的文件不是128的整数倍,那么最后一个数据包的有效内容肯定小于帧长,不足的部分需要用CTRL- Z(0x1A)来填充。这里可能有人会问,如果我传送的是bootloader工程生成的.bin文件,mcu收到后遇到0x1A字符会怎么处理?其实如 果传送的是文本文件,那么接收方对于接收的内容是很容易识别的,因为CTRL-Z不是前128个ascii码,不是通用可见字符,如果是二进制文件,mcu其实也不会把它当作代码来执行。哪怕是excel文件等,由于其内部会有些结构表示各个字段长度等,所以不会读取多余的填充字符。否则 Xmodem太弱了。对于1k-Xmodem,同上理。
6.如何启动传输?
    传输由接收方启动,方法是向发送方发送"C"或者NAK(注意,这里提到的NAK是用来启动传输的。以下我们会看到NAK还可以用来对数据产生重传的机 制)。接收方发送NAK信号表示接收方打算用累加和校验;发送字符"C"则表示接收方想打算使用CRC校验(具体校验规则下文Xmodem源码,源码胜于雄辩)。
7.传输过程
    当接收方发送的第一个"C"或者NAK到达发送方,发送方认为可以发送第一个数据包,传输已经启动。发送方接着应该将数据以每次128字节的数据加上包头,包号,包号补码,末尾加上校验和,打包成帧格式传送。
发送方发了第一包后就等待接收方的确认字节ACK,收到接收方传来的ACK确认,就认为数据包被接收方正确接收,并且接收方要求发送方继续发送下一个包; 如果发送方收到接收方传来的NAK(这里,NAK用来告诉发送方重传,不是用来启动传输)字节,则表示接收方请求重发刚才的数据包;如果发送方收到接收方传来的CAN字节,则表示接收方请求无条件停止传输。
8.如何结束传输?
    如果发送方正常传输完全部数据,需要结束传输,正常结束需要发送方发送EOT 字节通知接收方。接收方回以ACK进行确认。当然接收方也可强制停止传输,当接收方发送CAN 字节给发送方,表示接收方想无条件停止传输,发送方收到CAN后,不需要再发送 EOT确认(因为接收方已经不想理它了,呵呵)。
9.特殊处理
    虽然数据包是以 SOH 来标志一个信息包的起始的,但在 SOH 位置上如果出现EOT则表示数据传输结束,再也没有数据传过来。
接收方首先应确认数据包序号的完整性,通过对数据包序号取补,然后和数据包序号的补码异或,结果为0表示正确,结果不为0则发送NAK请求重传。
    接收方确认数据包序号正确后,然后检查是否期望的序号。如果不是期望得到的数据包序号,说明发生严重错误,应该发送一个 CAN 来中止传输。
    如果接收到的数据包的包序号和前一包相同,那么接收方会忽略这个重复包,向发送方发出 ACK ,准备接收下一个包。
    接收方确认了信息包序号的完整性和是正确期望的后,只对 128 字节的数据区段进行算术和校验,结果与帧中最后一个字节(算术校验和)比较,相同发送 ACK,不同发送 NAK。
10.校验和的说明
    Xmodem协议支持2种校验和,它们是累加和与CRC校验。
    当接收方一开始启动传输时发送的是NAK,表示它希望以累加和方式校验。
    当接收方一开始启动传输时发送的是字符“C”,表示它希望以CRC方式校验。
    可能有人会问,接收方想怎么校验发送方都得配合吗,难道发送方必须都支持累加和校验和CRC校验?事实上Xmodem要求支持CRC的就必须同时支持累加和,如果发送方只支持累加和,而接收方用字符“C”来启动,那么发送方只要不管它,当接收方继续发送“C”,三次后都没收到应答,就自动会改为发送 NAK,因为它已经明白发送方可能不支持CRC校验,现在接收方改为累加和校验和发送方通讯。发送方收到NAK就赶紧发送数据包响应。

YMODEM

由XMODEM演变来,效率可靠性高,包=128*8B;一次传输可发送或接受几个文件。

XMODEM1K本质上是XMODEM CRC1K(1024字节)的数据包。在某些系统中,它也可以被称为YMODEM。有些通信软件程序,著名的Procomm的1.x版本中,也将XMODEM-1K 称为YMODEM,但在Procomm的2.0版本中不再称XMODEM-1K为 YMODEM。

YMODEM -G:YMODEM-G是一种YMODEM的变种。它被设计成用于支持错误控制的调制解调器。该协议不提供软件纠错或恢复,但预计调制解调器提供的服务。这是一个流媒体协议,在一个连续的数据流上发送和接收1K的数据包,直显式停止。每块被发送后,它不会等待肯定的确认,而是快速连续地发送块。如果任何块传输失败,本次传输将会失败退出。

文件传输过程的开启:

(1)开启是由接收方开启传输,它发一个大写字母C开启传输。然后进入等待(SOH)状态,如果没有回应,就会超时退出。

(2)发送方开始时处于等待过程中,等待C。收到C以后,发送(SOH)数据包开始信号,发送序号(00),补码(FF),“文件名”,“空格”“文件大小”“除去序号外,补满128字节”,CRC校验两个字节。进入等待(ACK)状态。

(3)接收方收到以后,CRC校验满足,则发送ACK。发送方接收到ACK,又进入等待“文件传输开启”信号,即重新进入等待“C”的状态。

(4)前面接收方只是收到了一个文件名,限制正式开启文件传输,Ymodem支持128字节和1024字节一个数据包。128字节以(SOH)开始,1024字节以(STX)开始。

接收方又发出一个“C”信号,开始准备接收文件。进入等待“SOH”或者“STX”状态。

(5)发送接收到“C”以后,发送数据包,(SOH)(01序号)(FE补码)(128位数据)(CRC校验),等待接收方“ACK”。

(6)文件发送完以后,发送方发出一个“EOT”信号,接收方也以“ACK”回应。

然后接收方会再次发出“C”开启另一次传输,若接着发送方会发出一个“全0数据包”,接收方“ACK”以后,本次通信正式结束。

(7)当然YMODEM相对于XMODEM改进的地方就在于传输再次开启以后,又可以发送另外一个文件,即一次传输允许发送多个文件。

所用到的符号

#define MODEM_SOH 0x01 //数据块起始字符

#define MODEM_STX 0x02 //1028字节开始

#define MODEM_EOT 0x04 //文件传输结束

#define MODEM_ACK 0x06 //确认应答

#define MODEM_NAK 0x15 //出现错误

#define MODEM_CAN 0x18 //取消传输

#define MODEM_C 0x43   //大写字母C

CRC计算方法

in_ptr = mblock->buf; //指向要计算CRC的缓冲区开头

cksum = 0; //

for (stat=mblock->len ; stat>0; stat--) //len是所要计算的长度

{

cksum = cksum^(int)(*in_ptr++) << 8; //

for (i=8; i!=0; i--)

{

if (cksum & 0x8000)

cksum = cksum << 1 ^ 0x1021;

else

cksum = cksum << 1;

}

}

ZMODEM

与上两种不同,可以连续的数据流发送数据,效率更高。Zmodem采用了串流式(streaming)传输方式,传输速度较快,而且还具有自动改变区段大小和断点续传、快速错误侦测等功能。这是目前最流行的文件传输协议。

 

在具体的环境中,通过多次采用的xmodem的传输可以发现,不管是直接传输,还是按照网上 的说法采用rz sz传输,都很难将文件正确传输到嵌入式设备上。当采用zmodem进行传输的时候却发现传输的效率很高,几乎没有失败。

Zmodem协议有两个显着的特点:它是非常有效的,它提供了类似于YMODEM-G的崩溃恢复机制,Zmodem协议不会等待肯定的确认后,每个块被发送,而是快速连续地发送块。 Zmodem协议传输如果因任何原因被取消或中断,恢复后,先前传送的信息都需要重新发送。

此处附加一些secureCRT中的四种文件传输方式,支持客户端和服务器端的文件传输。在SecureCRT下的传输协议有ASCII、Xmodem、Ymodem、Zmodem4种。
Zmodem传输数据会使用到2个命令(服务器上需要另外安装)
sz:将选定的文件发送(send)到本地机器
rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive)
 
在secureCRT上配置好下载目录之后,sz filepath,即可自动下载到本地。

KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结的更多相关文章

  1. KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结(转)

    源:KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结 Kermit协议 报文格式: 1.MARK,起始标记START_CHAR,为 0x01(CTRIL-A): 2.LEN,报文剩余 ...

  2. Kermit,Xmodem,1K-Xmodem,Ymodem,Zmodem传输协议小结

    来自:http://blog.163.com/czblaze_3333/blog/static/208996228201272295236713/ Kermit协议 报文格式: 1.       MA ...

  3. xmodem, ymodem & zmodem

    这三个是modem文件传输协议. https://en.wikipedia.org/wiki/XMODEM https://en.wikipedia.org/wiki/YMODEM https://e ...

  4. QQ传输协议分析

    2015-06-16 16:27:07 一. 实验目的: 在虚拟机下NAT模式下通过Wireshark抓包,分析QQ的传输模式.了解QQ在传输信息过程中用到的协议.分析在Nat模式下,信息传输的穿透性 ...

  5. 【转】安全传输协议SSL和TLS及WTLS的原理

    一.首先要澄清一下名字的混淆 1.SSL(Secure Socket Layer)是Netscape公司设计的主要用于WEB的安全传输协议.这种协议在WEB上获得了广泛的应用. 2.IETF将SSL作 ...

  6. HTTPS----安全超文本传输协议

    HTTPS协议详解HTTPS以保密为目标研发,简单讲是HTTP的安全版.其安全基础是SSL协议,因此加密的详细内容请看SSL.全称Hypertext Transfer Protocol over Se ...

  7. HTTP超文本传输协议-HTTP/1.1中文版

    摘要 超文本传输协议(HTTP)是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议.它是一种通用的,不分状态(stateless)的协议,除了诸如名称服务和分布对象管理系统之类的超文本用途外 ...

  8. ZeroMQ接口函数之 :zmq_ipc – ZMQ本地进程间通信传输协议

    ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ——————————————————————————————————— ...

  9. RTSP RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议

    RTSP 编辑 RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetwo ...

随机推荐

  1. 【Gym 100015B】Ball Painting(DP染色)

    题 There are 2N white balls on a table in two rows, making a nice 2-by-N rectangle. Jon has a big pai ...

  2. 自学Python1.3-centos内python3并与python2共存

    自学Python之路 自学Python1.3-centos内python3并与python2共存 1. 查看是否已经安装Python 测试机系统CentOS 7 默认安装了python2.7, 使用 ...

  3. ANDROID content provide 使用实例

    Content Provider提供了一种多应用间数据共享的方式,比如:联系人信息可以被多个应用程序访问.Content Provider是个实现了一组用于提供其他应用程序存取数据的标准方法的类. 下 ...

  4. HGOI 20180224 题解

    /* The Most Important Things: ljc chat with fyh on QQTa说期末考Ta数学74分感觉不好但是我觉得fyh是地表最强的鸭~~(of course en ...

  5. 【AGC014E】Blue and Red Tree

    Description 给定一棵\(n\)个节点的蓝边树,再给定一棵\(n\)个节点的红边树.请通过若干次操作将蓝树变成红树.操作要求和过程如下: 1.选定一条边全为蓝色的路径: 2.将路径上的一条蓝 ...

  6. Python文件和异常

    程序和运行时数据是在内存中驻留的,涉及到数据交换的地方,通常是磁盘.网络等,因此需要IO接口. IO编程中,Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水,但是只能单 ...

  7. SURF算法

    一.原理: Sift算法的优点是特征稳定,对旋转.尺度变换.亮度保持不变性,对视角变换.噪声也有一定程度的稳定性:缺点是实时性不高,并且对于边缘光滑目标的特征点提取能力较弱. Surf(Speeded ...

  8. Kafka+Log4j2日志

    默认你已经安装配置了Zookeeper和Kafka. 为了目录清晰,我的Kafka配置文件的Zookeeper部分是:加上了节点用来存放Kafka信息 启动Zookeeper,然后启动Kafka. Z ...

  9. hive hadoop 大数据初探

    一.环境搭建: 1.安装虚拟机,mac 系统推荐parallels:直接转化讲师发的xmdl后缀名的文件:里面自带了环境: 注意事项:mac 本机和虚拟机中centos 的通讯,需要修改centos中 ...

  10. 焦点监听事件FocusListener

    public class Demo extends JFrame { public Demo() { setBounds(100, 100, 200, 120); setDefaultCloseOpe ...