Вопрос в заголовке. Причина, по которой меня это интересует, заключается в том, что я кодирую службу TCP и хотел бы изучить некоторые из причин, поскольку они могут пролить свет на мою работу.
Я ожидаю, что использование другого порта упрощает обработку отдельного ожидаемого соединения для передачи данных, которое будет иметь формат, отличный от контрольного соединения. Я считаю, что это позволит получателю просто начать обработку данных без необходимости проверять, было ли это инициированием соединения, как это необходимо было бы сделать, если бы он использовал порт 21.
Это позволит последнему примеру маркера принтера с переводом строки начать получать текст для печати. Однако я не уверен, как это на самом деле использовалось тогда (программа на терминале перенаправляла порт 20 на свой принтер с переводом строки, потому что мог быть демон FTP, уже прослушивающий 21?)
Что касается того, почему другое соединение, есть три основных причины:
Эффективность передачи - важный фактор, влияющий на полезность FTP. Передача файлов может быть очень дорогой (с точки зрения процессорного времени) и медленной (в реальном времени), если используется несоответствующая стратегия передачи (например, несоответствующий размер байта). Следует сделать все возможное, чтобы оптимизировать передачу данных. Хорошей стратегией может быть разрешение передачи файлов через отдельное соединение или закрытие и повторное открытие соединений (возможно, используя другой размер байта).
[4] Мы рассмотрели возможность использования двух полнодуплексных каналов, один для управления
информация, другой для данных. Использование отдельной контрольной ссылки
между взаимодействующими процессами упростит прерывание, ошибка
восстановление и синхронизация.
Было бы желательно изменить FTP, чтобы разрешить отправку данных в указанный сокет в указанном режиме и типе. Тогда пользователи TIP сочтут удобным получить список своих файлов на высокоскоростном линейном принтере, ввести свои файлы с устройства чтения карт и сохранить резервную копию на картах или магнитных лентах.
Основной причиной может быть чрезмерная инженерия.
Одно (не часто используемое) преимущество разделенных соединений управления / данных заключается в том, что клиент может начать передачу между двумя серверами без необходимости передачи данных через клиента.
Излишняя инженерия - не случай. Он был спроектирован таким образом, что разрешены разные режимы работы. Активный FTP в настоящее время используется редко, поскольку в этом режиме сервер подключается к клиенту. Но тогда, в 80-е, это работало неплохо. В настоящее время пассивный FTP очень полезен за межсетевыми экранами, в этом режиме клиент подключается к портам, открытым сервером; клиенты обычно больше не доступны напрямую, потому что перед ними установлен брандмауэр / NAT / устройство. Так что этот режим тоже имеет смысл.
В статье в Википедии есть хорошая подробная информация: http://en.wikipedia.org/wiki/FTP
FTP использует один порт для передачи данных (20), а другой - для отправки команд (21), GET, DIR, PUT и т. Д.
Более подробное объяснение можно найти здесь: http://slacksite.com/other/ftp.html
HTH!