Основные протоколы интернет

Протоколы передачи файлов (FTP и TFTP)

Разбить на страницы
Показывать лекцию целиком

Протокол FTP

Протокол передачи файлов (File Transfer Protocol – FTP) – это стандартный механизм для копирования файла от одного хоста другим [19]. Передача файлов от одного компьютера к другому – это одна из большого числа общих задач, выполнение которой ожидается от организованной сети и взаимодействия между сетями.

Хотя передача файлов от одной системы к другой кажется простой и прямолинейной задачей, вначале должны быть решены некоторые проблемы. Например, две системы могут использовать различные соглашения об именах файлов. Две системы могут иметь различные пути для представления текстов и данных. Две системы могут иметь различные структуры директорий. Все эти проблемы решает FTP очень простым и элегантным методом.

FTP отличается от других приложений типа клиент-сервер тем, что он устанавливает два соединения между хостами. Одно соединение применяется для передачи данных, другое — для управления информацией (команды и отклики). Разделение команд и передачи управляющих данных делает FTP более эффективным. Управление соединением использует очень простые правила для связи. Нам нужна для передачи только линия команд или линия откликов. С другой стороны, соединение для данных нуждается в более сложных правилах из-за разнообразия типов данных.

FTP использует два заданных порта: порт 21 для управления и порт 20 для передачи данных.

Рисунок 13.1 показывает базовую модель FTP. Клиент имеет три компоненты: пользовательский интерфейс, процесс управления клиентом и процесс передачи клиентских данных. Соединение для передачи сигналов управления происходит между процессами управления. Соединение для передачи данных делается для процессов обмена данными.

(рис 13.1) FTP

Соединение передачи сигналов управления остается открытым в течение всей интерактивной сессии FTP. Соединение передачи данных каждый раз открывается командой, чтобы вызвать передаваемый файл, и затем закрывается, когда файл передан. Другими словами, когда пользователь начинает FTP-сессию, соединение для передачи сигналов управления открывается. Пока оно открывается, соединение для передачи данных может быть открыто и закрыто много раз, если передается несколько файлов.

Соединения

Два FTP-соединения – для передачи команд управления и передачи данных — используют различные стратегии и различные номера портов.

Соединение для передачи команд управления

