RFC: 1123
Оригинал: Requirements for Internet Hosts - Application and Support
Категория: Стандарт Интернета
Дата публикации:
Автор:
Перевод: Николай Малых
4.1.3.4. Механизм FTP Restart

В описании отклика 110 на стр. 40-41 RFC 959 допущена ошибка, исправленная здесь. Сообщение restart reply, передаваемое через управляющее соединение от принимающего FTP клиенту FTP, имеет формат:

110 MARK ssss = rrrr

где:

  • ssss — текстовая строка, которая появляется в Restart Marker в потоке данных и кодирует позицию в файловой системе отправителя;
  • rrrr — кодирует соответствующую позицию в файловой системе получателя.

Кодирование зависит от используемой ОС и сетевой реализации и всегда генерируется и интерпретируется одной и той же системой (отправителем или получателем).

Когда FTP, реализующий рестарт, получает Restart Marker в потоке данных, рекомендуется форсировать запись данных до этой точки на стабильную среду для кодирования соответствующей позиции rrrr. Для FTP, передающего Restart Markers, не допускается предположение о возврате откликов 110 синхронно с данными (т. е., следует дождаться отклика 110 перед продолжением передачи данных).

Для сообщений об ошибках при рестарте передачи определяются два новых кода:

  • 554 Requested action not taken: invalid REST parameter.
  • Отклик 554 может быть результатом сервисной команды FTP, которой следует за командой REST. Отклик показывает, что существующий файл на сервере FTP невозможно репозиционировать в соответствии с командой REST.
  • 555 Requested action not taken: type or stru mismatch.
  • Отклик 555 может быть результатом команды APPE или любой сервисной команды FTP, за которой следует команда REST. Этот код говорит о рассогласовании между текущими параметрами передачи (type и stru) и атрибутами существующего файла.
  • Обсуждение
  • Отметим, что механизм FTP Restart требует использования режима Block или Compressed для передачи данных, чтобы обеспечивалась возможность включения маркеров Restart Marker в поток данных. Частота передачи маркеров может быть достаточно низкой.

    Restart Marker отмечает место в потоке данных, но получатель может выполнять некоторые преобразования данных при их сохранении в стабильной среде. В общем случае кодирование на приемной стороне должно включать любую информацию о состоянии, которая может потребоваться для возобновления передачи с любой точки потока данных FTP. Например, при передачах TYPE A некоторые принимающие хосты преобразуют последовательности CR LF в один символ LF при записи файла на диск. Если Restart Marker попадает между CR и LF, принимающая сторона должна указать в rrrr, что передача должна возобновляться в состоянии "CR has been seen and discarded" (получен и отброшен символ возврата каретки).

    Отметим, что Restart Marker требуется обозначать как строку печатных символов ASCII, независимо от типа данных.

    RFC 959 говорит, что информация о возобновлении (restart information) будет возвращаться пользователю. Это высказывание не следует понимать буквально. В общем случае клиенту FTP следует сохранять информацию о возобновлении (ssss,rrrr) на стабильной среде (например, дописывать ее в файл управления возобновлением передачи). Пустое поле управления рестартом следует создавать при начале передачи и автоматически удалять после ее успешного завершения. Предполагается, что им такого файла будет связано с именем передаваемого файла и удаленного хоста (по типу имен для резервных копий редактируемых файлов в текстовых редакторах).

    Возможны три варианта рестарта FTP:

    1. Передача от пользователя к серверу

      Клиент FTP помещает маркеры Restart <ssss> в подходящие места потока данных. Когда сервер FTP получает маркер, он записывает все предшествующие данные на диск, кодируя позицию в своей файловой системе и состояние преобразования как rrrr, после чего возвращает отклик "110 MARK ssss = rrrr" через управляющее соединение. Клиент FTP дописывает (append) пару (ssss,rrrr) в свой файл управления возобновлением передачи.

      Для возобновления передачи FTP-клиент делает выборку последней пары (ssss,rrrr) из своего управляющего файла, меняет позицию в своей файловой системе и состояние, используя значение ssss, после чего передает серверу команду "REST rrrr".

    2. Передача от сервера к пользователю

      Сервер FTP помещает маркеры Restart <ssss> у подходящие места потока данных. Когда клиент FTP получает маркер, он записывает все предшествующие данные на диск, кодируя позицию в своей файловой системе и состояние преобразования как rrrr, после чего дописывает пару (rrrr,ssss) в свой файл управления передачей.

      Для возобновления передачи FTP-клиент делает выборку последней пары (ssss,rrrr) из своего управляющего файла, меняет позицию в своей файловой системе и состояние, используя значение ssss, после чего передает серверу команду "REST ssss".

    3. Передача от сервера к серверу ("Third-Party")

      Передающий сервер помещает маркеры Restart <ssss> у подходящие места потока данных. Когда принимающий сервер получает маркер, он записывает все предшествующие данные на диск, кодируя позицию в своей файловой системе и состояние преобразования как rrrr, после чего возвращает отклик "110 MARK ssss = rrrr" через управляющее соединение. Клиент FTP дописывает (append) пару (ssss,rrrr) в свой файл управления возобновлением передачи.

      Для возобновления передачи FTP-клиент делает выборку последней пары (ssss,rrrr) из своего управляющего файла и отправляет сообщение "REST ssss" передающему серверу FTP и "REST rrrr" — принимающему серверу FTP.

2007 - 2017 © Русские переводы RFC, IETF, ISOC.