Tftp协议实现和netascii和octect之间的区别

Fir*_*DoL 5 c++ protocols tftp

我正在构建一个应用程序,它是一个实现tftp协议的服务器.我很难理解tftp中ASCII格式和二进制格式(netascii和octect)之间的区别,以及如何以协议状态不同地读取文件.

我知道ASCII字符可以用单个字节表示.所以我不明白读取ascii模式(每个字符1个字节)和二进制模式(1个原始字节)之间的区别.

我可以使用标志ios :: binary获取二进制模式(在tftp中为octet)而没有ascii(nettscii在tftp中)的文件,但是我真的不明白在这两种方式中读取文件的区别是什么(我总是想出一个字节数组).

如果有人能帮助我理解,我会非常感激

tftp协议规范:http://www.rfc-editor.org/rfc/rfc1350.txt

我不明白的部分就是这个:

目前支持三种传输模式:netascii(这是"美国信息交换标准代码"
[1]中定义的ascii,具有"Telnet协议
规范"[3]中指定的修改.)请注意,它是8位ascii.
本文档中将使用术语"netascii"来表示
ascii的这个特定版本.); octet(这取代了本文档先前版本的"二进制"模式.)原始8位字节; mail,
netascii字符发送给用户而不是文件.(邮件
模式已过时,不应实现或使用.)其他
模式可由成对的协作主机定义.

Mic*_*urr 8

有两个段落可以帮助澄清netascii在RFC-1350/TFTP中的用途:

netascii(这是"美国信息交换标准代码"[1]中定义的ascii,其修改在"Telnet协议规范"[3]中指定.)

"Telnet协议规范"是RFC-764,它描述了用于"网络虚拟终端"的各种ASCII代码的解释.因此,netascii将遵循这些解释(其中包括必须以CR/LF序列终止行).

和:

接收netascii模式数据的主机必须将数据转换为自己的格式.

因此,例如,使用EBCDIC作为其本机编码的主机可能会将netascii转换为该编码,但会单独留下"八位字节"数据.

如果您在使用LF进行行结束的Unix(或其他)系统上实现TFTP服务器,则需要为netascii传输添加CR(以及将文件中的实际CR字符转换为CR/NUL)序列.

  • @ Fire-Dragon:CR不是在Unix系统上结束的行(例如,它可能是在OS/X之前的Mac上).并且telnet规范说,不属于换行符的CR必须是CR/NUL. (2认同)