Соединение для передачи команд управления создается тем же самым методом, что и другие соединения, рассмотренные далее. Имеется два шага:

  • сервер пассивно открывается, подключается к заданному порту и ждет клиента;
  • клиент использует временный порт, и сессия активно открывается.
  • Соединение для передачи команд управления остается открытым в течение всего процесса. Тип услуги, используемый в соответствии с IP-протоколом, – это минимизация задержки, потому что это диалоговая связь между пользователем (человеком) и сервером. Пользователи различного типа посылают команды и ожидают получение откликов без существенной задержки. Рис. 13.2 показывает начальное соединение между сервером и клиентом. Конечно, после начального соединения процесс сервера порождает "дочерние" процессы и назначает свободное обслуживание клиента "дочерним" процессом, использующим кратковременный порт.

    (рис 13.2) Открытие управляющего соединения

    Соединение для передачи данных

    Соединение для передачи данных использует заданный порт 20. Однако создание соединения для передачи данных отличается от предыдущего. FTP создает соединение для передачи данных следующим образом:

  • Клиент (не сервер) вызывает пассивное открытие кратковременного порта. Это может быть сделано клиентом, потому что клиент вызывает команды для передачи файлов.
  • Клиент посылает номер этого порта серверу, используя команду PORT (ниже эта команда будет рассмотрена).
  • Сервер получает номер порта, вызывает активное открытие заданного порта 20 и получает номер временного порта.
  • Шаги для создания начального соединения для передачи данных показаны на рис. 13.3. Позднее мы увидим, что эти шаги меняются, если используется команда PASV.

    (рис 13.3) Создание соединения для передачи данных

    Установление соединения

    Процессы FTP клиента и сервера, которые выполняются на различных компьютерах, могут устанавливать соединение друг с другом. Эти два компьютера могут использовать различные операционные системы, различные наборы символов, различные структуры и различные форматы файлов. FTP должен сделать совместимой всю эту неоднородность.

    FTP обладает двумя различными подходами для управления соединением: одним для соединения для передачи команд управления и одним для передачи данных. Рассмотрим отдельно каждый метод.

    Связь по каналу (соединению) для передачи команд управления

    FTP применяет те же самые методы, что TELNET или SMTP, для коммутации по установлению соединения для команд управления. Он использует набор символов NVT ASCII ( Рисунок 13.4). Связь устанавливается с помощью команд и откликов. Посылается одна команда (отклик) в один момент времени. Каждая команда или отклик – это только короткая строка, так что мы можем не беспокоиться о формате файла или структуре файла. Каждая строка заканчивается двумя символами, обозначающими конец строки (возврат каретки и перевод строки).

    (рис 13.4) Использование соединения управления

    Связь по каналу (соединению) передачи данных

    Цель и реализация соединения для передачи данных отличается от соединения для сигналов управления. Мы хотим передать файлы по каналу для передачи данных. Клиент должен различать тип файла, который должен быть передан, структуру данных и режим передачи. Перед тем как передавать по каналу для передачи данных, мы подготавливаем передачу по каналу для сигналов управления. Проблема разнородности решается с помощью определения трех атрибутов: тип, структура данных и режим передачи ( рисунок 13.5).

    (рис 13.5) Использование соединения для передачи данных

    Тип файла

    FTP может передавать через соединение для передачи данных следующие типы файлов:

  • ASCII-файл. Это формат, используемый по умолчанию для трансляции текстовых файлов. Каждый символ закодирован с использованием NVT ASCII-символов. Передатчик преобразует файл из собственного представления в NVT ASCII, и приемник преобразует символы NVT ASCII в собственное представление.
  • EBCDIC-файл. Если оба конца соединения используют кодирование EBCDIC, файл может быть передан с использованием EBCDIC-кодирования.
  • Image-файл. Этот файл по умолчанию — формат для передачи двоичных файлов. Файл посылается как непрерывный поток бит без всякой интерпретации и кодирования. Он в большинстве случаев используется для передачи двоичных файлов, таких как компилированная программа.
  • Если файл закодирован в ASCII или EBCDIC, другие атрибуты должны дополняться, чтобы определить возможность печати файла:

  • Запрещенный для печати. Это формат по умолчанию для передачи текстовых файлов. Файл не содержит "вертикальных" спецификаций для печати. Это означает, что файл не может быть напечатан без предварительной обработки, потому что он не содержит символов, интерпретируемых для вертикального передвижения печатающей головки. Этот формат используется для файлов, которые будут накоплены и обработаны позднее.
  • TELNET. В этом формате файл содержит NVT ASCII вертикальные символы, такие, как CR (перевод каретки), LN (перевод строки), NL (новая строка) и VT (вертикальное табулирование). Эти файлы могут быть напечатаны после передачи
  • Структура данных

    FTP может передавать файл по соединению для передачи данных, используя одну из следующих интерпретаций структуры данных:

  • Файловая структура (по умолчанию). Этот файл не имеет структуры. Это непрерывный поток данных.
  • Структура записи. Этот файл, разделенный внутри записи Он может быть использован только с текстовым файлом.
  • Страничная структура. Это файл, разделенный на страницы, каждая страница имеет номер и заголовок страницы. Страницы могут быть накоплены или достигнуты с помощью произвольного или последовательного доступа.
  • Режимы передачи

    FTP может передавать файл по соединению для передачи данных, используя один из трех следующих режимов передачи:

  • Поточный режим. Это режим по умолчанию. Данные доставляются от FTP к TCP как непрерывный поток данных. TCP отвечает за разбиение данных на сегменты соответствующего размера. Если данные — просто поток байтов (файловая структура), то не нужно никакого признака окончания файла. Окончание файла в этом случае — это разъединение соединения данных отправителем. Если данные разделены на записи (структура по записи), каждая запись будет иметь однобайтный символ окончания записи (EOR — end of record).
  • Блочный режим. Данные могут быть доставлены от FTP и TCP в блоках. В этом случае блоку предшествует трехбайтный заголовок. Первый байт называется дескриптор блока, следующие два байта определяют размер блока в байтах.
  • Сжатый режим. Если файл большой, данные могут быть сжаты. Метод сжатия использует нормальное кодирование длины. В этом методе последовательное повторное появление блока данных заменяется одним вхождением и числом повторений. В тексте файла это обычно пробел (пустоты). В двоичном файле нулевые символы обычно сжимаются.
  • Команды обработки

    FTP использует соединение управления для того, чтобы установить связь между процессом управления клиента. В течение этой связи команды посылаются от клиента к серверу, и отклики посылаются от сервера к клиенту ( рисунок 13.6).

    (рис 13.6) Команды обработки

    Команды

    Команды, которые посылаются от FTP-процесса управления клиента в форме заглавных букв ASCII, могут сопровождаться или не сопровождаться аргументом. Мы можем грубо разделить команды на шесть групп: команды доступа, команды управления файлами, команды форматирования данных, команды определения порта, команды передачи файла и прочие команды.

  • Команды доступа. Эти команды позволяют пользователю обращаться к удаленной системе. Табл. 13.1 перечисляет общие команды в этой группе.
    Команды доступа
    Команды Аргументы Описание
    USER ID пользователя Пользовательская информация
    PASS Пароль пользователя Пароль
    ACCT Загруженная учетная запись Учетная информация
    REIN Перезапуск
    QUIT Выход из системы
    ABOR Прерывание предыдущей команды
  • Команды управления файлом. Эти команды дают пользователю возможность обращаться к удаленному компьютеру, передвигаться по структуре директории, создавать новые директории, удалять файлы и так далее. В Табл. 13.2 даны общие команды этой группы.
    Команды управления файлом
    Команды Аргументы Описание
    CWD Имя директории Изменение другой директории
    CDUP Изменение вышестоящей директории
    DELE Имя файла Удаление файла
    LIST Имя директории Список поддиректорий и файлов
    NLIST Имя директории Список имен поддиректорий или файлов, не имеющих атрибутов
    MKD Имя директории Создать новую директорию
    PWD Имя текущей директории на дисплее
    RMD Имя директории Удалить директорию
    RNER Имя файла (старое имя) Идентификатор файла, который будет переименован
    RNTO Имя файла (новое имя файла) Переименование файла
    SMNT Системное имя файла Вершина системы
  • Команды форматирования данных. Эти команды дают пользователю возможность определить данные о структуре, типе файла и режиме передачи. Определенный формат затем используется командами передачи файлов. Табл. 13.3 показывает общие команды этой группы.
    Команды форматирования данных
    Команды Аргументы Описание
    TYPE A (ASCII), E (EBCDIC), I (IMAGE), N (Nonprint), T(Telnet) Определяет тип файла, если необходим формат для печати
    STRU F (File), R (Record), P (Page) Определяет организацию данных
    MODE S (Stream), B (Block), C (Compressed) Определяет режим передачи
  • Команды определения порта. Эти команды определяют номер порта для соединения передачи данных на стороне клиента. Имеется два метода, чтобы сделать это. Первый метод применяет команду PORT, чтобы клиент мог выбрать кратковременный номер порта и послать серверу для использования при пассивном открытии. Сервер задействует номер порта и порождает активное открытие этого порта. Во втором методе используется команда PASV, клиент сначала запрашивает сервер о выборе номера порта. Сервер производит пассивное открытие этого порта и посылает в отклике номер порта (см. отклик, пронумерованный 227 в таблице 13.7). Клиент делает активное открытие, используя номер порта. Таблица 13.4 показывает команды определения порта.
    Команды определения порта
    Команды Аргументы Описание
    PORT 6-цифровой идентификатор Клиент выбирает порт
    PASV Сервер выбирает порт
  • Команды передачи файла. Эти команды позволяют передачу файлов. В таблице 13.5 перечислены общие команды этой группы.
    Команды передачи файла
    Команды Аргументы Описание
    RETR Имя файла (ов) Извлечение файла: файл(ы) передан(ы) от сервера к клиенту
    STOR Имя файла (ов) Накопление файла: файл(ы) передан(ы) от клиента к серверу
    APPE Имя файла (ов) Совпадает с STOR за исключением того, что если файл существует, то данные могут быть прикреплены к нему
    STOU Имя файла (ов) То же самое, что STORE, за исключением того, что имя файла будет уникальным в этой директории; однако существующий файл не должен быть переписан
    AALLO Имя файла (ов) Распределение места для накопления файлов в сервере
    REST Имя файла (ов) Установка отметки в определенной точке данных
    STAT Имя файла (ов) Возврат состояния файла
  • Различные команды. Эти команды доставляют информацию к пользователю FTP на стороне клиента. Табл. 13.6 показывает общие команды этой группы.
    Прочие команды
    Команды Аргументы Описание
    HELP Запрос информации
    NOOP Проверка, является ли сервер действующим
    SITE Команды Определение сайта заданных команд
    SYST Запрос об операционной системе, используемой сервером
  • Отклики

    Каждая FTP-команда вызывает по крайней мере один отклик. Отклик имеет две части: номер из трех цифр, следующий за текстом. Числовая часть определяет код; текстовая часть определяет необходимые параметры или дополнительные пояснения. В дальнейшем представим три цифры как xyz.

    Первая цифра

    Первая цифра определяет состояние команды. В этой позиции может быть использована одна из пяти цифр:

  • 1yz (положительный предварительный ответ). Действие началось. Сервер будет посылать другие отклики перед принятием другой команды.
  • 2yz (положительный отклик завершения). Действие завершено. Сервер будет принимать другую команду.
  • 3yz (положительный промежуточный отклик). Команда принята, но нужна дальнейшая информация.
  • 4yz (отклик отрицательного переходного завершения). Действие не произошло, но ошибка временная. Та же самая команда будет послана позднее.
  • 5yz (отклик отрицательного постоянного завершения). Команда не принята и должна быть повторена позже.
  • Вторая цифра

    Вторая цифра также определяет состояние команды. В этой позиции может быть использована одна из шести цифр:

  • x0z (синтаксис);
  • x1z (информация);
  • x2z (подключение);
  • x3z (идентификация и учет);
  • x4z (не определено);
  • x5z (система файлов).
  • Третья цифра

    Третья цифра обеспечивает дополнительную информацию. Таблица 13.7 показывает краткий перечень возможных откликов.

    Отклики
    Коды Описание
    Положительный предварительный ответ
    120 Сервис будет вскоре готов
    125 Соединение данных открыто: передача данных вскоре начнется
    150 Состояние файла хорошее (OK). Соединение будет вскоре открыто
    Положительный отклик завершения
    200 Команда в порядке (OK)
    211 Состояние системы или справочный отклик
    212 Состояние директории
    213 Состояние файла
    214 Справочное сообщение
    215 Обозначение типа системы (операционной системы)
    220 Сервис готов
    221 Сервис закрыт
    225 Соединение для передачи данных открыто
    226 Закрытие соединения для передачи данных
    227 Введение пассивного режима; сервер посылает свой IP-адрес и номер порта
    230 Пользовательский вход корректен (OK)
    250 Запрос файла действует корректно (OK)
    Положительный промежуточный отклик
    331 Имя пользователя корректно (OK). Необходим пароль
    332 Необходимость учета для регистрации
    350 Действие файла рассматривается: необходимо больше информации
    Отклик отрицательного переходного завершения
    425 Нельзя открыть соединение для передачи данных
    426 Соединение разъединено: передача прервана
    450 Действие с файлом не производится, файл недоступен
    451 Действие прервано; локальная ошибка
    452 Действие прервано; недостаточно памяти
    Отклик отрицательного постоянного завершения
    500 Синтаксическая ошибка; неизвестная команда
    501 Синтаксическая ошибка в параметрах или аргументе
    502 Команда невыполнима
    503 Ошибочная последовательность команд
    504 Параметр команды невыполним
    530 Абонент не зарегистрирован
    532 Необходима учетная запись для накапливающего файла
    550 Действие не выполнено: файл недоступен
    552 Запрос на прерывание действия; превышена выделенная память
    553 Запрос на прекращение действия; не разрешенное имя файла

    Передача файла

    Передача файла проводится по соединению для передачи данных под управлением команд, посылаемых по соединению передачи сигналов управления. Однако мы должны помнить, что передача файла в FTP означает одно из трех понятий ( рисунок 13.7):

  • Если файл должен быть скопирован от сервера к клиенту, то он называется извлекаемый файл. Операция производится под надзором команды RETR.
  • Если файл копируется от клиента к серверу, то он называется накапливаемый файл. Операция производится под надзором команды STOR.
  • Если нужно послать список директории или имен от сервера к клиенту, то операция производится под надзором команды LIST. Заметим, что FTP рассматривает список директорий или имена файлов как файл. Он посылает его через соединение данных.
  • (рис 13.7) Передача файла

    Пример 1

    Рисунок 13.8 приводит пример использования FTP для извлечения списка элементов в директории.

    (рис 13.8) Пример 1
  • После того как соединение управления к порту 21 создано, FTP-сервер посылает отклик на установление соединения управления 220 (Готов к обслуживанию).
  • Клиент посылает команду USER.
  • Сервер отвечает 331 (Пользовательское имя OK, требуется пароль).
  • Клиент посылает команду PASS.
  • Сервер откликается 230 (Регистрация пользователя OK).
  • Клиент запускает пассивное открытие кратковременного порта для соединения данных и посылает команду PORT (через соединение управления), чтобы предоставить номер порта серверу.
  • Сервер к этому времени не открывает соединение, но готовится для открытия соединения данных между портом 20 (на стороне сервера) и кратковременным портом, полученным от клиента. Он посылает отклик 150 (Соединение данных будет вскоре открыто).
  • Клиент посылает сообщение LIST.
  • Теперь сервер откликается 125 и открывает соединение данных.
  • Сервер посылает список файлов или директорий (как файлы) по соединению данных. Когда послан полный список (файл), сервер посылает отклик 226 (Закрытие соединения) через соединение управления.
  • Клиент теперь имеет две возможности. Он может использовать команду QUIT, чтобы запросить управление закрытием, или может послать другую команду, чтобы начать другое действие (в конечном счете, открыть другое соединение передачи данных). В нашем примере клиент посылает команду QUIT.
  • После того как получена команда QUIT, сервер откликается 221 (Сервис закрыт) и затем закрывает управляющее соединение.

    Пример 2

    Рисунок 13.9 показывает пример того, как накапливается изображение.

    (рис 13.9) Пример 2
  • После того как создано управляющее соединение к порту 21, FTP-сервер посылает отклик 220 (Готов к обслуживанию) по управляющему соединению.
  • Клиент посылает команду USER.
  • Сервер отвечает 331 (Пользовательское имя OK, требуется пароль).
  • Клиент посылает команду PASS.
  • Сервер отвечает 230 (Пользователь зарегистрирован OK).
  • Клиент запускает пассивное открытие кратковременного порта для соединения данных и посылает команду PORT (через соединение управления), чтобы передать номер порта серверу.
  • Сервер к этому времени не открывает соединение, но готовится для открытия соединения данных между портом 20 (на стороне сервера) и кратковременным портом, полученным от клиента. Он посылает отклик 150 (Соединение данных будет вскоре открыто).
  • Клиент посылает команду TYPE.
  • Сервер отвечает откликом 200 (Команда в порядке — OK).
  • Клиент посылает команду STRU.
  • Сервер отвечает командой 200 (Команда в порядке — OK).
  • Клиент посылает команду STOR.
  • Сервер открывает соединение данных и посылает сообщение 250.
  • Сервер посылает отклик 226 по соединению управления.
  • Клиент посылает команду QUIT или использует другую команду, чтобы открыть другое соединение данных для передачи другого файла. В примере послана команда QUIT.
  • Сервер отвечает 221 (Обслуживание закрыто) и закрывает соединение управления.
  • Пользовательский интерфейс

    Большинство операционных систем обеспечивают дружественный пользователю интерфейс, помогающий обеспечить доступ к обслуживанию FTP. Интерфейс подсказывает пользователю соответствующий ввод. Затем пользователь напечатает строку, FTP читает эту строку и заменяет ее соответствующей FTP-командой. Некоторые команды могут быть заменены аббревиатурой, пока отсутствует неясность их толкования.

    Пример 3

    Мы продемонстрировали некоторые примеры команд пользовательского интерфейса, которые сопровождают задачи, подобные примеру 1. Пользовательский ввод выделен полужирным шрифтом. Как показано ниже, некоторые команды обеспечиваются интерфейсом автоматически. Например, пользователь не должен печатать никаких команд, связанных с командами USER, PASS, PORT. Это делает интерфейс. Пользователь получает подсказку и обеспечивает только аргументы.

    % ftp kafedra.sut.spb.ru
    Connecte to chellenger. sut.spb.ru
    220 Server ready
    Name: Berlin
    Password: xxxxxx
    ftp> ls /usr/user/report
    200 OK
    150 Opening ASCII mode
    .......................
    .......................
    226 transfer complete
    ftp> close
    221 Goodbye
    ftp> quit

    Анонимный FTP

    Чтобы использовать FTP, пользователю необходимо передать учетную запись (имя пользователя) и пароль на удаленный сервер. Некоторые сайты имеют набор файлов, доступных для общего пользования. Чтобы иметь доступ к этим файлам, пользователю не нужна учетная запись или пароль. Вместо этого пользователь может использовать анонимность (anonymous) как пользовательское bvz-имя и гостевой (guest) пароль.

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

    Пример 4

    Покажем пример использования анонимного FTP. Мы предполагаем, что некоторые общедоступные данные доступны по адресу loniis.net.

    % ftp loniis.net
    Connecte to loniis.net
    220 Server ready
    Name: anonymous
    Password: xxxxxx
    331 Guest logn OK, send "guest" as password
    Password: guest
    257 ‘/’ is current directory
    ftp>pwd
    200 OK
    150 Opening ASCII mode
    bin
    .......................
    ftp> close
    221 Goodbye
    ftp> quit

    Тривиальный протокол передачи файлов

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

    Тривиальный протокол передачи файла (Trivial File Transfer Protocol – TFTP) разработан для этого типа передачи [29]. Он так прост, что пакет программного обеспечения может вписаться в память бездисковой рабочей станции, предназначенную только для чтения. Это может использоваться при начальной загрузке. TFTP может читать или записывать файл для клиента. Чтение означает копирование файла со стороны сервера в сторону клиента. Записать означат копировать файл со стороны клиента в сторону сервера.

    Сообщения

    Имеется пять типов TFTP-сообщений: RRQ, WRQ, DATA, ACK и ERROR, как показано на рисунок 13.10

    (рис 13.10) Категории сообщений

    RRQ (Read Request)

    Сообщение "запрос на чтение" используется клиентом для установления соединения для чтения данных от сервера. Его формат показан на рисунок 13.11

    (рис 13.11) Формат "запрос на чтение"

    Сообщение RRQ содержит следующие поля:

  • OpCode. Код операции — 2 байта.
  • Имя файла. Следующая за первым полем строка переменной длины (закодированная в ASCII), которая определяет имя файла. В связи с тем что имя файла изменяется по длине, окончание сигнализируется однобайтовым полем из нулей.
  • Режим. Следующее поле — другая строка переменной величины, определяющая режим передачи. Поле режима передачи заканчивается однобайтовым полем, оно все заполнено нулями. Режим может быть одной из двух строк: "netascii" (для файла ASCII) или "octet" (для двоичного файла). Первоначально режим для других файлов был "mail", который теперь устарел. Имя поля файла и режима передачи могут быть написаны заглавными или прописными буквами или комбинацией обеих.
  • WRQ (Write Request)

    Сообщение "запрос на запись" ( write request — WRQ ) используется клиентом для установления соединения для записи данных в сервер. Формат такой же, как и для RRQ, за исключением того, что OpCode равен 2 ( рисунок 13.12).

    (рис 13.12) Формат "запрос на запись"

    Данные (DATA)

    Сообщение "данные" ( DATA ) используется клиентом или сервером для посылки блоков данных. Его формат показан на рисунок 13.13 Сообщение DATA имеет следующие поля:

    (рис 13.13) Формат "данные"
  • OpCode. Первое поле — двухбайтовый код операции. Для сообщения DATA его значение — 3.
  • Номер блока. Это двухбайтовое поле, содержащее номер блока. Отправитель данных (клиент или сервер) использует поле для последовательностей. Все блоки пронумерованы, начиная с единицы. Номер блока необходим для подтверждения, как это будет показано далее.
  • Данные. Этот блок может быть точно равен 512 байтам во всех сообщениях DATA, исключая последний блок, который может быть между 0 и 511 байтами. Блок, не равный 512 байтам, используется как сигнал о том, что отправитель послал все данные. Другими словами, он применяется как индикатор конца файла. Если случается, что данные в файле точно кратны 512 байтам, отправитель должен послать дополнительный блок из нулевых байтов, чтобы показать конец обмена. Данные могут быть переданы либо в NVT ASCII (netascii), либо двоичными октетами (octet).
  • ACK

    Сообщение "подтверждение" ( acknowledge — ACK ) используется клиентом или сервером для подтверждения приема блока данных. Это сообщение имеет длину только 4 байта. Его формат показан на рисунок 13.14

    (рис 13.14) Формат "подтверждение"

    Сообщение ACK имеет следующие поля:

  • OpCode. Первое поле — двухбайтный код операции. Для ACK имеет значение 4.
  • Block number. Следующее двухбайтовое поле, содержащее номер полученного блока.
  • Сообщение "подтверждение" может также быть откликом на "запрос на запись". Оно посылается сервером, чтобы указать, что он готов к приему данных от клиента. В этом случае значение поля номера блока равно 0. Пример сообщения "подтверждение" приведен в последнем разделе.

    ERROR

    Сообщение "ошибка" ( ERROR ) используется клиентом или сервером, когда соединение не может быть установлено или когда во время передачи данных имеется ошибка. Оно может быть послано во время активной фазы передачи. Сообщение "ошибка" не применяется для объявления повреждения или дублирования сообщения. Эта проблема решается механизмом контроля ошибок, обсуждаемым позднее в этой лекции. Формат сообщения "ошибка" показан на рисунок 13.15

    (рис 13.15) Формат "ошибка"

    Формат "ошибка" имеет следующие поля:

  • OpCode. Первое поле — двухбайтовый код операции. Его значение для сообщения "ошибка" — 5.
  • Номер ошибки. Двухбайтовое поле, определяющее тип ошибки. В таблице 13.8 показаны номера ошибок и их соответствующий смысл.
    Номера ошибок и их смысл
    Номер Смысл
    0 Не определено
    1 Файл не найден
    2 Нарушение доступа
    3 Диск полный или превышена квота на диске
    4 Неразрешенная операция
    5 Неизвестный номер порта
    6 Файл уже существует
    7 Нет такого пользователя
  • Данные ошибки. Это поле переменной длины, содержащее текстуальные ошибки данных и заканчивающееся однобайтовым полем из нулей.
  • Соединение

    TFTP пользуется UDP-сервисом (протокол передачи дейтаграмм). Поскольку в UDP не обеспечивается установление соединения и его завершение, UDP передает каждый блок данных, вставляя его в независимые пользовательские дейтаграммы. Однако в TFTP желательно предавать только один блок данных, а не пересылать файл как независимые блоки. Нам надо установить соединение для блоков данных, осуществляющих передачу всех принадлежащих тому же самому файлу. TFTP использует сообщения RRQ, WRQ, ACK и ERROR для установления соединения. Он применяет сообщение DATA с блоком данных менее чем 512 байт (0-511) для окончания соединения.

    Установление соединения

    Установление соединения для чтения файла отличается от установления соединения для записи файлов ( рисунок 13.16).

    (рис 13.16) Установление соединения
  • Чтение. Чтобы установить соединение для чтения, клиент TFTP посылает сообщение RRQ. Имя файла и режим передачи определяется в этом сообщении. Если сервер может передавать файл, он отвечает положительно сообщением DATA, содержащим первый блок данных. Если имеются проблемы, такие как трудности в открытии файла или ограничения в разрешении, сервер отвечает негативно посылкой сообщения ERROR.
  • Запись. Чтобы установить соединение для записи, клиент TFTP использует сообщение WRQ. Имя файла и режим передачи определяется в этом сообщении. Если сервер может принять копию файла, он отвечает положительно сообщением ACK, используя значение 0 для блока данных. Если имеются проблемы, сервер отвечает негативно посылкой сообщения ERROR.
  • Завершение соединения

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

    Передача данных

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

    Файл разделяется на блоки данных, в которых каждый блок, исключая последний, содержит точно 512 байтов. Последний блок должен быть между 0 и 511 битами. TFTP может передавать данные в ASCII или двоичном формате.

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

    Управление потоками

    TFTP посылает блоки данных, используя сообщение DATA, и ожидает сообщение ACK. Если отправитель получает сигналы подтверждения прежде, чем сработал таймер (time-out), он посылает следующий блок. Таким образом, управление потоком – это продвижение нумерации блоков данных и ожидание ACK, прежде чем послан следующий блок данных.

    Извлечение файла

    Когда клиент хочет извлечь (читать) файл, он посылает сообщение RRQ. Сервер отвечает сообщением DATA, посылающим первый блок данных c номером блока (если нет проблем).

    Накопление файла

    Когда клиент хочет накопить (записать) файл, он посылает сообщение WRQ. Сервер отвечает сообщением ACK (если нет проблем) c номером блока 1.

    Контроль ошибок

    TFTP-механизм контроля над ошибками отличается от других протоколов. Он симметричный — это означает, что отправитель и получатель оба используют тайм-аут. Отправитель применяет его для сообщений данных; получатель — для подтверждения сообщений. Если сообщение данных потеряно, отправитель повторяет его после истечения тайм-аута. Если подтверждение потеряно, получатель повторяет его после истечения тайм-аута. Эта гарантирует нормальную работу.

    Поврежденное сообщение

    При этом нет никаких отрицательных подтверждений. Если блок данных поврежден, это обнаруживается приемником и блок удаляется. Передатчик ожидает подтверждение и не получает его в период тайм-аута. Блок посылается опять. Заметим, что в сообщении DATA при TFTP нет поля контрольной суммы. Приемник может обнаружить искажение только одним путем: через поле контрольной суммы в пользовательской дейтаграмме UDP.

    Потеря сообщения

    Если блок потерян, он никогда не достигнет приемника, и не будет послано подтверждение. Передатчик повторяет блок после тайм-аута.

    Потеря подтверждения

    Если потеряно подтверждение, возможны две ситуации. Если таймер приемника сработает раньше таймера передатчика, приемник повторит подтверждение; в другом случае передатчик повторит данные.

    Дублирование сообщения

    Дублирование блока может быть обнаружено приемником по номеру блока. Если блок дублирован, он просто удаляется приемником.

    "Ошибка ученика волшебника"

    Хотя контроль потока и ошибок в TFTP симметричен, он может привести к так называемой "ошибке ученика волшебника". Представьте себе карикатурный персонаж, который, неосторожно используя волшебство, вызывает метлу, которая непрерывно копирует сама себя. Это случается, если сообщение ACK не теряется, но задерживается. В этой ситуации каждый успешный блок посылает двойное или более подтверждение и получает удвоенную информацию.

    Рисунок 13.17 показывает проблему. Подтверждение для пятого блока задерживается. Затем истекает тайм-аут, передатчик повторно передает пятый блок, который будет подтвержден передатчиком опять. Передатчик получает два подтверждения для пятого блока, которые запускают посылку шестого блока дважды. Приемник получает седьмой блок дважды и опять посылает два подтверждения, как результат посылки седьмого блока дважды. И так далее.

    (рис 13.17) "Ошибка ученика волшебника"

    TFTP-опции

    Было предложено расширение к протоколу TFTP, которое позволяло дополнительные опции к сообщениям RRQ и WRQ. Опция главным образом используется для того, чтобы договориться о размере блока и, возможно, о начальной последовательности чисел. Без этой опции размер блока равен 512 байт, за исключением последнего блока. Договор может определить размер блока с любым числом байт и такую длину сообщения, которое может быть вставлено в пользовательскую дейтаграмму UDP.

    Новый тип сообщения, "опция подтверждения" ( OACK- option acknowledgment ), нужен для того, чтобы позволить другой стороне принять или отклонить предложенные опции.

    Безопасность

    Одно важное замечание о TFTP – это то, что он не обеспечивает безопасности. В нем нет ни идентификатора пользователя, ни его пароля. Однако сегодня такие предосторожности должны быть предприняты, чтобы препятствовать хакерам обращаться к файлам. Одна из мер защиты должна ограничить доступ TFTP к некритическим файлам. Другой путь для дополнения секретности – это использование прикладных программ, таких как TELNET, в сочетании с TFTP. Пользователь должен вначале получить доступ к TELNET; TELNET проверяет, имеет ли пользователь право на доступ к системе и к соответствующему файлу. Затем он вызывает TFTP клиента и передает имя файла клиенту. Далее клиент осуществляет соединение TFTP к серверу TFTP на пользовательский сайт ( Рисунок 13.18).

    (рис 13.18) Использование TELNET в сочетании с TFTP для обеспечения безопасности

    Заметим, что в этом процессе пользователь работает с TFTP-процессом сервера, а удаленный сайт работает с процессом клиента. Также заметим, что действия, выполняемые пользователем, резервированы: если пользователь захочет читать файл, удаленный сайт использует операцию "записать"; если пользователь хочет записать файл, удаленный сайт теперь использует операцию "читать".

    Приложения

    TFTP очень полезен для передачи основных файлов, где безопасность не является главным элементом. Он может быть использован для инициализации устройств, таких как "мост" или маршрутизатор. Его главное применение — согласование с протоколами BOOTP или DHCP. TFTP требует небольшого объема памяти и использует только службу UDP и IP. Он может просто конфигурировать память только для чтения (ROM) (или программируемую память PROM). Когда станция включена, TFTP будет подключен к серверу и станция может быть загружена файлом конфигурации от сервера по протоколам BOOTP (или DHCP).

    Краткие итоги

  • Протокол передачи файлов (File Transfer Protocol – FTP) – это приложение клиент-сервер протокола TCP/IP для копирования файлов из одного хоста к другому.
  • FTP требует двух соединений для передачи данных: соединение управления и соединение данных.
  • FTP использует NVT ASCII для связи между непохожими системами.
  • Перед активной передачей файла клиентом определяется тип файла, структура данных и режим передачи.
  • Имеется шесть классов команд, посылаемых клиентом для установления связи с сервером:
  • Команды доступа.
  • Команды управления файлом.
  • Команды определения порта.
  • Команды передачи файла.
  • Прочие команды.
  • Отклики посылаются от сервера к клиенту в течение установления соединения.
  • Имеются три типа файлов для передачи:
  • Файл, копированный от сервера к клиенту.
  • Файл, копированный от клиента к серверу.
  • Список директорий или имена файлов, посылаемые от сервера к клиенту.
  • Большинство операционных систем обеспечивают дружественный пользователю интерфейс между FTP и пользователем.
  • Анонимный FTP обеспечивает метод для общедоступного доступа к файлу на удаленных сайтах.
  • Тривиальный протокол передачи файла (Trivial File Transfer Protocol – TFTP) – это простой протокол FTP без многих используемых возможностей.
  • Клиент использует услуги TFTP, чтобы извлечь копию файла или послать копию файла сервера.
  • Имеется пять типов сообщений TFTP:
  • RRQ – это сообщение клиента, которое устанавливает соединение для чтения данных от сервера.
  • WRQ – это сообщение клиента, которое устанавливает соединение для записи данных в сервер.
  • DATA – это сообщение клиента или сервера, которое посылает блоки данных.
  • ACK – подтверждает прием блока данных.
  • ERROR – сообщение, отражающее проблемы соединения или передачи.
  • TFTP – это приложение, которое использует UDP-протокол передачи дейтаграмм для своего транспортного уровня.
  • TFTP использует RRQ, WRQ, ACK и ERROR для установления соединения. Сообщение DATA с блоком данных менее чем 512 байтов завершает соединение.
  • Каждое сообщение DATA, за исключением последнего, переносит 512 байт данных файла.
  • TFTP использует для управления потоком протокол "остановись и жди".
  • Контроль ошибок осуществляется в четырех ситуациях: поврежденное сообщение, потерянное сообщение, потерянное подтверждение или дублирование сообщения.
  • TFTP выполняет симметричную передачу, при этом и приемник, и передатчик используют тайм-аут для обработки ошибок.
  • "Ошибка ученика волшебника" — это удвоение подтверждения и сообщений данных, которая случается при TFTP-механизме контроля за потоком и ошибками.
  • Существуют расширения для TFTP-протокола, позволяющие предложить опции размеров блока данных.
  • TFTP не имеет механизма обеспечения безопасности. Вторая прикладная программа, такая как TELNET, может использоваться совместно с TFTP для обеспечения безопасности.
  • TFTP может быть использован совместно с BOOTP или DHCP для инициализации устройств при загрузке файлов конфигурации.
  • Задачи и упражнения

  • Объясните, что произойдет, если соединение управления будет нарушено в течение работы FTP.
  • Объясните, почему клиент использует пассивное открытие при соединении для сигнализации и пассивное открытие при соединении для передачи данных.
  • Почему нужны ограничения при анонимной передаче FTP? Что мог бы сделать недобросовестный пользователь?
  • Объясните, почему FTP не имеет формата сообщения.
  • Покажите один сегмент TCP, который переносит одну команду FTP.
  • Покажите один сегмент TCP, который переносит один отклик FTP.
  • Покажите один сегмент TCP, который переносит данные FTP.
  • Объясните, что случится, если файл в примере 2 уже существует.
  • Повторите Пример1, используя команду PASV вместо команды PORT.
  • Повторите Пример 2, используя команду STOU вместо команды STOR, для накопления файла с уникальным именем. Что случится, если файл с таким же именем уже существует?
  • ПовторитеПример 2, используя команду RETR вместо команды STOR, для запуска файла.
  • Приведите пример использования команды HELP. Используйте формат Примера 1.
  • Приведите пример использования команды NOOP. Используйте формат Примера 1.
  • Приведите пример использования команды SYST. Используйте формат Примера 1.
  • Пользователь хочет создать директорию под именем Feb в директории /usr/users/letters. Имя хоста "SUT.ru". Покажите команды и отклики, используя Примеры 1 и 2 как подсказку.
  • Пользователь хочет переместить директорию. Имя хоста "SUT.ru". Покажите команды и отклики, используя Примеры 1 и 2 как подсказку.
  • Пользователь хочет переместить файл с именем file1 из директории /usr/users/report в директорию /usr/users/letters. Имя хоста "SUT.ru". Покажите команды и отклики, используя Примеры 1 и 2 как подсказку.
  • Пользователь хочет запустить EBCDIC-файл с именем file1 из директории /usr/users/report. Имя хоста "SUT.ru". Файл большой и пользователь хочет сжать его до передачи. Покажите команды и отклики, используя Примеры 1 и 2 как подсказку.
  • Почему нужны сообщения RRQ, WRQ в FTP, но не нужны в TFTP?
  • Покажите инкапсуляцию сообщения RRQ в пользовательскую дейтаграмму UDP. Имя файла "Report" и используется ASCII. Каков размер дейтаграммы UDP?
  • Покажите инкапсуляцию сообщения WRQ в пользовательскую дейтаграмму UDP. Имя файла "Report" и используется ASCII. Каков размер дейтаграммы UDP?
  • Покажите инкапсуляцию сообщения передачи данных TFTP, переносящих блок 7, в пользовательскую дейтаграмму UDP. Каков общий размер дейтаграммы UDP?
  • Хост A используется TFTP для чтения 2 150 байт данных из хоста B. Покажите команды TFTP, включая команды, которые необходимы для установления и завершения соединения. Предполагаем, что ошибки отсутствуют.
  • Покажите все пользовательские дейтаграммы при обмене двух хостов в Упражнении 23.
  • Повторите Упражнение 23 в предположении, что второй блок принят с ошибкой.
  • Покажите все пользовательские дейтаграммы при обмене двух хостов в Упражнении 25.
  • Дополнительный материал для прохождения тестирования к лекции, Вы можете скачать здесь.

    Страницы:

    Протокол FTP

    Протокол передачи файлов (File Transfer Protocol – FTP) – это стандартный механизм для копирования файла от одного хоста другим [19]. Передача файлов от одного компьютера к другому – это одна из большого числа общих задач, выполнение которой ожидается от организованной сети и взаимодействия между сетями.

    Хотя передача файлов от одной системы к другой кажется простой и прямолинейной задачей, вначале должны быть решены некоторые проблемы. Например, две системы могут использовать различные соглашения об именах файлов. Две системы могут иметь различные пути для представления текстов и данных. Две системы могут иметь различные структуры директорий. Все эти проблемы решает FTP очень простым и элегантным методом.

    FTP отличается от других приложений типа клиент-сервер тем, что он устанавливает два соединения между хостами. Одно соединение применяется для передачи данных, другое — для управления информацией (команды и отклики). Разделение команд и передачи управляющих данных делает FTP более эффективным. Управление соединением использует очень простые правила для связи. Нам нужна для передачи только линия команд или линия откликов. С другой стороны, соединение для данных нуждается в более сложных правилах из-за разнообразия типов данных.

    FTP использует два заданных порта: порт 21 для управления и порт 20 для передачи данных.

    Рисунок 13.1 показывает базовую модель FTP. Клиент имеет три компоненты: пользовательский интерфейс, процесс управления клиентом и процесс передачи клиентских данных. Соединение для передачи сигналов управления происходит между процессами управления. Соединение для передачи данных делается для процессов обмена данными.

    (рис 13.1) FTP

    Соединение передачи сигналов управления остается открытым в течение всей интерактивной сессии FTP. Соединение передачи данных каждый раз открывается командой, чтобы вызвать передаваемый файл, и затем закрывается, когда файл передан. Другими словами, когда пользователь начинает FTP-сессию, соединение для передачи сигналов управления открывается. Пока оно открывается, соединение для передачи данных может быть открыто и закрыто много раз, если передается несколько файлов.

    Соединения

    Два FTP-соединения – для передачи команд управления и передачи данных — используют различные стратегии и различные номера портов.

    Соединение для передачи команд управления

    Соединение для передачи команд управления создается тем же самым методом, что и другие соединения, рассмотренные далее. Имеется два шага:

  • сервер пассивно открывается, подключается к заданному порту и ждет клиента;
  • клиент использует временный порт, и сессия активно открывается.
  • Соединение для передачи команд управления остается открытым в течение всего процесса. Тип услуги, используемый в соответствии с IP-протоколом, – это минимизация задержки, потому что это диалоговая связь между пользователем (человеком) и сервером. Пользователи различного типа посылают команды и ожидают получение откликов без существенной задержки. Рис. 13.2 показывает начальное соединение между сервером и клиентом. Конечно, после начального соединения процесс сервера порождает "дочерние" процессы и назначает свободное обслуживание клиента "дочерним" процессом, использующим кратковременный порт.

    (рис 13.2) Открытие управляющего соединения

    Соединение для передачи данных

    Соединение для передачи данных использует заданный порт 20. Однако создание соединения для передачи данных отличается от предыдущего. FTP создает соединение для передачи данных следующим образом:

  • Клиент (не сервер) вызывает пассивное открытие кратковременного порта. Это может быть сделано клиентом, потому что клиент вызывает команды для передачи файлов.
  • Клиент посылает номер этого порта серверу, используя команду PORT (ниже эта команда будет рассмотрена).
  • Сервер получает номер порта, вызывает активное открытие заданного порта 20 и получает номер временного порта.
  • Шаги для создания начального соединения для передачи данных показаны на рис. 13.3. Позднее мы увидим, что эти шаги меняются, если используется команда PASV.

    (рис 13.3) Создание соединения для передачи данных

    Установление соединения

    Процессы FTP клиента и сервера, которые выполняются на различных компьютерах, могут устанавливать соединение друг с другом. Эти два компьютера могут использовать различные операционные системы, различные наборы символов, различные структуры и различные форматы файлов. FTP должен сделать совместимой всю эту неоднородность.

    FTP обладает двумя различными подходами для управления соединением: одним для соединения для передачи команд управления и одним для передачи данных. Рассмотрим отдельно каждый метод.

    Связь по каналу (соединению) для передачи команд управления

    FTP применяет те же самые методы, что TELNET или SMTP, для коммутации по установлению соединения для команд управления. Он использует набор символов NVT ASCII ( Рисунок 13.4). Связь устанавливается с помощью команд и откликов. Посылается одна команда (отклик) в один момент времени. Каждая команда или отклик – это только короткая строка, так что мы можем не беспокоиться о формате файла или структуре файла. Каждая строка заканчивается двумя символами, обозначающими конец строки (возврат каретки и перевод строки).

    (рис 13.4) Использование соединения управления

    Связь по каналу (соединению) передачи данных

    Цель и реализация соединения для передачи данных отличается от соединения для сигналов управления. Мы хотим передать файлы по каналу для передачи данных. Клиент должен различать тип файла, который должен быть передан, структуру данных и режим передачи. Перед тем как передавать по каналу для передачи данных, мы подготавливаем передачу по каналу для сигналов управления. Проблема разнородности решается с помощью определения трех атрибутов: тип, структура данных и режим передачи ( рисунок 13.5).

    (рис 13.5) Использование соединения для передачи данных

    Тип файла

    FTP может передавать через соединение для передачи данных следующие типы файлов:

  • ASCII-файл. Это формат, используемый по умолчанию для трансляции текстовых файлов. Каждый символ закодирован с использованием NVT ASCII-символов. Передатчик преобразует файл из собственного представления в NVT ASCII, и приемник преобразует символы NVT ASCII в собственное представление.
  • EBCDIC-файл. Если оба конца соединения используют кодирование EBCDIC, файл может быть передан с использованием EBCDIC-кодирования.
  • Image-файл. Этот файл по умолчанию — формат для передачи двоичных файлов. Файл посылается как непрерывный поток бит без всякой интерпретации и кодирования. Он в большинстве случаев используется для передачи двоичных файлов, таких как компилированная программа.
  • Если файл закодирован в ASCII или EBCDIC, другие атрибуты должны дополняться, чтобы определить возможность печати файла:

  • Запрещенный для печати. Это формат по умолчанию для передачи текстовых файлов. Файл не содержит "вертикальных" спецификаций для печати. Это означает, что файл не может быть напечатан без предварительной обработки, потому что он не содержит символов, интерпретируемых для вертикального передвижения печатающей головки. Этот формат используется для файлов, которые будут накоплены и обработаны позднее.
  • TELNET. В этом формате файл содержит NVT ASCII вертикальные символы, такие, как CR (перевод каретки), LN (перевод строки), NL (новая строка) и VT (вертикальное табулирование). Эти файлы могут быть напечатаны после передачи
  • Структура данных

    FTP может передавать файл по соединению для передачи данных, используя одну из следующих интерпретаций структуры данных:

  • Файловая структура (по умолчанию). Этот файл не имеет структуры. Это непрерывный поток данных.
  • Структура записи. Этот файл, разделенный внутри записи Он может быть использован только с текстовым файлом.
  • Страничная структура. Это файл, разделенный на страницы, каждая страница имеет номер и заголовок страницы. Страницы могут быть накоплены или достигнуты с помощью произвольного или последовательного доступа.
  • Режимы передачи

    FTP может передавать файл по соединению для передачи данных, используя один из трех следующих режимов передачи:

  • Поточный режим. Это режим по умолчанию. Данные доставляются от FTP к TCP как непрерывный поток данных. TCP отвечает за разбиение данных на сегменты соответствующего размера. Если данные — просто поток байтов (файловая структура), то не нужно никакого признака окончания файла. Окончание файла в этом случае — это разъединение соединения данных отправителем. Если данные разделены на записи (структура по записи), каждая запись будет иметь однобайтный символ окончания записи (EOR — end of record).
  • Блочный режим. Данные могут быть доставлены от FTP и TCP в блоках. В этом случае блоку предшествует трехбайтный заголовок. Первый байт называется дескриптор блока, следующие два байта определяют размер блока в байтах.
  • Сжатый режим. Если файл большой, данные могут быть сжаты. Метод сжатия использует нормальное кодирование длины. В этом методе последовательное повторное появление блока данных заменяется одним вхождением и числом повторений. В тексте файла это обычно пробел (пустоты). В двоичном файле нулевые символы обычно сжимаются.
  • Команды обработки

    FTP использует соединение управления для того, чтобы установить связь между процессом управления клиента. В течение этой связи команды посылаются от клиента к серверу, и отклики посылаются от сервера к клиенту ( рисунок 13.6).

    (рис 13.6) Команды обработки

    Команды

    Команды, которые посылаются от FTP-процесса управления клиента в форме заглавных букв ASCII, могут сопровождаться или не сопровождаться аргументом. Мы можем грубо разделить команды на шесть групп: команды доступа, команды управления файлами, команды форматирования данных, команды определения порта, команды передачи файла и прочие команды.

  • Команды доступа. Эти команды позволяют пользователю обращаться к удаленной системе. Табл. 13.1 перечисляет общие команды в этой группе.
    Команды доступа
    Команды Аргументы Описание
    USER ID пользователя Пользовательская информация
    PASS Пароль пользователя Пароль
    ACCT Загруженная учетная запись Учетная информация
    REIN Перезапуск
    QUIT Выход из системы
    ABOR Прерывание предыдущей команды
  • Команды управления файлом. Эти команды дают пользователю возможность обращаться к удаленному компьютеру, передвигаться по структуре директории, создавать новые директории, удалять файлы и так далее. В Табл. 13.2 даны общие команды этой группы.
    Команды управления файлом
    Команды Аргументы Описание
    CWD Имя директории Изменение другой директории
    CDUP Изменение вышестоящей директории
    DELE Имя файла Удаление файла
    LIST Имя директории Список поддиректорий и файлов
    NLIST Имя директории Список имен поддиректорий или файлов, не имеющих атрибутов
    MKD Имя директории Создать новую директорию
    PWD Имя текущей директории на дисплее
    RMD Имя директории Удалить директорию
    RNER Имя файла (старое имя) Идентификатор файла, который будет переименован
    RNTO Имя файла (новое имя файла) Переименование файла
    SMNT Системное имя файла Вершина системы
  • Команды форматирования данных. Эти команды дают пользователю возможность определить данные о структуре, типе файла и режиме передачи. Определенный формат затем используется командами передачи файлов. Табл. 13.3 показывает общие команды этой группы.
    Команды форматирования данных
    Команды Аргументы Описание
    TYPE A (ASCII), E (EBCDIC), I (IMAGE), N (Nonprint), T(Telnet) Определяет тип файла, если необходим формат для печати
    STRU F (File), R (Record), P (Page) Определяет организацию данных
    MODE S (Stream), B (Block), C (Compressed) Определяет режим передачи
  • Команды определения порта. Эти команды определяют номер порта для соединения передачи данных на стороне клиента. Имеется два метода, чтобы сделать это. Первый метод применяет команду PORT, чтобы клиент мог выбрать кратковременный номер порта и послать серверу для использования при пассивном открытии. Сервер задействует номер порта и порождает активное открытие этого порта. Во втором методе используется команда PASV, клиент сначала запрашивает сервер о выборе номера порта. Сервер производит пассивное открытие этого порта и посылает в отклике номер порта (см. отклик, пронумерованный 227 в таблице 13.7). Клиент делает активное открытие, используя номер порта. Таблица 13.4 показывает команды определения порта.
    Команды определения порта
    Команды Аргументы Описание
    PORT 6-цифровой идентификатор Клиент выбирает порт
    PASV Сервер выбирает порт
  • Команды передачи файла. Эти команды позволяют передачу файлов. В таблице 13.5 перечислены общие команды этой группы.
    Команды передачи файла
    Команды Аргументы Описание
    RETR Имя файла (ов) Извлечение файла: файл(ы) передан(ы) от сервера к клиенту
    STOR Имя файла (ов) Накопление файла: файл(ы) передан(ы) от клиента к серверу
    APPE Имя файла (ов) Совпадает с STOR за исключением того, что если файл существует, то данные могут быть прикреплены к нему
    STOU Имя файла (ов) То же самое, что STORE, за исключением того, что имя файла будет уникальным в этой директории; однако существующий файл не должен быть переписан
    AALLO Имя файла (ов) Распределение места для накопления файлов в сервере
    REST Имя файла (ов) Установка отметки в определенной точке данных
    STAT Имя файла (ов) Возврат состояния файла
  • Различные команды. Эти команды доставляют информацию к пользователю FTP на стороне клиента. Табл. 13.6 показывает общие команды этой группы.
    Прочие команды
    Команды Аргументы Описание
    HELP Запрос информации
    NOOP Проверка, является ли сервер действующим
    SITE Команды Определение сайта заданных команд
    SYST Запрос об операционной системе, используемой сервером
  • Отклики

    Каждая FTP-команда вызывает по крайней мере один отклик. Отклик имеет две части: номер из трех цифр, следующий за текстом. Числовая часть определяет код; текстовая часть определяет необходимые параметры или дополнительные пояснения. В дальнейшем представим три цифры как xyz.

    Первая цифра

    Первая цифра определяет состояние команды. В этой позиции может быть использована одна из пяти цифр:

  • 1yz (положительный предварительный ответ). Действие началось. Сервер будет посылать другие отклики перед принятием другой команды.
  • 2yz (положительный отклик завершения). Действие завершено. Сервер будет принимать другую команду.
  • 3yz (положительный промежуточный отклик). Команда принята, но нужна дальнейшая информация.
  • 4yz (отклик отрицательного переходного завершения). Действие не произошло, но ошибка временная. Та же самая команда будет послана позднее.
  • 5yz (отклик отрицательного постоянного завершения). Команда не принята и должна быть повторена позже.
  • Вторая цифра

    Вторая цифра также определяет состояние команды. В этой позиции может быть использована одна из шести цифр:

  • x0z (синтаксис);
  • x1z (информация);
  • x2z (подключение);
  • x3z (идентификация и учет);
  • x4z (не определено);
  • x5z (система файлов).
  • Третья цифра

    Третья цифра обеспечивает дополнительную информацию. Таблица 13.7 показывает краткий перечень возможных откликов.

    Отклики
    Коды Описание
    Положительный предварительный ответ
    120 Сервис будет вскоре готов
    125 Соединение данных открыто: передача данных вскоре начнется
    150 Состояние файла хорошее (OK). Соединение будет вскоре открыто
    Положительный отклик завершения
    200 Команда в порядке (OK)
    211 Состояние системы или справочный отклик
    212 Состояние директории
    213 Состояние файла
    214 Справочное сообщение
    215 Обозначение типа системы (операционной системы)
    220 Сервис готов
    221 Сервис закрыт
    225 Соединение для передачи данных открыто
    226 Закрытие соединения для передачи данных
    227 Введение пассивного режима; сервер посылает свой IP-адрес и номер порта
    230 Пользовательский вход корректен (OK)
    250 Запрос файла действует корректно (OK)
    Положительный промежуточный отклик
    331 Имя пользователя корректно (OK). Необходим пароль
    332 Необходимость учета для регистрации
    350 Действие файла рассматривается: необходимо больше информации
    Отклик отрицательного переходного завершения
    425 Нельзя открыть соединение для передачи данных
    426 Соединение разъединено: передача прервана
    450 Действие с файлом не производится, файл недоступен
    451 Действие прервано; локальная ошибка
    452 Действие прервано; недостаточно памяти
    Отклик отрицательного постоянного завершения
    500 Синтаксическая ошибка; неизвестная команда
    501 Синтаксическая ошибка в параметрах или аргументе
    502 Команда невыполнима
    503 Ошибочная последовательность команд
    504 Параметр команды невыполним
    530 Абонент не зарегистрирован
    532 Необходима учетная запись для накапливающего файла
    550 Действие не выполнено: файл недоступен
    552 Запрос на прерывание действия; превышена выделенная память
    553 Запрос на прекращение действия; не разрешенное имя файла

    Передача файла

    Передача файла проводится по соединению для передачи данных под управлением команд, посылаемых по соединению передачи сигналов управления. Однако мы должны помнить, что передача файла в FTP означает одно из трех понятий ( рисунок 13.7):

  • Если файл должен быть скопирован от сервера к клиенту, то он называется извлекаемый файл. Операция производится под надзором команды RETR.
  • Если файл копируется от клиента к серверу, то он называется накапливаемый файл. Операция производится под надзором команды STOR.
  • Если нужно послать список директории или имен от сервера к клиенту, то операция производится под надзором команды LIST. Заметим, что FTP рассматривает список директорий или имена файлов как файл. Он посылает его через соединение данных.
  • (рис 13.7) Передача файла

    Пример 1

    Рисунок 13.8 приводит пример использования FTP для извлечения списка элементов в директории.

    (рис 13.8) Пример 1
  • После того как соединение управления к порту 21 создано, FTP-сервер посылает отклик на установление соединения управления 220 (Готов к обслуживанию).
  • Клиент посылает команду USER.
  • Сервер отвечает 331 (Пользовательское имя OK, требуется пароль).
  • Клиент посылает команду PASS.
  • Сервер откликается 230 (Регистрация пользователя OK).
  • Клиент запускает пассивное открытие кратковременного порта для соединения данных и посылает команду PORT (через соединение управления), чтобы предоставить номер порта серверу.
  • Сервер к этому времени не открывает соединение, но готовится для открытия соединения данных между портом 20 (на стороне сервера) и кратковременным портом, полученным от клиента. Он посылает отклик 150 (Соединение данных будет вскоре открыто).
  • Клиент посылает сообщение LIST.
  • Теперь сервер откликается 125 и открывает соединение данных.
  • Сервер посылает список файлов или директорий (как файлы) по соединению данных. Когда послан полный список (файл), сервер посылает отклик 226 (Закрытие соединения) через соединение управления.
  • Клиент теперь имеет две возможности. Он может использовать команду QUIT, чтобы запросить управление закрытием, или может послать другую команду, чтобы начать другое действие (в конечном счете, открыть другое соединение передачи данных). В нашем примере клиент посылает команду QUIT.
  • После того как получена команда QUIT, сервер откликается 221 (Сервис закрыт) и затем закрывает управляющее соединение.

    Пример 2

    Рисунок 13.9 показывает пример того, как накапливается изображение.

    (рис 13.9) Пример 2
  • После того как создано управляющее соединение к порту 21, FTP-сервер посылает отклик 220 (Готов к обслуживанию) по управляющему соединению.
  • Клиент посылает команду USER.
  • Сервер отвечает 331 (Пользовательское имя OK, требуется пароль).
  • Клиент посылает команду PASS.
  • Сервер отвечает 230 (Пользователь зарегистрирован OK).
  • Клиент запускает пассивное открытие кратковременного порта для соединения данных и посылает команду PORT (через соединение управления), чтобы передать номер порта серверу.
  • Сервер к этому времени не открывает соединение, но готовится для открытия соединения данных между портом 20 (на стороне сервера) и кратковременным портом, полученным от клиента. Он посылает отклик 150 (Соединение данных будет вскоре открыто).
  • Клиент посылает команду TYPE.
  • Сервер отвечает откликом 200 (Команда в порядке — OK).
  • Клиент посылает команду STRU.
  • Сервер отвечает командой 200 (Команда в порядке — OK).
  • Клиент посылает команду STOR.
  • Сервер открывает соединение данных и посылает сообщение 250.
  • Сервер посылает отклик 226 по соединению управления.
  • Клиент посылает команду QUIT или использует другую команду, чтобы открыть другое соединение данных для передачи другого файла. В примере послана команда QUIT.
  • Сервер отвечает 221 (Обслуживание закрыто) и закрывает соединение управления.
  • Пользовательский интерфейс

    Большинство операционных систем обеспечивают дружественный пользователю интерфейс, помогающий обеспечить доступ к обслуживанию FTP. Интерфейс подсказывает пользователю соответствующий ввод. Затем пользователь напечатает строку, FTP читает эту строку и заменяет ее соответствующей FTP-командой. Некоторые команды могут быть заменены аббревиатурой, пока отсутствует неясность их толкования.

    Пример 3

    Мы продемонстрировали некоторые примеры команд пользовательского интерфейса, которые сопровождают задачи, подобные примеру 1. Пользовательский ввод выделен полужирным шрифтом. Как показано ниже, некоторые команды обеспечиваются интерфейсом автоматически. Например, пользователь не должен печатать никаких команд, связанных с командами USER, PASS, PORT. Это делает интерфейс. Пользователь получает подсказку и обеспечивает только аргументы.

    % ftp kafedra.sut.spb.ru
    Connecte to chellenger. sut.spb.ru
    220 Server ready
    Name: Berlin
    Password: xxxxxx
    ftp> ls /usr/user/report
    200 OK
    150 Opening ASCII mode
    .......................
    .......................
    226 transfer complete
    ftp> close
    221 Goodbye
    ftp> quit

    Анонимный FTP

    Чтобы использовать FTP, пользователю необходимо передать учетную запись (имя пользователя) и пароль на удаленный сервер. Некоторые сайты имеют набор файлов, доступных для общего пользования. Чтобы иметь доступ к этим файлам, пользователю не нужна учетная запись или пароль. Вместо этого пользователь может использовать анонимность (anonymous) как пользовательское bvz-имя и гостевой (guest) пароль.

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

    Пример 4

    Покажем пример использования анонимного FTP. Мы предполагаем, что некоторые общедоступные данные доступны по адресу loniis.net.

    % ftp loniis.net
    Connecte to loniis.net
    220 Server ready
    Name: anonymous
    Password: xxxxxx
    331 Guest logn OK, send "guest" as password
    Password: guest
    257 ‘/’ is current directory
    ftp>pwd
    200 OK
    150 Opening ASCII mode
    bin
    .......................
    ftp> close
    221 Goodbye
    ftp> quit

    Тривиальный протокол передачи файлов

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

    Тривиальный протокол передачи файла (Trivial File Transfer Protocol – TFTP) разработан для этого типа передачи [29]. Он так прост, что пакет программного обеспечения может вписаться в память бездисковой рабочей станции, предназначенную только для чтения. Это может использоваться при начальной загрузке. TFTP может читать или записывать файл для клиента. Чтение означает копирование файла со стороны сервера в сторону клиента. Записать означат копировать файл со стороны клиента в сторону сервера.

    Сообщения

    Имеется пять типов TFTP-сообщений: RRQ, WRQ, DATA, ACK и ERROR, как показано на рисунок 13.10

    (рис 13.10) Категории сообщений

    RRQ (Read Request)

    Сообщение "запрос на чтение" используется клиентом для установления соединения для чтения данных от сервера. Его формат показан на рисунок 13.11

    (рис 13.11) Формат "запрос на чтение"

    Сообщение RRQ содержит следующие поля:

  • OpCode. Код операции — 2 байта.
  • Имя файла. Следующая за первым полем строка переменной длины (закодированная в ASCII), которая определяет имя файла. В связи с тем что имя файла изменяется по длине, окончание сигнализируется однобайтовым полем из нулей.
  • Режим. Следующее поле — другая строка переменной величины, определяющая режим передачи. Поле режима передачи заканчивается однобайтовым полем, оно все заполнено нулями. Режим может быть одной из двух строк: "netascii" (для файла ASCII) или "octet" (для двоичного файла). Первоначально режим для других файлов был "mail", который теперь устарел. Имя поля файла и режима передачи могут быть написаны заглавными или прописными буквами или комбинацией обеих.
  • WRQ (Write Request)

    Сообщение "запрос на запись" ( write request — WRQ ) используется клиентом для установления соединения для записи данных в сервер. Формат такой же, как и для RRQ, за исключением того, что OpCode равен 2 ( рисунок 13.12).

    (рис 13.12) Формат "запрос на запись"

    Данные (DATA)

    Сообщение "данные" ( DATA ) используется клиентом или сервером для посылки блоков данных. Его формат показан на рисунок 13.13 Сообщение DATA имеет следующие поля:

    (рис 13.13) Формат "данные"
  • OpCode. Первое поле — двухбайтовый код операции. Для сообщения DATA его значение — 3.
  • Номер блока. Это двухбайтовое поле, содержащее номер блока. Отправитель данных (клиент или сервер) использует поле для последовательностей. Все блоки пронумерованы, начиная с единицы. Номер блока необходим для подтверждения, как это будет показано далее.
  • Данные. Этот блок может быть точно равен 512 байтам во всех сообщениях DATA, исключая последний блок, который может быть между 0 и 511 байтами. Блок, не равный 512 байтам, используется как сигнал о том, что отправитель послал все данные. Другими словами, он применяется как индикатор конца файла. Если случается, что данные в файле точно кратны 512 байтам, отправитель должен послать дополнительный блок из нулевых байтов, чтобы показать конец обмена. Данные могут быть переданы либо в NVT ASCII (netascii), либо двоичными октетами (octet).
  • ACK

    Сообщение "подтверждение" ( acknowledge — ACK ) используется клиентом или сервером для подтверждения приема блока данных. Это сообщение имеет длину только 4 байта. Его формат показан на рисунок 13.14

    (рис 13.14) Формат "подтверждение"

    Сообщение ACK имеет следующие поля:

  • OpCode. Первое поле — двухбайтный код операции. Для ACK имеет значение 4.
  • Block number. Следующее двухбайтовое поле, содержащее номер полученного блока.
  • Сообщение "подтверждение" может также быть откликом на "запрос на запись". Оно посылается сервером, чтобы указать, что он готов к приему данных от клиента. В этом случае значение поля номера блока равно 0. Пример сообщения "подтверждение" приведен в последнем разделе.

    ERROR

    Сообщение "ошибка" ( ERROR ) используется клиентом или сервером, когда соединение не может быть установлено или когда во время передачи данных имеется ошибка. Оно может быть послано во время активной фазы передачи. Сообщение "ошибка" не применяется для объявления повреждения или дублирования сообщения. Эта проблема решается механизмом контроля ошибок, обсуждаемым позднее в этой лекции. Формат сообщения "ошибка" показан на рисунок 13.15

    (рис 13.15) Формат "ошибка"

    Формат "ошибка" имеет следующие поля:

  • OpCode. Первое поле — двухбайтовый код операции. Его значение для сообщения "ошибка" — 5.
  • Номер ошибки. Двухбайтовое поле, определяющее тип ошибки. В таблице 13.8 показаны номера ошибок и их соответствующий смысл.
    Номера ошибок и их смысл
    Номер Смысл
    0 Не определено
    1 Файл не найден
    2 Нарушение доступа
    3 Диск полный или превышена квота на диске
    4 Неразрешенная операция
    5 Неизвестный номер порта
    6 Файл уже существует
    7 Нет такого пользователя
  • Данные ошибки. Это поле переменной длины, содержащее текстуальные ошибки данных и заканчивающееся однобайтовым полем из нулей.
  • Соединение

    TFTP пользуется UDP-сервисом (протокол передачи дейтаграмм). Поскольку в UDP не обеспечивается установление соединения и его завершение, UDP передает каждый блок данных, вставляя его в независимые пользовательские дейтаграммы. Однако в TFTP желательно предавать только один блок данных, а не пересылать файл как независимые блоки. Нам надо установить соединение для блоков данных, осуществляющих передачу всех принадлежащих тому же самому файлу. TFTP использует сообщения RRQ, WRQ, ACK и ERROR для установления соединения. Он применяет сообщение DATA с блоком данных менее чем 512 байт (0-511) для окончания соединения.

    Установление соединения

    Установление соединения для чтения файла отличается от установления соединения для записи файлов ( рисунок 13.16).

    (рис 13.16) Установление соединения
  • Чтение. Чтобы установить соединение для чтения, клиент TFTP посылает сообщение RRQ. Имя файла и режим передачи определяется в этом сообщении. Если сервер может передавать файл, он отвечает положительно сообщением DATA, содержащим первый блок данных. Если имеются проблемы, такие как трудности в открытии файла или ограничения в разрешении, сервер отвечает негативно посылкой сообщения ERROR.
  • Запись. Чтобы установить соединение для записи, клиент TFTP использует сообщение WRQ. Имя файла и режим передачи определяется в этом сообщении. Если сервер может принять копию файла, он отвечает положительно сообщением ACK, используя значение 0 для блока данных. Если имеются проблемы, сервер отвечает негативно посылкой сообщения ERROR.
  • Завершение соединения

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

    Передача данных

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

    Файл разделяется на блоки данных, в которых каждый блок, исключая последний, содержит точно 512 байтов. Последний блок должен быть между 0 и 511 битами. TFTP может передавать данные в ASCII или двоичном формате.

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

    Управление потоками

    TFTP посылает блоки данных, используя сообщение DATA, и ожидает сообщение ACK. Если отправитель получает сигналы подтверждения прежде, чем сработал таймер (time-out), он посылает следующий блок. Таким образом, управление потоком – это продвижение нумерации блоков данных и ожидание ACK, прежде чем послан следующий блок данных.

    Извлечение файла

    Когда клиент хочет извлечь (читать) файл, он посылает сообщение RRQ. Сервер отвечает сообщением DATA, посылающим первый блок данных c номером блока (если нет проблем).

    Накопление файла

    Когда клиент хочет накопить (записать) файл, он посылает сообщение WRQ. Сервер отвечает сообщением ACK (если нет проблем) c номером блока 1.

    Контроль ошибок

    TFTP-механизм контроля над ошибками отличается от других протоколов. Он симметричный — это означает, что отправитель и получатель оба используют тайм-аут. Отправитель применяет его для сообщений данных; получатель — для подтверждения сообщений. Если сообщение данных потеряно, отправитель повторяет его после истечения тайм-аута. Если подтверждение потеряно, получатель повторяет его после истечения тайм-аута. Эта гарантирует нормальную работу.

    Поврежденное сообщение

    При этом нет никаких отрицательных подтверждений. Если блок данных поврежден, это обнаруживается приемником и блок удаляется. Передатчик ожидает подтверждение и не получает его в период тайм-аута. Блок посылается опять. Заметим, что в сообщении DATA при TFTP нет поля контрольной суммы. Приемник может обнаружить искажение только одним путем: через поле контрольной суммы в пользовательской дейтаграмме UDP.

    Потеря сообщения

    Если блок потерян, он никогда не достигнет приемника, и не будет послано подтверждение. Передатчик повторяет блок после тайм-аута.

    Потеря подтверждения

    Если потеряно подтверждение, возможны две ситуации. Если таймер приемника сработает раньше таймера передатчика, приемник повторит подтверждение; в другом случае передатчик повторит данные.

    Дублирование сообщения

    Дублирование блока может быть обнаружено приемником по номеру блока. Если блок дублирован, он просто удаляется приемником.

    "Ошибка ученика волшебника"

    Хотя контроль потока и ошибок в TFTP симметричен, он может привести к так называемой "ошибке ученика волшебника". Представьте себе карикатурный персонаж, который, неосторожно используя волшебство, вызывает метлу, которая непрерывно копирует сама себя. Это случается, если сообщение ACK не теряется, но задерживается. В этой ситуации каждый успешный блок посылает двойное или более подтверждение и получает удвоенную информацию.

    Рисунок 13.17 показывает проблему. Подтверждение для пятого блока задерживается. Затем истекает тайм-аут, передатчик повторно передает пятый блок, который будет подтвержден передатчиком опять. Передатчик получает два подтверждения для пятого блока, которые запускают посылку шестого блока дважды. Приемник получает седьмой блок дважды и опять посылает два подтверждения, как результат посылки седьмого блока дважды. И так далее.

    (рис 13.17) "Ошибка ученика волшебника"

    TFTP-опции

    Было предложено расширение к протоколу TFTP, которое позволяло дополнительные опции к сообщениям RRQ и WRQ. Опция главным образом используется для того, чтобы договориться о размере блока и, возможно, о начальной последовательности чисел. Без этой опции размер блока равен 512 байт, за исключением последнего блока. Договор может определить размер блока с любым числом байт и такую длину сообщения, которое может быть вставлено в пользовательскую дейтаграмму UDP.

    Новый тип сообщения, "опция подтверждения" ( OACK- option acknowledgment ), нужен для того, чтобы позволить другой стороне принять или отклонить предложенные опции.

    Безопасность

    Одно важное замечание о TFTP – это то, что он не обеспечивает безопасности. В нем нет ни идентификатора пользователя, ни его пароля. Однако сегодня такие предосторожности должны быть предприняты, чтобы препятствовать хакерам обращаться к файлам. Одна из мер защиты должна ограничить доступ TFTP к некритическим файлам. Другой путь для дополнения секретности – это использование прикладных программ, таких как TELNET, в сочетании с TFTP. Пользователь должен вначале получить доступ к TELNET; TELNET проверяет, имеет ли пользователь право на доступ к системе и к соответствующему файлу. Затем он вызывает TFTP клиента и передает имя файла клиенту. Далее клиент осуществляет соединение TFTP к серверу TFTP на пользовательский сайт ( Рисунок 13.18).

    (рис 13.18) Использование TELNET в сочетании с TFTP для обеспечения безопасности

    Заметим, что в этом процессе пользователь работает с TFTP-процессом сервера, а удаленный сайт работает с процессом клиента. Также заметим, что действия, выполняемые пользователем, резервированы: если пользователь захочет читать файл, удаленный сайт использует операцию "записать"; если пользователь хочет записать файл, удаленный сайт теперь использует операцию "читать".

    Приложения

    TFTP очень полезен для передачи основных файлов, где безопасность не является главным элементом. Он может быть использован для инициализации устройств, таких как "мост" или маршрутизатор. Его главное применение — согласование с протоколами BOOTP или DHCP. TFTP требует небольшого объема памяти и использует только службу UDP и IP. Он может просто конфигурировать память только для чтения (ROM) (или программируемую память PROM). Когда станция включена, TFTP будет подключен к серверу и станция может быть загружена файлом конфигурации от сервера по протоколам BOOTP (или DHCP).

    Краткие итоги

  • Протокол передачи файлов (File Transfer Protocol – FTP) – это приложение клиент-сервер протокола TCP/IP для копирования файлов из одного хоста к другому.
  • FTP требует двух соединений для передачи данных: соединение управления и соединение данных.
  • FTP использует NVT ASCII для связи между непохожими системами.
  • Перед активной передачей файла клиентом определяется тип файла, структура данных и режим передачи.
  • Имеется шесть классов команд, посылаемых клиентом для установления связи с сервером:
  • Команды доступа.
  • Команды управления файлом.
  • Команды определения порта.
  • Команды передачи файла.
  • Прочие команды.
  • Отклики посылаются от сервера к клиенту в течение установления соединения.
  • Имеются три типа файлов для передачи:
  • Файл, копированный от сервера к клиенту.
  • Файл, копированный от клиента к серверу.
  • Список директорий или имена файлов, посылаемые от сервера к клиенту.
  • Большинство операционных систем обеспечивают дружественный пользователю интерфейс между FTP и пользователем.
  • Анонимный FTP обеспечивает метод для общедоступного доступа к файлу на удаленных сайтах.
  • Тривиальный протокол передачи файла (Trivial File Transfer Protocol – TFTP) – это простой протокол FTP без многих используемых возможностей.
  • Клиент использует услуги TFTP, чтобы извлечь копию файла или послать копию файла сервера.
  • Имеется пять типов сообщений TFTP:
  • RRQ – это сообщение клиента, которое устанавливает соединение для чтения данных от сервера.
  • WRQ – это сообщение клиента, которое устанавливает соединение для записи данных в сервер.
  • DATA – это сообщение клиента или сервера, которое посылает блоки данных.
  • ACK – подтверждает прием блока данных.
  • ERROR – сообщение, отражающее проблемы соединения или передачи.
  • TFTP – это приложение, которое использует UDP-протокол передачи дейтаграмм для своего транспортного уровня.
  • TFTP использует RRQ, WRQ, ACK и ERROR для установления соединения. Сообщение DATA с блоком данных менее чем 512 байтов завершает соединение.
  • Каждое сообщение DATA, за исключением последнего, переносит 512 байт данных файла.
  • TFTP использует для управления потоком протокол "остановись и жди".
  • Контроль ошибок осуществляется в четырех ситуациях: поврежденное сообщение, потерянное сообщение, потерянное подтверждение или дублирование сообщения.
  • TFTP выполняет симметричную передачу, при этом и приемник, и передатчик используют тайм-аут для обработки ошибок.
  • "Ошибка ученика волшебника" — это удвоение подтверждения и сообщений данных, которая случается при TFTP-механизме контроля за потоком и ошибками.
  • Существуют расширения для TFTP-протокола, позволяющие предложить опции размеров блока данных.
  • TFTP не имеет механизма обеспечения безопасности. Вторая прикладная программа, такая как TELNET, может использоваться совместно с TFTP для обеспечения безопасности.
  • TFTP может быть использован совместно с BOOTP или DHCP для инициализации устройств при загрузке файлов конфигурации.
  • Задачи и упражнения

  • Объясните, что произойдет, если соединение управления будет нарушено в течение работы FTP.
  • Объясните, почему клиент использует пассивное открытие при соединении для сигнализации и пассивное открытие при соединении для передачи данных.
  • Почему нужны ограничения при анонимной передаче FTP? Что мог бы сделать недобросовестный пользователь?
  • Объясните, почему FTP не имеет формата сообщения.
  • Покажите один сегмент TCP, который переносит одну команду FTP.
  • Покажите один сегмент TCP, который переносит один отклик FTP.
  • Покажите один сегмент TCP, который переносит данные FTP.
  • Объясните, что случится, если файл в примере 2 уже существует.
  • Повторите Пример1, используя команду PASV вместо команды PORT.
  • Повторите Пример 2, используя команду STOU вместо команды STOR, для накопления файла с уникальным именем. Что случится, если файл с таким же именем уже существует?
  • ПовторитеПример 2, используя команду RETR вместо команды STOR, для запуска файла.
  • Приведите пример использования команды HELP. Используйте формат Примера 1.
  • Приведите пример использования команды NOOP. Используйте формат Примера 1.
  • Приведите пример использования команды SYST. Используйте формат Примера 1.
  • Пользователь хочет создать директорию под именем Feb в директории /usr/users/letters. Имя хоста "SUT.ru". Покажите команды и отклики, используя Примеры 1 и 2 как подсказку.
  • Пользователь хочет переместить директорию. Имя хоста "SUT.ru". Покажите команды и отклики, используя Примеры 1 и 2 как подсказку.
  • Пользователь хочет переместить файл с именем file1 из директории /usr/users/report в директорию /usr/users/letters. Имя хоста "SUT.ru". Покажите команды и отклики, используя Примеры 1 и 2 как подсказку.
  • Пользователь хочет запустить EBCDIC-файл с именем file1 из директории /usr/users/report. Имя хоста "SUT.ru". Файл большой и пользователь хочет сжать его до передачи. Покажите команды и отклики, используя Примеры 1 и 2 как подсказку.
  • Почему нужны сообщения RRQ, WRQ в FTP, но не нужны в TFTP?
  • Покажите инкапсуляцию сообщения RRQ в пользовательскую дейтаграмму UDP. Имя файла "Report" и используется ASCII. Каков размер дейтаграммы UDP?
  • Покажите инкапсуляцию сообщения WRQ в пользовательскую дейтаграмму UDP. Имя файла "Report" и используется ASCII. Каков размер дейтаграммы UDP?
  • Покажите инкапсуляцию сообщения передачи данных TFTP, переносящих блок 7, в пользовательскую дейтаграмму UDP. Каков общий размер дейтаграммы UDP?
  • Хост A используется TFTP для чтения 2 150 байт данных из хоста B. Покажите команды TFTP, включая команды, которые необходимы для установления и завершения соединения. Предполагаем, что ошибки отсутствуют.
  • Покажите все пользовательские дейтаграммы при обмене двух хостов в Упражнении 23.
  • Повторите Упражнение 23 в предположении, что второй блок принят с ошибкой.
  • Покажите все пользовательские дейтаграммы при обмене двух хостов в Упражнении 25.
  • Дополнительный материал для прохождения тестирования к лекции, Вы можете скачать здесь.

    Вернуться к учебному плану