- Tftp
-
TFTP Название: Trivial File Transfer Protocol
Уровень (по модели OSI): Прикладной
Семейство: IP
Создан в: ~ 1980 г.
Порт/ID: 69/UDP
Назначение протокола: Передача файлов
Спецификация: Основные реализации (клиенты): RIS Windows, tftp.exe
Основные реализации (серверы): WinAgents TFTP Server, RIS Windows, tftpd
Расширяемость: Опции (RFC 2347)
Основные расширения: TFTP (англ. Trivial File Transfer Protocol — простой протокол передачи файлов) используется главным образом для первоначальной загрузки бездисковых рабочих станций. TFTP, в отличие от аутентификации (хотя возможна фильтрация по IP-адресу) и основан на транспортном протоколе
Содержание
Применение
Основное назначение TFTP — обеспечение простоты реализации клиента. В связи с этим он используется для загрузки бездисковых рабочих станций, загрузки обновлений и конфигураций в «умные» сетевые устройства, записи статистики с мини-АТС (CDR) и аппаратных маршрутизаторов/файрволов.
Безопасность
Поскольку протокол не поддерживает аутентификации, единственный метод идентификации клиента — это его сетевой адрес (который может быть подделан). Обычно в Unix-системах tftpd доступен только каталог /tftpboot. Однако в старых TFTP-серверах было возможным получить файл паролей командой GET ../etc/passwd.
Демон tftpd (одна из реализаций tftp-сервера) отказывается обрабатывать файлы, содержащие в своём имени комбинацию «/../» или начинающуюся с «../». Запись разрешается только в файлы, которые уже существуют (любого размера, например нулевого), и доступны для публичной записи (права доступа: -rw-rw-rw-). [1]
Дополнительная защита от доступа к произвольным файлам осуществляется с помощью на каталог tftpd (обычно /usr/TFTPRoot).
Типы пакета
Сначала в TFTP-пакете идет поле размером в 2 байта, определяющее тип пакета:
- Read Request (RRQ, #1) — запрос на чтение файла.
- Write Request (WRQ, #2) — запрос на запись файла.
- Data (DATA, #3) — данные, передаваемые через TFTP.
- Acknowledgment (ACK, #4) — подтверждение пакета.
- Error (ERR, #5) — ошибка.
- Options Acknowledgment (OACK, #6) — подтверждение опций.
Запросы на чтение и запись
Для начала передачи данных клиент должен послать серверу WRQ или RRQ-пакет. У обоих пакетов формат одинаковый:
0x01/0x02 (тип пакета) Имя файла 0x00 (конец строки) Режим передачи 0x00 (конец строки) Опции… (если есть) 2 байта строка в строка в 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, то максимальный размер передаваемого файла увеличивается до 4Gb.
Опции TFTP
В RFC 2347 был предусмотрен формат опций, которые можно присоединять к окончанию RRQ-пакета и WRQ-пакета:
Код опции 0x00 (конец строки) Значение опции 0x00 (конец строки) строка в байт строка в ASCII 1 байт Опций может быть несколько. Тогда они будут следовать друг за другом. Порядок опций не важен.
В ответ на RRQ (или WRQ) с опциями, сервер должен прислать OACK с списком опций, которые сервер принял. Наиболее распространённые опции:
Название Определена в Код опции Размер блока RFC 2348 blksize В качестве значения опции идёт число, принимающее значение от 8 до 65464, обозначающее размер блока. Интервал повторной передачи (Timeout) RFC 2349 timeout В качестве значения опции идёт число, принимающее значение от 1 до 255, обозначающее время ожидания перед повторной передачей блока в секундах. Размер файла RFC 2349 tsize В качестве значения опции идёт число, обозначающее размер передаваемого файла в байтах. Ошибки
В TFTP информация об ошибке имеет следующий формат:
0x05 (тип пакета) Код ошибки Описание ошибки 0x00 (конец строки) 2 байта 2 байта строка в Код ошибки может принимать одно из значений, перечисленных в 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
Стандарты
Опции
Библиография
- У. Ричард Стивенс. «Протоколы TCP/IP. Практическое руководство». Глава 15, «Простейший протокол передачи файлов TFTP». ISBN 5-7940-0093-7
- Х. Остерлох. «TCP/IP. Семейство протоколов передачи данных в сетях компьютеров». Глава 16 «Простейший протокол передачи файлов (TFTP)». ISBN 5-93772-039-3
Источники
- ↑ страницы документации man tftpd из состава FreeBSD 4.9
Ссылки
- WinAgents TFTP Server(англ.) Сервер TFTP для Windows с поддержкой разграничения прав доступа
- TFTP Server TFTPDWIN(англ.) Сервер TFTP для Windows
-
- (англ.)
– страница помощи man в- Innerdive TFTP Server Сервер TFTP для Windows. Рассчитан на высокие нагрузки.
Wikimedia Foundation. 2010.