Первоначальное обоснование этого было так, чтобы вы могли:
- Продолжайте отправлять и получать управляющую инструкцию по управляющему соединению во время передачи данных.
- Активировать одновременно несколько подключений к данным.
- Сервер решает, когда он будет готов отправить вам данные.
Правда, они могли бы достичь того же результата, указав сложный протокол мультиплексирования, интегрированный в протокол FTP, но поскольку в то время NAT не создавал проблем, они решили использовать уже существующие порты TCP.
Вот пример:
Алиса хочет два файла от Боба. Алиса подключается к порту Боба 21 и запрашивает файлы. Боб откроет соединения с портом Алисы 20, когда он будет готов, и отправит туда файлы. Тем временем Чарльзу нужен файл на сервере Алисы. Чарльз подключается к 21 на Алисе и просит файл. Алиса подключается к порту 20 на Чарльзе, когда готово, и отправляет файлы.
Как видите, порт 21 предназначен для подключения клиентов к серверам, а порт 20 - для серверов, подключающихся к клиентам, но эти клиенты могут по-прежнему обслуживать файлы в 21.
Оба порта служат совершенно разным целям, и опять же для простоты они решили использовать два разных порта вместо реализации протокола согласования.