TFTP
| Название: |
Trivial File Transfer Protocol |
|---|---|
| Уровень (по модели OSI): |
Прикладной |
| Семейство: | |
| Создан в: |
~ 1980 г. |
| Порт/ID: |
69/UDP |
| Назначение протокола: |
Передача файлов |
| Спецификация: | |
| Основные реализации (клиенты): |
RIS Windows, tftp.exe |
| Основные реализации (серверы): |
WinAgents TFTP Server, RIS Windows, tftpd |
| Расширяемость: |
Опции (RFC 2347) |
| Основные расширения: |
TFTP (англ. Trivial File Transfer Protocol — простой протокол передачи файлов) используется главным образом для первоначальной загрузки бездисковых рабочих станций. TFTP, в отличие от FTP, не содержит возможностей аутентификации (хотя возможна фильтрация по IP-адресу) и основан на транспортном протоколе UDP.
Содержание |
Применение [править]
Основное назначение TFTP — обеспечение простоты реализации клиента. В связи с этим он используется для загрузки бездисковых рабочих станций, загрузки обновлений и конфигураций в «умные» сетевые устройства, записи статистики с мини -АТС (CDR) и аппаратных маршрутизаторов/файрволов.
Безопасность [править]
Поскольку протокол не поддерживает аутентификации, единственный метод идентификации клиента — это его сетевой адрес (который может быть подделан). Обычно в Unix-системах tftpd доступен только каталог /tftpboot. Однако в старых TFTP-серверах было возможным получить файл паролей командой RRQ ../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) — ошибка.
- Error2 (ERR2, #6) — ошибка2.
Запросы на чтение и запись [править]
Для начала передачи данных клиент должен послать серверу 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, то максимальный размер передаваемого файла увеличивается до 4Gb.
Опции 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
Стандарты [править]
Опции [править]
Библиография [править]
- У. Ричард Стивенс. «Протоколы 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 с поддержкой разграничения прав доступа
- Tftpd32 Сервер TFTP с открытым исходным кодом для Windows
tftpd(8)— страница справки man системного администратора FreeBSD (англ.) (англ.)- Innerdive TFTP Server Сервер TFTP для Windows. Рассчитан на высокие нагрузки.
- Установка и настройка tftp-сервера на ОС CentOS 6
| Основные протоколы TCP/IP по уровням модели OSI (Список портов TCP и UDP) | |
|---|---|
| Физический | |
| Канальный |
Ethernet • PPPoE • PPP • L2F • 802.11 Wi-Fi • 802.16 WiMax • Token ring • ARCNET • FDDI • HDLC • SLIP • ATM • CAN • DTM • X.25 • Frame relay • SMDS • STP • ERPS |
| Сетевой | |
| Транспортный | |
| Сеансовый | |
| Представления | |
| Прикладной | |
| Другие прикладные |
OSCAR • CDDB • Multicast FTP • Multisource FTP • BitTorrent • Gnutella • Skype |

