Если при работе в пассивном режиме мы установим для параметра 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 для его загрузки
Теперь вы можете понять, почему я вначале говорил о «странном» поведении.
Надеюсь, это поможет!