TFTP
Название Trivial File Transfer Protocol
Уровень (по модели OSI) Прикладной
Семейство UDP/IP
Создан в ~ 1980
Порт/ID 69/UDP
Назначение протокола Передача файлов
Спецификация RFC 1350 / STD 33
Основные реализации (клиенты) RIS Windows, tftp.exe
Основные реализации (серверы) WinAgents TFTP Server, RIS Windows, tftpd
Расширяемость Опции (RFC 2347)
Основные расширения Размер блока (RFC 2348), Тайм-аут передачи (RFC 2349)

TFTP (англ. Trivial File Transfer Protocol — простой протокол передачи файлов) используется главным образом для первоначальной загрузки бездисковых рабочих станций. TFTP, в отличие от FTP, не содержит возможностей аутентификации (хотя возможна фильтрация по IP-адресу) и основан на транспортном протоколе UDP.

Применение

править

Основное назначение TFTP — обеспечение простоты реализации клиента. В связи с этим он используется для загрузки бездисковых рабочих станций, загрузки обновлений и конфигураций в «умные» сетевые устройства, записи статистики с мини-АТС (CDR) и аппаратных маршрутизаторов/файрволов.[источник не указан 709 дней]

TFTP наряду с HTTP используется для программирования микроконтроллеров методом In-Application Programming (IAP) через интерфейс Ethernet[1].

Безопасность

править

Поскольку протокол не поддерживает аутентификации, единственный метод идентификации клиента — это его сетевой адрес (который может быть подделан). Обычно в Unix-системах tftpd доступен только каталог /tftpboot. Однако в старых TFTP-серверах было возможным получить файл паролей командой RRQ ../etc/passwd.

Демон tftpd (одна из реализаций tftp-сервера) отказывается обрабатывать файлы, содержащие в своём имени комбинацию «/../» или начинающуюся с «../». Запись разрешается только в файлы, которые уже существуют (любого размера, например нулевого), и доступны для публичной записи (права доступа: -rw-rw-rw-)[2].

Дополнительная защита от доступа к произвольным файлам осуществляется с помощью смены корневого каталога на каталог tftpd (обычно /usr/TFTPRoot).

Типы пакета

править

В протоколе TFTP предусмотрены 4 вида пакетов, кодируемые пятью кодами операции (англ. opcode). Для кода операции зарезервированы два первых байта в пакете[3]:

  • RRQ/WRQ packet — пакет запроса чтения (Read request; opcode 1) или записи (Write request; opcode 2);
  • Data packet — пакет с данными (opcode 3);
  • ACK packet — пакет подтверждения (Acknowledgment; opcode 4);
  • Error packet — пакет с сообщением об ошибке (opcode 5).

Запросы на чтение и запись

править

Для начала передачи данных клиент должен послать серверу WRQ или RRQ-пакет. У обоих пакетов формат одинаковый:

0x01/0x02 (тип пакета) Имя файла 0x00 (конец строки) Режим передачи 0x00 (конец строки) Опции… (если есть)
2 байта строка в ASCII 1 байт строка в ASCII 1 байт См. «Опции»

В TFTP существует 2 режима передачи (режим Mail, определенный в IEN 133, признан устаревшим):

  • netascii — файл перед передачей перекодируется в ASCII.
  • octet — файл передается без изменений.

После получения RRQ-пакета сервером он сразу начинает передачу данных. В случае с WRQ-запросом сервер должен прислать ACK-пакет c номером пакета 0.

Процесс передачи данных

править

После получения запроса RRQ сервер сразу посылает в качестве подтверждения пакет с данными и с ID пакета, равным единице. В WRQ в качестве подтверждения используется ACK с ID, равным нулю. Всего по TFTP можно передать 32 МБ (65536 * 512 / 1024²), однако, из-за использования знакового int вместо беззнакового, размер подтверждения ограничен 16 мегабайтами. Однако если клиент и сервер поддерживают расширения протокола RFC 2347 и RFC 2348, то максимальный размер передаваемого файла увеличивается до 4 ГБ.

Опции TFTP

править

В RFC 2347 был предусмотрен формат опций, которые можно присоединять к окончанию RRQ-пакета и WRQ-пакета:

Код опции 0x00 (конец строки) Значение опции 0x00 (конец строки)
строка в ASCII 1 байт строка в ASCII 1 байт

