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

Количество подключений VSFTP в пассивном режиме

Если при работе в пассивном режиме мы установим для параметра pasv_max_port значение 10100, а для параметра pasv_min_port значение 10090. Означает ли это, что сервер VSFTP может одновременно обслуживать только 10 клиентов?

Можем ли мы установить один и тот же номер порта для pasv_max_port и pasv_min_port? Если возможно, сколько клиентов может обрабатывать VSFTP-сервер одновременно? Только один?

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

Ограничение диапазона портов будет ограничивать одновременные подключения клиентов в соответствии с количеством имеющихся портов от min до max. Таким образом вы избежите странного поведения.

Но на самом деле это неправда и требует модерации :-)

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

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

Я не знаю обо всех командах FTP, которые используют канал данных, но в основном загружают (STOR), скачать (RETR), список (LIST) командам нужен канал данных.


Чтобы проиллюстрировать это, я только что провел лабораторный тест (который вы можете воспроизвести) с моим сервером vsftpd и следующими настройками:

pasv_max_port=10100
pasv_min_port=10100

1. Первый тест:

  • Я подключаюсь к Client1: ок
  • Я подключаюсь к Client2, пока Client1 все еще подключен: хорошо
  • Я подключаюсь к Client3, пока Client1 и Client2 все еще подключены: хорошо

Зачем ?

  • Client2 смог подключиться, потому что Client1 ничего не делал (бездействовал) и не использовал канал данных, поэтому сервер назначил порт для Client2.
  • Client3 смог подключиться, потому что Client1 и Client2 бездействовали и не использовали канал данных, поэтому сервер назначил порт для Client3.

2. Второй тест:

  • Я подключаюсь к Client1 и начинаю загружать файл: хорошо, идет загрузка файла
  • Я подключаюсь к Client2 во время загрузки Client1: ERROR не удается подключиться
  • Я жду завершения загрузки Client1
  • После завершения загрузки Client1 я смог подключиться к Client2.

Зачем ?

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

3. Третий тест:

  • Я подключаюсь к Client1: ок
  • Я подключаюсь к Client2, пока Client1 все еще подключен: хорошо
  • Я начинаю загрузку на ftp-сервер из Client1: идет загрузка
  • Я начинаю загрузку на ftp-сервер из Client2, пока идет загрузка Client1: ERROR соединение закрыто сервером. Трансфер не удался.

Зачем ?

Смесь теста 1 и теста 2:

  • Client2 смог подключиться, потому что Client1 ничего не делал (бездействовал) и не использовал канал данных, поэтому сервер назначил порт для Client2.
  • Client1 может загрузить файл, потому что Client2 простаивает, поэтому сервер назначил порт Client1 для его загрузки.
  • Client2 не может загрузить файл, потому что порт передачи данных уже используется Client1 для его загрузки

Теперь вы можете понять, почему я вначале говорил о «странном» поведении.

Надеюсь, это поможет!