Trivial file transfer protocol что это

Обновлено: 04.07.2024

Простейший протокол передачи файлов (TFTP) — это очень удобный и простой протокол, применяемый для копирования файлов с одного устройства, поддерживающего протоколы TCP/IP, на другое. Но протокол TFTP принадлежит к числу наиболее важных, если речь идет об оборудовании Cisco, поскольку он служит основным методом передачи файлов конфигурации и образов IOS между маршрутизаторами и коммутаторами.

В протоколе TFTP в качестве транспортного протокола используется UDP, а это означает, что на транспортном уровне TFTP является ненадежным. Но для обеспечения надежности в протоколе TFTP применяется собственная система подтверждения. При передаче файла с помощью TFTP этот файл разбивается на блоки по 512 байтов и передается в виде блоков. Устройство получателя должно передавать подтверждение АСК после получения каждого 512-байтового блока. Применение метода передачи с помощью окон не предусматривается. Вместо этого устройство отправителя просто следит за тем, на какой блок не было получено подтверждение АСК, и не отправляет больше данные до тех пор, пока не будет получено АСК для этого блока. Такое функциональное средство приводит к созданию простого и удобного в реализации механизма исправления ошибок.

Протокол TFTP не поддерживает многие важные средства FTP, но именно поэтому он и является таким небольшим и простым протоколом. В частности, протоколом TFTP не поддерживается аутентификация пользователя (по идентификатору пользователя и паролю). Функции получения листингов каталогов и просмотра каталогов также не поддерживаются. При использовании TFTP предполагается, что программа, запрашивающая файл, имеет информацию о точном имени файла, а программа, передающая файл, имеет сведения, где находится этот файл. Если любое из этих предположений оказывается неверным, происходит ошибка и передача отменяется. В целом, протокол TFTP является простым и удобным в использовании, роэтому в данной книге он часто применяется для работы с устройствами Cisco. Протокол TFTP определен в документе RFC 1350 (стандарт 33).

четверг, апреля 04, 2013

Практика работы с TFTP

Всем доброго дня, сегодня мы с вами попробуем попрактиковаться в использование протокола TFTP . Для данной практики мы будем использовать 3 виртуальные машины, виртуально находящиеся в одной подсети. В моем случае это будут две машины, работающие под управлением Windows XP , и одна виртуальная машина с установленным на нее D ebian 6.0.7. На одну из виртуальных машин с Windows XP (виртуальная машина 1) мы установим популярный в определенных кругах Tftpd32, включающий в свой состав TFTP сервер и TFTP клиент. На второй виртуальной машине с XP мы попрактикуемся в использование штатного клиента TFTP встроенного в Windows . Ну а на машине с D ebian (виртуальная машина 3) мы познакомимся с азами TFTP в Linux . И так если вам все это интересно, то приступаем.

На первую виртуальную машину мы установим Tftpd32. Для этого скачайте его дистрибутив по ссылке, и произведите его установку. Думаю при этом у вас не должно возникнуть каких либо проблем. Далее в корне диска C создаем папку и помещаем в нее несколько файлов. В моем случае папка называется Public и в ней находятся файлы 1. bmp и 2. bmp . После этого запускаем Tftpd32 и нажав на кнопку Browse выбираем папку, файлы из которой мы будем раздавать при помощи TFTP , в моем случае это папка C :\ Public . В поле Server Interface выбираем сетевой интерфейс, на котором будет функционировать TFTP сервер, если на вашей виртуальной машине он всего один, то ничего не меняем. Про себя отмечаем что IP адрес первой виртуальной машины 192.168.1.41.


tftpd 32 сконфигурирован на раздачу файлов из папки Public по протоколу TFTP

После того как все перечисленные выше пакеты будут установлены приступим к их конфигурированию. По умолчанию TFTP сервер сконфигурирован на использование директории /srv/tftp. Возможно это и удобно, то так как мы учимся работать с TFTP мы попробуем это изменить и сделаем так чтобы TFTP сервер для своей работы использовал директорию / TFTP _ server . Для начала создадим данную директорию выполнив команды:

Далее отредактируем файл / etc / inetd . conf . Для этого выполним команду (вместо nano можно использовать любой другой текстовый редактор):

tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftp

Заменяем аргумент /srv/tftp на / TFTP _ server . В итоге у вас должно получится:

tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /TFTP_server

После чего сохраняем файл inetd.conf. Чтобы только что внесенные настройки вступили в силу необходимо перезапустить службу openbsd - inetd , для этого выполняем команду:

