找回密码
 立即注册
搜索
查看: 1588|回复: 0

YMODEM 协议

[复制链接]

267

主题

0

回帖

1164

积分

管理员

积分
1164
发表于 2024-1-11 02:33:36 | 显示全部楼层 |阅读模式

YMODEM 协议是一种高效的文件传输协议,通常用于调制解调器之间的数据传输。YMODEM 协议的产生是为了解决 XMODEM 协议存在的一些问题。相较于 XMODEM,YMODEM 协议在数据传输效率和稳定性上有所改进。

YMODEM 协议的主要特点包括:

  1. 数据包大小:YMODEM 协议支持以 1024 字节(或 1K)的块进行数据传输,这比 XMODEM 协议通常使用的 128 字节块要大得多,从而提高了传输效率。
  2. 错误纠正:YMODEM 协议采用循环冗余校验(CRC16)进行错误检测,并在发现错误时请求重发数据块,以确保数据的正确传输。
  3. 批处理模式:YMODEM 协议支持批处理模式,允许使用单个命令传输多个文件,这在传输大量文件时非常有用。
  4. 文件名传输:在发送文件数据之前,YMODEM 协议会先发送文件名和文件大小等信息,以便接收方能够正确地保存文件。

YMODEM 协议中定义了几种关键字

关键字 说明
SOH 0x01 协议头(128 bytes 类型)
STX 0x02 协议头(1K 类型)
EOT 0x04 传输结束
ACK 0x06 接收响应
NAK 0x15 失败响应
CAN 0x18 取消传输
C 0x43 开启文件传输
CPMEOF 0x1A 数据补齐填充字符(^Z,控制字符 Z)

YMODEM 传输协议

SOH [index] [index2] [128 bytes data] [CRC-hi] [CRC-lo]

STX [index] [index2] [1024 bytes data] [CRC-hi] [CRC-lo]

index 是帧序号,0 ~ 255,传输时递增。

index2 是index取反,也即:index2 = ~index = 255 - index

crc16 校验数据域 [data]

在 YMODEM 协议的基本流程中,发送方会先发送一个起始帧,其中包含文件名和文件大小等信息。接收方在收到起始帧后,会发送一个确认信号(ACK)。然后,发送方开始以 1024 字节的块发送文件数据,每发送一个数据块后都会等待接收方的 ACK 信号。如果接收方成功接收到数据块并通过 CRC 校验,则发送 ACK 信号;否则,发送否定确认信号(NAK)请求重发。当文件传输完成后,发送方会发送一个结束帧(EOT),接收方在收到结束帧后会再次发送 ACK 信号进行确认。

交互序列图

传输时先发送一个 128 字节的文件信息块,将文件名和文件大小发送给设备。

SOH   00   FF   [filename]   [filesize]   [NULL]   CRCH   CRCL

[filename] 文件名,如文件名 foo.c,它在数据帧中存放格式为:66 6F 6F 2E 63 00

[filesize] 文件大小,例如大小为 400 bytes,它在数据帧的存放格式为:34 30 30 00,即 “400”。(不同的软件可能有所却别)

[NULL]  表示剩下的字节都用 00 填充

传输文件内容时,如果文件数据的最后剩余的数据在 128 ~ 1024 之间,则还是使用 STX 的 1024 字节传输;如果文件大小小于等于 128 字节,则选择 SOH 数据帧用 128 字节来传输数据。若数据不足一帧,用 CPMEOF 来填充。


协议文本原件《X/YMODEM Protocol Reference June 18 1988》:
游客,如果您要查看本帖隐藏内容请回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|棱讯科技 ( 粤ICP备2024228160号-2|粤公网安备44030002003510号 )

GMT+8, 2024-12-22 02:21 , Processed in 0.020428 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表