Вот так протокол FTP был разработан для работы в пассивном режиме. Вероятно, это была не очень хорошая идея, так как я не думаю, что эта модель когда-либо повторялась снова в каком-либо другом протоколе (и это даже больше относится к активному режиму FTP).
На порту подключения к данным нет протокола. Все, что знает сервер - единственное, что несет какую-либо информацию в этом соединении - это номер порта, к которому вы подключаетесь.
Если бы вы каждый раз подключались к одному и тому же порту, сервер не смог бы определить, к какому файлу вы подключаетесь. Номер порта служит связующим звеном между запросом на передачу для управляющего соединения и соединением для передачи данных - номер порта содержится в ответе на PASV
команду.
Если два клиента будут запрашивать передачу одновременно, когда сервер принимает подключение к одному порту, сервер не сможет определить, какой файл передать. Конечно, сервер может использовать IP-адрес клиента для принятия решения (на самом деле многие FTP-серверы проверяют, что IP-адрес клиента совпадает с IP-адресом, используемым в контрольном соединении, для безопасности).
Но это не будет работать для:
- Несколько подключений с одного компьютера (большинство FTP-клиентов поддерживают параллельные передачи / очереди, и вы можете запустить несколько разных FTP-клиентов на одном компьютере);
- Соединение с разных машин в одной (корпоративной) сети, так как у них один и тот же внешний IP.
Частично скопировано из моего ответа на вопрос: почему в пассивном режиме FTP требуется диапазон портов, а не только один порт? Ошибка сервера.