Назад | Перейти на главную страницу

В чем разница между активным и пассивным FTP?

В чем разница между активным и пассивным FTP?

примечание: я думаю, что это было бы полезно в качестве вопроса сообщества вики. Кроме того, я надеюсь, что кто-то сможет дать четкий и лаконичный ответ вроде этого вопроса: Как работает подсети IPv4?

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

В активном режиме клиент устанавливает командный канал (с порта клиента X на порт сервера 21(б)), но сервер устанавливает канал данных (с порта сервера 20(б) в клиентский порт Y, где Y поставляется клиентом).

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

Пассивный режим обычно используется в ситуациях, когда FTP-сервер не может установить канал данных. Одна из основных причин этого - сетевые брандмауэры. Хотя у вас может быть правило брандмауэра, которое позволяет вам открывать каналы FTP для ftp.microsoft.com, Серверы Microsoft могут не иметь возможности открыть канал данных обратно через ваш брандмауэр.

Пассивный режим решает эту проблему, открывая оба типа каналов со стороны клиента. Чтобы прояснить это, надеюсь:

Активный режим:

  • Клиент открывает командный канал с клиентского порта 2000(а) на порт сервера 21(б).
  • Клиент отправляет PORT 2001(а) к серверу и серверу подтверждается по командному каналу.
  • Сервер открывает канал данных с порта сервера 20(б) на клиентский порт 2001(а).
  • Клиент подтверждает по каналу данных.

Пассивный режим:

  • Клиент открывает командный канал с клиентского порта 2000(а) на порт сервера 21(б).
  • Клиент отправляет PASV к серверу по командному каналу.
  • Сервер отправляет обратно (по командному каналу) PORT 1234(а) после начала прослушивания этого порта.
  • Клиент открывает канал данных от клиента 2001(а) на порт сервера 1234(а).
  • Сервер подтверждает по каналу данных.

На этом этапе открыты каналы команд и данных.


(а)Обратите внимание, что выбор портов на стороне клиента зависит от клиента, так как выбор порта канала данных сервера в пассивном режиме остается за сервером.

(б)Также обратите внимание, что использование портов 20 и 21 является условным (хотя и строгим). Абсолютного требования об использовании этих портов нет, хотя и клиент, и сервер должны согласовать, какие порты используются. Я видел реализации, которые пытаются спрятаться от клиентов, используя разные порты (на мой взгляд, бесполезно).

Оригинальный ответ от переполнение стека