среда, марта 27, 2013

Что за протокол такой TFTP?

Снова здравствуйте дорогие друзья! За окном не по весеннему холодная погода, пробивается снежок, но я думаю это не помешает нам сегодня, вместе с вами познакомиться с одним очень интересным протоколом прикладного уровня – протоколом TFTP.

Протокол TFTP (Trivial File Transfer Protocol, простой протокол передачи файлов) как бы это по кепски не звучало, предназначен для передачи файлов =) В обычный жизни рядового пользователя он встречается довольно редко, так как в основном применяется для решения задач связанных с обслуживанием и эксплуатацией сетевого оборудования, а именно:
  • загрузки бездисковых рабочих станций;
  • обновления и резервного копирования конфигурационных файлов и образов ОС (прошивок) на самые различные сетевые устройства.

Конечно, никто не мешает вам с помощью данного протокола скачивать различные файлы с компьютера своего друга, но это в наше время уже попахивает извращениями.

Формат сообщений протокола TFTP довольно прост и имеет следующий вид:
Формат сообщений протокола TFTP
Поле тип определяет назначение сообщения (запрос на чтение, запись, передача данных, подтверждение или же ошибки) и может содержать следующие значения:
  • RRQ  (Read Request) - запрос на чтение файла. Данное значение появляется в сообщение TFTP, в том случае если мы собираемся скачать с TFTP сервера некоторый файл;
  • WRQ (Write Request) - запрос на запись файла. Данное значение появляется в сообщение TFTP, в том случае если мы собираемся записать на TFTP сервер некоторый файл;
  • DATA - данные, передаваемые через TFTP. Данное значение появляется в сообщение TFTP, в том случае если это сообщение содержит непосредственно данные передаваемые от клиента к серверу или же наоборот.
  • ACK (Acknowledgment) - подтверждение блока данных. Данное значение появляется в сообщение TFTP, в том случае если предыдущий передаваемый блок данных был успешно принят получателем (или же если сервер может осуществить запись файла).
  • ERR (Error) — ошибка. Данное значение появляется в сообщение TFTP, в том случае если на предыдущем шаге работы протокола произошла ошибка, например отсутствовал запрашиваемый файл, или же отсутствовало разрешение на его чтение.

Поле имя файла содержит в себе строку, которая как ни странно соответствует имени файла, который клиент хочет записать/скачать на/c сервер(а).

Поля конец строки, служат для разделения полей несущих информацию между собой.

Поле режим передачи отвечает, опять же как ни странно, за режим передачи, и может содержать в себе одно из двух значений, представленных в виде ASCII строки:
  • netascii – указывает на то, что файл перед началом передачи должен быть перекодирован в ASCII (используется по умолчанию);
  • octet – указывает на то, что файл должен передаваться без изменений.
Поле опции отвечает за введение дополнительных настроек в процесс передачи,  и имеет свой отдельный формат. Подробнее с форматом поля опций и его назначением можно ознакомиться по данной ссылке.

Поля номер блока служат для нумерации передаваемых блоков информации.

Поле данные содержит блоки передаваемой информации размером от 0 до 512 байт. Если размер передаваемого файла превышает 512 байт, то все блоки, на которые разбивается файл, кроме последнего имеют фиксированный размер равный 512 байтам, последний передаваемый блок данных может иметь размер от 0 до 511 байт.




После того как мы ознакомились с форматом сообщений протокола TFTP, посмотрим как эти сообщения применяются при записи или чтение файла с сервера. Для начала рассмотрим процесс чтения файла с сервера.
Чтение файла с сервера используя протокол TFTP
В начальный момент времени сервер TFTP ожидает запросов от своих клиентов. Если одному из клиентов необходимо обратиться к файлам, находящимся на TFTP сервере, то он отправляют запрос RRQ к TFTP серверу. Если данный файл имеется на сервере и к нему можно получить доступ, то начинается процесс передачи и сервер отправляет клиенту первый блок, содержащий 512 байт данных (Если же запрошенный файл не доступен, то сервер генерирует сообщение об ошибки, передает его клиенту. На этом процесс передачи прекращается). Клиент получив блок данный с номером 1 генерирует подтверждение получение ACK данного блока, и так же дает ему номер 1. Получив данное подтверждение сервер начинает передачу следующего блока данных. (В случае, если подтверждение о получение блока данных не было получено до истечения таймаута, сервер осуществляет повторную передачу потерянного блока.) Данный процесс передачи происходит до тех пор пока все блоки данных, на которые был разбит файл, не будут переданы.

Теперь рассмотри процесс записи файла на TFTP сервер, он схож с процессом чтения, но имеет свои отличия.
Запись файла на TFTP сервер
В начальный момент времени сервер TFTP ожидает запросов от своих клиентов. Если одному из клиентов необходимо записать файл на TFTP сервер, то он отправляют запрос WRQ к TFTP серверу. Если сервер может осуществить запись данного файла, то он генерирует сообщение ACK с номером блока равным 0, и отправляет его запросившему клиенту, это сообщение означает согласие сервера на запись (Если сервер не может осуществить запись данного файла, то генерируется сообщение об ошибке, которое отправляется клиенту.  На этом процесс записи завершается.). Клиент получив сообщение ACK с номером блока равным 0, начинает передачу первых 512 байт файла на сервер, пересылая их в сообщение DATA с номером блока 1. Если сервер получает данный блок, то он генерирует сообщение ACK с номером блока 1. Так происходит до тех пор пока сервер не получает блок данных размером менее 512 байт. В таком случае он подтверждает получение последнего блока данных и запись на этом завершается.

Независимо от того, какой тип сообщения TFTP отправляется (WRQ, RRQ, ACK и т.д.) при пересылки от клиента к серверу (или в обратном направление), данные сообщения упаковываются в UDP датаграммы с портом назначения 69 (порт клиента выбирается динамически), которые инкапсулируются в IP пакеты. Как уже выше было сказано при работе протокола TFTP используется не гарантирующий доставку протокол транспортного уровня UDP, но это не вызывает проблем в работе протокола TFTP, так как подтверждение доставки сообщений осуществляется средствами прикладного уровня (самого протокола TFTP).

В заключение хотелось бы обратить ваше внимание на то, что протокол TFTP не содержит встроенных средств безопасности, например таких как проверка логина или пароля. Поэтому при его использование нужно быть особенно аккуратным.

Спасибо за внимание до новых встреч.

5 коммент.:

Спасибо. Очень интересная информация!

Спасибо Вам! За то что читаете)

Этот комментарий был удален автором.

Спасибо огромное за статьи!
Всех благ!

Отличное описание!

Отправить комментарий