Меню
Главная
Случайная статья
Настройки
|
TFTP (англ. Trivial File Transfer Protocol — простой протокол передачи файлов) используется главным образом для первоначальной загрузки бездисковых рабочих станций. TFTP, в отличие от FTP, не содержит возможностей аутентификации (хотя возможна фильтрация по IP-адресу) и основан на транспортном протоколе UDP.
Содержание
Применение
Основное назначение TFTP — обеспечение простоты реализации клиента. В связи с этим он используется для загрузки бездисковых рабочих станций, загрузки обновлений и конфигураций в «умные» сетевые устройства, записи статистики с мини-АТС (CDR) и аппаратных маршрутизаторов/файрволов.[источник не указан 428 дней]
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
Стандарты
Опции
См. также
Примечания
- AN3226, 2010, Introduction, p. 1.
- страницы документации man tftpd из состава FreeBSD 4.9
- 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 :
Ссылки
|
|