Теперь можно считать что данная виртуальная машина настроена для работы. И далее мы перейдем к практике.

Практика 1. Копируем файлы с TFTP сервера с помощью встроенного TFTP клиента Windows

Для начала запустим консоль на виртуальной машине 2. И попробуем скачать файл 1. bmp с TFTP сервера виртуальной машины 1 (192.168.1.41). Для этого в консоли выполним команду:

После этого на время копирования произойдет пауза, по окончание которой вы увидите результат выполнения операции.

Стоит отметить что копирование файла осуществляется в ту директорию, в которой при выполнении команды вы находились в консоле. Так в приведенном выше примере файлы были скопированы в папку пользователя с именем usero . Для того чтобы осуществить копирование файла в любую директорию можно воспользоваться следующим способом:

В данном случае вы меняете текущую директорию в консоли на C :\, а уже после этого осуществляете в нее копирование файлов с помощью TFTP.

Теперь если мы перейдем на виртуальную машину 1. И посмотрим на вкладку Log Viewer сервера tftpd 32, то мы сможем просмотреть статистику запросов поступающих от клиентов к данному TFTP серверу, в данном случае статистика содержит только два запроса на чтение файлов:


Статистика запросов поступающих на TFTP сервер виртуальной машины 1

Копирование файлов с TFTP сервера виртуальной машины 3 ( Debian ) осуществляется аналогичным образом, только потребуется выполнить команды:

Практика 2. Записываем файлы на TFTP сервер с помощью встроенного TFTP клиента Windows

Для того чтобы скопировать файлы находящиеся в папке C :\ Client (виртуальная машина 2) на TFTP сервера виртуальной машины 1 необходимо в консоли выполнить следующие команды:

Записанные файлы на виртуальной машине 1 появятся в директории C :\ Public .

Если мы попробуем выполнить копирование файлов аналогичным способом на виртуальную машину 3 с Linux, то получим ошибку Access Violation :


Ошибка Access Violation при попытки записи на tftpd

Дело в том, что tftpd установленный на виртуальную машину 3, позволяет осуществлять запись только в уже существующие файлы. Поэтому на необходимо выполнить на виртуальной машине 3 следующие команды:

Первой командой мы переходи в директорию /TFTP_server. Второй командой мы создаем в ней пустой файл с именем 1.txt. Третьей командой мы даем полные права на доступ к директории /TFTP и всем имеющимся в ней файлам.

После этого можно выполнять на виртуальной машине 2 команду:

Практика 3. Копируем файлы с TFTP сервера с помощью Tftpd32

Давайте попробуем скачать файлы хранящиеся на TFTP сервере виртуальной машины 3. Для этого на виртуальной машине 1 перейдем к окну приложения tftpd 32. Откроем вкладку TFTP Client и укажем в ней адрес TFTP сервера с которого мы хотим скачать файл, имя файла который мы хотим скачать, а так же имя файла под которым мы хотим сохранить скачанный файл на нашем компьютере.

После того как все вышеперечисленные параметры заданы, нажимаем на кнопку GET . После чего будет выполнена загрузка файла.

Практика 4. Запись файлов на TFTP сервер с помощью Tftpd32

Теперь попробуем записать файлы на TFTP сервер виртуальной машины 3 ( Debian ) используя TFTP клиент встроенный в Tftpd 32. Как мы уже выяснили ранее, для того чтобы осуществлять запись файлов на tftpd сервер виртуальной машины 3, необходимо создать пустые файлы с таким же именем на данном сервере. Поэтому сначала выполняем следующие команды на виртуальной машине 3:

После этого возвращаемся к виртуальной машине 1. Опять же открываем вкладку TFTP Client и заполняем ее следующим образом:

После чего нажимаем на кнопку PUT . После чего будет произведена запись файлов на TFTP сервер виртуальной машины 3.

Практика 5 . Копируем файлы с TFTP сервера с помощью TFTP клиента в Linux

Теперь настало время поработать с Linux . Перейдем на виртуальную машину 3 и попробуем скачать с нее файлы хранящиеся на TFTP сервере виртуальной машины 1. Для этого в консоли введем:

Команда tftp позволяет перейти к управлению клиентом tftp. С помощью команды get мы отправляем к TFTP серверу запрос на чтение файла. В качестве параметров указываются адрес tftp сервера:имя запрашиваемого файла.

После чего файл 1. bmp будет скопирован с TFTP сервера виртуальной машины 1 и помещен в директорию / TFTP _ server виртуальной машины 3.

