XMODEM文件传输协议
XMODEM是由Ward Christensen于1977年开发的一种标准文件传输协议。它发送包含数据的数据块,并等待接收块确认。XMODEM在硬件和软件中都有使用。
XMODEM是一种半双工通信协议,具有有效的错误检测机制。
它将原始数据分成一系列数据包发送给接收方,以及其他信息,允许接收方确定数据包是否正确接收。
文件传输完成后,会在最后一个数据块后发送一个文件结束符。这个字符不在数据包内,而是单独发送一个字节。
由于文件长度不是协议的一部分,所以最后的数据包会用已知的字符填充,这些字符可以丢弃。
文件一次传输一个数据报。计算数据包校验和,并与接收方在数据包末尾找到的校验和进行比较。当接收方向发送方发送确认消息时,将发送后续的数据包。
如果校验和有问题,接收方会发送一条消息请求重新发送。
接收到否定反馈后,发送方会重新发送数据包,并在发出传输失败之前尝试连续传输大约十次。
传输方法
接收方控制传输,即在接收方发送第一个NAK之前,发送方不会发送任何数据。发送方等待接收方发送NAK字节。
NAK字节是接收方准备好开始的信号。这是指示文件传输准备好开始的第一个字节。
如果接收方响应时间过长或发生错误,发送方将停止等待或“超时”。文件传输将在超时后重新启动。
如果接收方由于缺少EOT字符而在等待数据时10秒内没有收到有效的数据包,也会发送NAK。
接收方执行以下功能,并一次传输一个数据包
假设发送的数据包编号与实际数据包编号相同,即检查数据包中的第二个字节。
如果出现差异,则发送CAN字节以取消传输。接收数据包后计算数据包校验和,并与从发送方接收到的数据包末尾的校验和进行比较。
如果条件SUM = CHECKSUM为真,则接收方向发送方发送ACK字节,指示按顺序发送下一个数据包。
如果情况不理想,则发送NAK字节,表示发送方将重新发送字节。
当发送方发送EOT字节而不是SOH字节时,接收方发送NAK字节。
如果发送方之后立即发送另一个EOT,接收方发送ACK字节,传输完成。
接收方可以通过发送CAN字节随时取消传输,而发送方只能在数据块之间通过发送CAN字节来取消。