zoukankan      html  css  js  c++  java
  • Xmodem、Ymodem协议总结

    写在前面:

       本文包含如下内容:

      一、文件传输简介

      二、传输协议

      三、协议特点

      四、XModem协议解析

        (4-1)协议校验和方式传输流程解析

        (4-2)CRC校验信息包解析

      五、YModem协议解析

        (5-1)YModem起始帧的数据格式解析

        (5-2)YModem数据帧的数据格式解析

        (5-3)YModem结束帧的数据格式解析

        (5-4)YModem的文件传输流程解析

    一、文件传输简介

      文件传输是数据交换的主要形式。在进行文件传输时,为使文件能被正确识别和传送,我们需要在两台计算机之间建立统一的传输协议。这个协议包括了文件的识别、传送的起止时间、错误的判断与纠正等内容。Xmodem、Ymodem和Zmodem协议是最常用的三种通信协议。

    二、传输协议

      在SecureCRT下的传输协议有ASCII、Xmodem、Ymodem、Zmodem等。如下图所示,在开发中,可以使用SecureCRT软件进行文件传输。

        

     三、协议特点

      (1)Xmodem协议是最早的,传输128字节信息块。

      (2)Ymodem是Xmodem的改进版协议,具有传输快速稳定的优点。它可以一次传输1024字节的信息块,同时还支持传输多个文件。  

      平常所说的Ymodem协议是指的Ymodem-1K,除此还有Ymodem-g(没有CRC校验,不常用)。


      YModem-1K用1024字节信息块传输取代标准的128字节传输,数据的发送会使用CRC校验,保证数据传输的正确性。它每传输一个信息块数据时,就会等待接收端回应ACK信号,接收到回应后,才会继续传输下一个信息块,保证数据已经全部接收。

    四、XModem协议解析

      Xmodem协议传输有接收程序和发送程序完成,先由接收程序发送协商字符,协商校验方式,协商通过之后发送程序就开始发送数据包,接收程序接收到完整的一个数据包之后按照协商的方式对数据包进行校验。校验通过之后发送确认字符,然后发送程序继续发送下一包;如果校验失败,则发送否认字符,发送程序重传此数据包。
      定义:
      

      SOH 01H(modem数据头)
      EOT 04H(发送结束)
      ACK 06H(应答)
      NAK 15H(非应答)
      CAN 18H(取消发送)

     
      Xmodem数据包,包含一个标题开始字符,一个单字节包序号,一个包序号的补码,128字节数据和一个双字节的CRC校验。数据包结构如下图所示:

       (1)校验和方式传输流程:
      接收方要求发送方以校验和方式发送时以NAK来请求,发送方将对此做出应答。如下图:

      

          

       (2)CRC校验信息包

      计算16位CRC校验的除数多项式为X ^ 16 + X ^ 12 + X ^ 5 + 1,信息报中的128数据字节将参加CRC校验的计算,在发送端CRC16的高字节在前,低字节在后。
    传输流程:接收方要求发送方以CRC校验方式发送时以‘C’来请求,发送方将对此作出应答。

      

       

       信息报中如果剩余的数据不足128字节,不足的部分将以0x1A填充。

    五、YModem协议解析
      (1)起始帧的数据格式

      YModem的起始帧并不直接传输文件的数据,而是将文件名与文件的大小放在数据帧中传输,它的帧长=3字节数据首部+128字节数据+2字节CRC16校验码=33字节。它的数据帧结构如下:
      

    起始数据帧结构:
    SOH | 00 | FF | filename | filezise | NUL | CRCH | CRCL 起始数据帧结构解析:   1、其中SOH=0x01,表示这个数据帧中包含着128个字节的数据(STX表示1024字节,初始帧只有128个)   2、00表示数据帧序号,初始是0,依次向下排   3、FF是帧序号的取反   4、filename是要传输的文件名,如USTB_V3_1.0.1.26_NMEA.Bin,它在数据帧中的格式为:55 53 54 42 5F 56 33 5F 31 2E 30 2E 31 2E 32 36 5F 4E 4D 45 41 2E 42 69 6E 00,也就是把ASCII码转成十六进制,但是最后一定要在文件名后加上00,表示文件名的结束   5、filesize表示文件的大小,如上面的USTB_V3_1.0.1.26_NMEA.Bin大小是132KB,也就是135168Byte,转换成十六进制就是0x21000,它在数据帧中的格式就是32 31 30 30 30 00,也就是ASCII的“21000”,同样最后要加上00表示结束   6、NUL就是数据部分的128字节中除去文件名和文件大小占据的剩下的字节都用00填充   7、CRCH和CRCL分别表示16位CRC校验码的高8位与低8位。


      (2)数据帧的数据格式

          YModem的数据帧中会预留1024字节空间用来传输文件数据,它跟起始帧接收差不多,如下:

    数据帧结构:
    STX | 01 | FE | data[1024] | CRCH | CRCL 数据帧结构解析  1、其中STX=0x02,表示这帧数据帧后面包含着1024字节的数据部分;  2、01是表示帧序号,FE是它的取反,再下一帧数据就是02 FD,以此类推;  3、data[1024]表示存放着1024字节的文件数据;  4、CRCH与CRCL是CRC16检验码的高8位与低8位。

    特殊情况  1、如果文件数据的最后剩余的数据在128
    ~1024之前,则还是使用STX的1024字节传输,但是剩余空间全部用0x1A填充,如下结构:  STX | 01 | FE | data[1024] | 1A 1A……… CRCH | CRCL  2、有一种特殊的情况:如果文件大小小于或等于128字节或者文件数据最后剩余的数据小于128字节,则YModem会选择SOH数据帧用128字节来传输数据,如果数据不满128字节,剩余的数据用0x1A填充 
     这时数据帧的结构就变成:  
    1)、文件大小小于128字节: SOH | 01 | FE | data[ ] | 1A ...1A | CRCH | CRCL  2)、文件最后剩余数据小于128字节: SOH | 01 | FE | data[ ] | 1A...1A | CRCH | CRCL


      (3)结束帧的数据格式
          YModem的结束帧数据也采用SOH的128字节数据帧,它的结构如下:

        SOH | 00 | FF | NUL | [128] | CRCH | CRCL

        结束帧同样以SOH开头,表示后面跟着128字节大小的数据;结束帧的帧序也认为是00 FF;结束帧的128字节的数据部分不存放任何信息,即全部用00填充。

       (4)文件传输过程

           文件的传输过程,以具体的例子说明。把USTB_V3_1.0.1.26_NMEA.Bin,大小为135168Byte(16进制为0x21000,它在数据帧中的格式就是32 31 30 30 30 00)的文件作为传输的对象,则它的传输过程如下:

      发送端                                                                                   接收端       

       <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   C

      SOH 00 FF [55 53…6E 00]" "[32…30 00]'' NUL[96] CRC CRC >>>

      <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    ACK

      <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    C

      STX 01 FE data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>>     

      <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

      STX 02 FD data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>

      <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

      STX 03 FC data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>

      <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

      STX 04 FB data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>

      <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

      SOH 05 FA data[100]  1A[28] CRC CRC>>>>>>>>>>>>>>>>

      <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

      EOT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

      <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   NAK

      EOT>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

      <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

      <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   C

      SOH 00 FF NUL[128] CRCCRC >>>>>>>>>>>>>>>>>>>>>>>

      <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   ACK

    参考原文链接:

      https://blog.csdn.net/sinat_33323544/article/details/83994835

      https://blog.csdn.net/lcmsir/article/details/80550821

  • 相关阅读:
    ubuntu远程windows桌面
    spring boot 给返回值加状态 BaseData
    spring boot 拦截异常 统一处理
    IntelliJ IDEA spring boot 远程Ddbug调试
    IntelliJ IDEA 常用插件
    spring boot 请求地址带有.json 兼容处理
    spring boot 接口返回值去掉为null的字段
    spring boot 集成disconf
    Spring boot 自定义拦截器
    Linux下安装MySQL
  • 原文地址:https://www.cnblogs.com/iriczhao/p/12052676.html
Copyright © 2011-2022 走看看