Практика 6. Записываем файлы на TFTP сервер с помощью TFTP клиента в Linux

В заключение попробуем записать файлы на TFTP сервер виртуальной машины 1 используя клиент виртуальной машины 3 с Debian . Для этого выполним на ней следующие команды:

Пока это все примеры использования TFTP. Надеюсь они пригодятся вам в вашей профессиональной практике.

Trivial file transfer protocol что это

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

Переходи скоре.

Trivial file transfer protocol что это

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

Переходи скоре.

Trivial file transfer protocol что это






Глава 15 TFTP: простой протокол передачи данных

TFTP - это простой протокол передачи файлов. Он, как правило, используется при загрузке бездисковых систем (рабочие станции или X терминалы). В отличие от протокола передачи файлов (FTP - File Transfer Protocol), который мы опишем в главе 27 и который использует TCP, TFTP использует UDP. Это сделано для того, чтобы протокол был как можно проще и меньше. Реализации TFTP (и необходимого UDP, IP и драйвера устройства) могут поместиться в постоянной памяти (ПЗУ).

В этой главе приводится только краткое описание TFTP, потому что в следующей главе мы рассмотрим протокол Bootstrap, который использует TFTP. Мы использовали протокол TFTP, когда загружали из сети хост sun (см. рисунок 5.1). Он выдавал TFTP запрос, после того как получил свой IP адрес с использованием RARP.

RFC 1350 [ Sollins 1992] является официальной спецификацией TFTP версия 2. Глава 12 [Stevens 1990] предоставляет полные исходные коды реализации TFTP клиента и сервера и описывает некоторую технику программирования, использованную в TFTP.


Каждый пакет данных содержит номер блока (block number), который затем используется в пакете подтверждении. В качестве примера скажем, что когда необходимо осуществить чтение файла, клиент посылает запрос на чтение (RRQ), указывая имя файла и режим. Если файл может быть прочитан клиентом, сервер отвечает пакетом данных с номером блока равным 1. Клиент посылает подтверждение (ACK) на номер блока 1. Сервер отвечает следующим пакетом данных с номером блока равным 2. Клиент подтверждает номер блока 2. Это продолжается до тех пор, пока файл не будет передан. Каждый пакет данных содержит 512 байт данных, за исключением последнего пакета, который содержит от 0 до 511 байт данных. Когда клиент получает пакет данных, который содержит меньше чем 512 байт, он считает, что получил последний пакет.

В случае запроса на запись (WRQ) клиент посылает WRQ, указывая имя файла и режим. Если файл может быть записан клиентом, сервер отвечает подтверждением (ACK) с номером блока равным 0. Клиент посылает первые 512 байт файла с номером блока равным 1, сервер отвечает ACK с номером блока равным 1.

Этот тип передачи данных называется протоколом с остановкой и ожиданием подтверждения (stop-and-wait) . Он используется только в простых протоколах, таких как TFTP. Мы увидим в разделе "Изменение размера окна" главы 20, что TCP предоставляет другую форму подтверждений, которая позволяет добиться более высокой пропускной способности. TFTP разработан таким образом, чтобы реализация была как можно проще, а не для того чтобы повысить пропускную способность.

Давайте посмотрим, как работает протокол TFTP. Мы запустим TFTP клиента на хосте bsdi и получим текстовый файл с хоста svr4:


bsdi % tftp svr4 стартуем TFTP клиента
tftp> get test1.c получаем файл с сервера
Received 962 bytes in 0.3 seconds
tftp> quit разрываем соединение

bsdi % ls -l test1.c сколько байт в полученном файле?
-rw-r--r-- 1 rstevens staff 914 Mar 20 11:41 test1.c

bsdi % wc -l test1.c и сколько строк?
48 test1.c

Первый момент, который бросается в глаза, заключается в том, что файл в Unix содержит 914 байт, однако TFTP передает 962 байта. Воспользовавшись программой wc, мы увидим, что в файле 48 строк, таким образом, 48 символов новой строки в Unix были дополнены до 48 пар CR/LF, так как TFTP по умолчанию осуществляет передачу в режиме netascii.

На рисунке 15.2 показан обмен пакетами.


1 0.0 bsdi.1106 > svr4.tftp: 19 RRQ "test1.c"

2 0.287080 (0.2871) svr4.1077 > bsdi.1106: udp 516
3 0.291178 (0.0041) bsdi.1106 > svr4.1077: udp 4

