Реализация протокола Tftp и различие между netascii и октетом - PullRequest
5 голосов
/ 18 августа 2011

Я создаю приложение, которое является сервером, который реализует протокол tftp.У меня трудные времена, чтобы понять, в чем разница между форматом ASCII и двоичным форматом (netascii и octect) в tftp, и как я должен читать файлы по-разному, как указано в протоколе.быть представлен одним байтом.Поэтому я не понимаю, в чем разница между чтением в режиме ascii (1 байт каждый символ) и двоичном режиме (1 необработанный байт).

Я могу прочитать файл с флагом ios :: binary для двоичного режима (октет в tftp) и без него для ascii (netascii в tftp), но я действительно не понимаю, в чем разница при чтении файлов этими двумя способами (я всегда придумываю массив байтов).

Если кто-то может помочь мне понять, я буду очень признателен за это

Спецификация протокола tftp: http://www.rfc -editor.org / rfc / rfc1350.txt

часть, которую я не понимаю, это:

В настоящее время поддерживаются три режима передачи: netascii (Это ascii, как определено в «Стандартном коде обмена информацией США»
[1]с изменениями, указанными в «Протоколе Telnet
Спецификация» [3].) Обратите внимание, что это 8-разрядный формат.Термин
«netascii» будет использоваться в этом документе для обозначения этой
конкретной версии ascii.);октет (это заменяет «двоичный» режим предыдущих версий этого документа.) сырые 8-битные байты;mail,
netascii символов, отправленных пользователю, а не файл.(Режим mail
устарел и не должен быть реализован или использован.) Дополнительные режимы
могут быть определены парами взаимодействующих хостов.

1 Ответ

8 голосов
/ 18 августа 2011

Есть два отрывка, которые могут помочь прояснить, какова цель netascii в RFC-1350 / TFTP:

netascii (Это ascii, как определено в "Стандартном коде обмена информацией США" [1] с изменениями, указанными в «Спецификации протокола Telnet» [3].)

«Спецификацией протокола Telnet» является RFC-764, и он описывает интерпретацию различных кодов ASCII для использования на«Сетевой виртуальный терминал».Таким образом, netascii будет следовать этим интерпретациям (которые включают в себя, что строки должны заканчиваться последовательностью CR / LF).

и:

Хост, который получает данные в режиме netascii, должен преобразоватьданные в свой собственный формат.

Таким образом, можно ожидать, что хост, который использовал EBCDIC в качестве своей нативной кодировки, преобразует netascii в эту кодировку, но оставит данные «октет» в покое.

Если вы внедряете TFTP-сервер в Unix (или другой) системе, которая использует LF для окончания строк, вы должны будете добавить CR для передачи netascii (а также конвертировать действительные символы CR в файлв последовательности CR / NUL.

...