H-II Transfer Vehicle
- 1 year ago
- 0
- 0
TFTP ( англ. Trivial File Transfer Protocol — простой протокол передачи файлов ) используется главным образом для первоначальной загрузки бездисковых рабочих станций . TFTP, в отличие от FTP , не содержит возможностей аутентификации (хотя возможна фильтрация по IP-адресу) и основан на транспортном протоколе UDP .
Основное назначение TFTP — обеспечение простоты реализации клиента. В связи с этим он используется для загрузки бездисковых рабочих станций, загрузки обновлений и конфигураций в «умные» сетевые устройства, записи статистики с мини-АТС ( CDR ) и аппаратных маршрутизаторов / файрволов .
Используется для программирования методом IAP встраиваемых систем разработанных на основе микроконтроллеров.
Поскольку протокол не поддерживает аутентификации, единственный метод идентификации клиента — это его сетевой адрес (который может быть подделан). Обычно в Unix-системах tftpd доступен только каталог /tftpboot. Однако в старых TFTP-серверах было возможным получить файл паролей командой RRQ ../etc/passwd.
Демон tftpd (одна из реализаций tftp-сервера) отказывается обрабатывать файлы, содержащие в своём имени комбинацию «/../» или начинающуюся с «../». Запись разрешается только в файлы, которые уже существуют (любого размера, например нулевого), и доступны для публичной записи (права доступа: -rw-rw-rw-) .
Дополнительная защита от доступа к произвольным файлам осуществляется с помощью смены корневого каталога на каталог tftpd (обычно /usr/TFTPRoot).
Сначала в TFTP-пакете идет поле размером в 2 байта , определяющее тип пакета:
Для начала передачи данных клиент должен послать серверу WRQ или RRQ-пакет. У обоих пакетов формат одинаковый:
0x01/0x02 (тип пакета) | Имя файла | 0x00 (конец строки) | Режим передачи | 0x00 (конец строки) | Опции… (если есть) |
---|---|---|---|---|---|
2 байта | строка в ASCII | 1 байт | строка в ASCII | 1 байт | См. «Опции» |
В TFTP существует 2 режима передачи (режим Mail, определенный в , признан устаревшим):
После получения RRQ-пакета сервером, он сразу начинает передачу данных. В случае с WRQ-запросом — сервер должен прислать ACK-пакет c номером пакета 0.
После получения запроса RRQ сервер сразу посылает в качестве подтверждения пакет с данными и с ID пакета, равным единице. В WRQ в качестве подтверждения используется ACK с ID, равным нулю. Всего по TFTP можно передать 32 МБ (65536 * 512 / 1024²), однако, из-за использования знакового int вместо беззнакового, размер подтверждения ограничен 16 мегабайтами. Однако если клиент и сервер поддерживают расширения протокола и , то максимальный размер передаваемого файла увеличивается до 4 ГБ.
В был предусмотрен формат опций, которые можно присоединять к окончанию RRQ-пакета и WRQ-пакета:
Код опции | 0x00 (конец строки) | Значение опции | 0x00 (конец строки) |
---|---|---|---|
строка в ASCII | 1 байт | строка в ASCII | 1 байт |
Опций может быть несколько. Тогда они будут следовать друг за другом. Порядок опций не важен.
В ответ на RRQ (или WRQ) с опциями, сервер должен прислать OACK со списком опций, которые сервер принял. Наиболее распространённые опции:
Название | Определена в | Код опции | |
---|---|---|---|
Размер блока | blksize | В качестве значения опции идёт число, принимающее значение от 8 до 65464, обозначающее размер блока. | |
Интервал повторной передачи (Timeout) | timeout | В качестве значения опции идёт число, принимающее значение от 1 до 255, обозначающее время ожидания перед повторной передачей блока в секундах. | |
Размер файла | tsize | В качестве значения опции идёт число, обозначающее размер передаваемого файла в байтах. |
В TFTP информация об ошибке имеет следующий формат:
0x05 (тип пакета) | Код ошибки | Описание ошибки | 0x00 (конец строки) |
---|---|---|---|
2 байта | 2 байта | строка в ASCII | 1 байт |
Код ошибки может принимать одно из значений, перечисленных в STD 33 (за исключением кода 8 — он описан в ). Вот они:
Код ошибки | Описание |
---|---|
0 | Нет определенного кода, см. текст ошибки |
1 | Файл не найден |
2 | Доступ запрещен |
3 | Невозможно выделить место на диске |
4 | Некорректная TFTP-операция |
5 | Неправильный Transfer ID |
6 | Файл уже существует |
7 | Пользователь не существует |
8 | Неправильная опция |
В определен формат URI для TFTP. Он имеет следующий вид:
tftp://[узел назначения]/[нужный файл];mode=[режим передачи]
Например:
tftp://example.com/todo.txt;mode=netascii