Опций может быть несколько. Тогда они будут следовать друг за другом. Порядок опций не важен.

В ответ на RRQ (или WRQ) с опциями сервер должен прислать OACK со списком опций, которые сервер принял. Наиболее распространённые опции:

Название Определена в Код опции
Размер блока RFC 2348 blksize В качестве значения опции идёт число, принимающее значение от 8 до 65464, обозначающее размер блока.
Интервал повторной передачи (Timeout) RFC 2349 timeout В качестве значения опции идёт число, принимающее значение от 1 до 255, обозначающее время ожидания перед повторной передачей блока в секундах.
Размер файла RFC 2349 tsize В качестве значения опции идёт число, обозначающее размер передаваемого файла в байтах.

Ошибки

править

В TFTP информация об ошибке имеет следующий формат:

0x05 (тип пакета) Код ошибки Описание ошибки 0x00 (конец строки)
2 байта 2 байта строка в ASCII 1 байт

Код ошибки может принимать одно из значений, перечисленных в STD 33 (за исключением кода 8 — он описан в RFC 2347). Вот они:

Код ошибки Описание
0 Нет определенного кода, см. текст ошибки
1 Файл не найден
2 Доступ запрещен
3 Невозможно выделить место на диске
4 Некорректная TFTP-операция
5 Неправильный Transfer ID
6 Файл уже существует
7 Пользователь не существует
8 Неправильная опция

Схема URI

править

В RFC 3617 определен формат URI для TFTP. Он, имеет следующий вид:

tftp://[узел назначения]/[нужный файл];mode=[режим передачи]

Например:

tftp://example.com/todo.txt;mode=netascii

Стандарты

править

Опции

править

См. также

править

Примечания

править
  1. AN3226, 2010, Introduction, p. 1.
  2. страницы документации man tftpd из состава FreeBSD 4.9
  3. AN3226, 2010, 2.1 TFTP Overview, p. 5.

Литература

править
  • Стивенс, У. Р. Гл. 15. Простейший протокол передачи файлов TFTP // Протоколы TCP/IP : Практическое руководство. — ISBN 5-7940-0093-7.
  • Остерлох, Х. Гл. 16. Простейший протокол передачи файлов (TFTP) // TCP/IP : Семейство протоколов передачи данных в сетях компьютеров. — ISBN 5-93772-039-3.
  • AN3226 : STM32F107 In-Application Programming (IAP) over Ethernet : Application note : [англ.] : [арх. 22 сентября 2021]. — STMicroelectronics, 2010. — 18 p.
  • Sollins, K. R. The TFTP Protocol : [англ.] : [арх. 2 июля 2014]. — 1980. — 29 January.

Ссылки

править

📚 Artikel Terkait di Wikipedia

PDP-11

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 B Opcode Mode R Src Mode R Dst

JavaScript

2009. Архивировано 22 августа 2011 года. Шустер В. HotRuby — Ruby 1.9/YARV opcode interpreter in Javascript (англ.). infoQ (27 марта 2008). — Описание HotRuby

System Shock (игра, 1994)

«киберпанковой», на компьютере Macintosh и недорогом синтезаторе, используя Opcode Vision. Она динамично меняется в зависимости от действий игрока и принятых

Link-Local Multicast Name Resolution

QR — один бит Query/Responce — признак запроса или ответа. OPCODE — четыре бита Opcode — код операции (код запроса). C — один бит Conflict — признак

X86

Предназначен для уточнения инструкции. Точно определяющие инструкцию байты: Байт Opcode (произвольное константное значение). Байт Opcode2 (произвольное константное

Zilog eZ80

Circuit Cellar (139). Дата обращения: 15 июля 2009. Harston, J. G. Full eZ80 Opcode List  (15 апреля 1998). Дата обращения: 6 июня 2025. http://habr.com/ru/articles/809205/

MSP430

Система команд 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Команда 0 0 0 1 0 0 opcode B/W As register Однооперандные команды 0 0 0 1 0 0 0 0 0 B/W As register

Zilog Z380

Z380 Opcode Map (англ.) (9 сентября 1997). Дата обращения: 20 августа 2009. Архивировано 6 апреля 2012 года. Harston, J. G. Full Z380 Opcode List (англ