При работе в пассивном режиме, если мы установим pasv_max_port на 10100 и pasv_min_port на 10090. Означает ли это, что сервер VSFTP может обслуживать только 10 клиентов одновременно?
Можно ли задать один и тот же номер порта для pasv_max_port и pasv_min_port? Если возможно, сколько клиентов может обрабатывать сервер VSFTP одновременно? Только один?
решение1
Для упрощения, я бы сказал да, и именно так это и следует рассматривать (по моему мнению).
Ограничение диапазона портов ограничит одновременные клиентские соединения в соответствии с количеством портов, которые у вас есть между мин. и макс. Таким образом, вы избежите странного поведения.
Но, на самом деле, это неправда и требует модерации :-)
Если говорить более подробно и конкретно:ограничение портов влияет на одновременное использование канала данных.
Обратите внимание, что для нового запроса на подключение необходим доступный канал передачи данных.
Я не знаю обо всех командах FTP, которые используют канал данных, но в основном для команд upload (STOR)
, download (RETR)
, list (LIST)
требуется канал данных.
Чтобы проиллюстрировать это, я только что провел тест в лабораторных условиях (который вы можете воспроизвести) с моим сервером vsftpd и следующими настройками:
pasv_max_port=10100
pasv_min_port=10100
1. Первый тест:
- Я подключаюсь к Client1: ok
- Я подключаюсь к Client2, пока Client1 все еще подключен: ok
- Я подключаюсь к Client3, пока Client1 и Client2 все еще подключены: ok
Почему ?
- Клиенту 2 удалось подключиться, поскольку Клиент 1 ничего не делал (простаивал) и не использовал канал передачи данных, поэтому сервер назначил порт Клиенту 2.
- Клиенту 3 удалось подключиться, поскольку Клиент 1 и Клиент 2 бездействовали и не использовали канал передачи данных, поэтому сервер назначил порт Клиенту 3.
2. Второй тест:
- Я подключаюсь к Client1 и начинаю загрузку файла: ok, идет загрузка файла
- Я подключаюсь к Client2, пока загрузка Client1 все еще выполняется: ОШИБКА, не удается подключиться
- Я жду окончания загрузки Client1
- После завершения загрузки Client1 я смог подключиться к Client2.
Почему ?
- Поскольку Клиент1 использовал канал данных для загрузки, Клиент2 не смог подключиться, поскольку на стороне сервера не было больше доступных портов для его обслуживания.
- После завершения загрузки Client1 сервер освободил порт канала данных, и Client2 смог использовать его для подключения.
3. Третий тест:
- Я подключаюсь к Client1: ok
- Я подключаюсь к Client2, пока Client1 все еще подключен: ok
- Я начинаю загрузку на ftp-сервер с Client1: ok, идет загрузка
- Я начинаю загрузку на ftp-сервер с Client2, пока загрузка с Client1 все еще выполняется: ОШИБКА соединение закрыто сервером. Передача не удалась.
Почему ?
Смесь теста 1 и теста 2:
- Клиенту 2 удалось подключиться, поскольку Клиент 1 ничего не делал (простаивал) и не использовал канал передачи данных, поэтому сервер назначил порт Клиенту 2.
- Клиент 1 может загрузить файл, поскольку Клиент 2 бездействует, поэтому сервер назначил порт Клиенту 1 для его загрузки.
- Клиент 2 не может загрузить файл, так как порт передачи данных уже используется Клиентом 1 для его загрузки.
Теперь вы понимаете, почему я говорил о «странном» поведении в начале.
Надеюсь, это поможет!