4 0.299446 (0.0083) svr4.1077 > bsdi.1106: udp 454
5 0.312320 (0.0129) bsdi.1106 > svr4.1077: udp 4

Рисунок 15.2 Обмен пакетами в случае TFTP.

В строке 1 показан запрос на чтение от клиента к серверу. Порт назначения UDP для TFTP - заранее известный порт 69, tcpdump просматривает TFTP пакеты и печатает RRQ и имя файла. Длина UDP данных печатается как 19 байт и получается следующим образом: 2 байта - код операции, 7 байт - имя файла, 1 байт равный 0, 8 байт для netascii и еще 1 байт равный 0.

Следующий пакет приходит от сервера (строка 2) и содержит 516 байт: 2 байта - код операции, 2 байта - номер блока и 512 байт данных. Строка 3 - подтверждение на эти данные: 2 байта - код операции и 2 байта - номер блока.

И последний пакет данных (строка 4) содержит 450 байт данных. 512 байт данных в строке 2 и эти 450 байт составляют 962 байта данных, полученные клиентом.

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

Обратимся к рисунку 10.6. RIP сервер, которому необходимо послать клиенту более чем 512 байт, отправляет обе UDP датаграммы с заранее известного порта сервера. В случае TFTP (из-за отличий в протоколе), долговременного взаимодействия между клиентом и сервером не осуществляется (которое, как мы сказали, может занимать от секунд до минут). Если один процесс сервера будет использовать заранее известный порт все время, пока осуществляется передача файла, возникнет необходимость отказать всем последующим запросам, которые придут от других клиентов, или один процесс сервера должен иметь возможность осуществлять множественную передачу файлов нескольким клиентам в одно и то же время с одного и того же порта (69). Простейшее решение заключается в том, что сервер переходит на другой порт, после того как получил RRQ или WRQ. Клиент определяет новый порт, когда он получает первый пакет данных (строка 2 на рисунке 15.2), а затем посылать все последующие подтверждения (строки 3 и 5) на новый порт.

В разделе "Пример" главы 16 мы увидим, как TFTP используется при загрузке X терминалов.

Обратите внимание на то, что TFTP пакеты (рисунок 15.1) не содержат никаких данных об имени пользователя или пароле. Это брешь в секретности характерная для TFTP. Так как TFTP был разработан для использования в процессе загрузки, он не предоставляет возможности передать имя пользователя и пароль.

Эта характеристика TFTP была использована многими хакерами, чтобы получить копии файла паролей из Unix и затем расшифровать пароли. Чтобы предотвратить подобный доступ, большинство TFTP серверов в настоящее время регламентируют, какие файлы могут быть получены с использованием TFTP (как правило, файлы из директории /tftpboot в Unix системах). Эта директория содержит только загрузочные файлы, необходимые бездисковым системам.

Для дополнительной безопасности TFTP сервер, на Unix системе, обычно устанавливает свой пользовательский идентификатор (UID) и идентификатор группы (GID) в значения, которые не могут быть назначены реальному пользователю. Это позволяет доступ только к файлам, которые доступны для чтения и записи всем.

Чтобы позволить нескольким клиентам загружаться одновременно, TFTP сервер предоставляет несколько форм одновременной работы. Так как UDP не предоставляет уникального соединения между клиентом и сервером (как это делает TCP), TFTP сервер создает новый UDP порт для каждого клиента. Это позволяет разным клиентам выдавать датаграммы, которые будут демультиплексированы UDP модулем сервера, на основе номеров портов назначения, вместо того чтобы это делал сам сервер.

Протокол TFTP не предоставляет средства безопасности. Большинство реализаций позволяет доступ по протоколу TFTP только к файлам, которые необходимы при загрузке.

В главе 27 мы рассмотрим протокол передачи файлов (FTP - File Transfer Protocol), который разработан для общих целей, а также обеспечивает высокую пропускную способность при передаче файлов.

пятница, апреля 19, 2013

TFTP сервер на маршрутизаторе фирмы Cisco

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

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

Разбирать конфигурирование маршрутизаторов фирмы Cisco в качестве TFTP сервера, мы опять же будем на примере, но в этот раз для симуляции сети мы будем использовать GNS 3. Соберем в нем следующую простенькую схему, содержащую 3 маршрутизатора, имеющих как минимум по 2 Ethernet интерфейса (в данном примере использован IOS от Cisco 2691 - c 2691- advipservicesk 9- mz .124-15. T 6. bin ):

Читайте также: