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

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

TFTP наряду с HTTP используется для программирования микроконтроллеров методом () через интерфейс .

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

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

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

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

Типы пакета В протоколе TFTP предусмотрены 4 вида пакетов, кодируемые пятью кодами операции (). Для кода операции зарезервированы два первых байта в пакете: — пакет запроса чтения (; 1) или записи (; 2); — пакет с данными ( 3); — пакет подтверждения (; 4); — пакет с сообщением об ошибке ( 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

Стандарты RFC 1350 (STD33) — спецификация TFTP RFC 2347 — опции TFTP RFC 3617 — схема URI

Опции RFC 2348 — размер блока RFC 2349 — тайм-аут

См. также Tftpd32 Примечания

Литература

Ссылки Сервер TFTP для Windows с поддержкой разграничения прав доступа

Категория:Протоколы прикладного уровня Категория:Файлообменные протоколы