1

Я получил этот вопрос на собеседовании и понятия не имел, что ответить. Может кто-нибудь, пожалуйста, помогите мне понять это?

Почему протокол telnet использует только 1 порт, а протокол FTP использует 2 порта на сервере?

4 ответа4

4

Как уже отмечалось, telnet использует только 1 порт в качестве интерактивного / терминального использования. Ftp настроил два канала связи - контроль и данные. Это означает, что канал данных не зависит от управляющих [интерактивных] связей. Более того, канал управления использует Telnet proto (RFC):

The Relationship between FTP and Telnet:

         The FTP uses the Telnet protocol on the control connection.

Вот хороший пример того, как из связанной сигнализации (отдельные каналы) можно использовать для оптимизации каналов связи (также из RFC):

В другой ситуации пользователь может пожелать передавать файлы между двумя хостами, ни один из которых не является локальным хостом. Пользователь устанавливает управляющие соединения с двумя серверами, а затем организует соединение для передачи данных между ними. Таким образом, управляющая информация передается в пользовательский PI, но данные передаются между процессами передачи данных на сервере. Ниже приводится модель этого взаимодействия сервера с сервером.

                Control     ------------   Control
                ---------->| User-FTP |<-----------
                |          | User-PI  |           |
                |          |   "C"    |           |
                V          ------------           V
        --------------                        --------------
        | Server-FTP |   Data Connection      | Server-FTP |
        |    "A"     |<---------------------->|    "B"     |
        -------------- Port (A)      Port (B) --------------
1

FTP использует командный канал и канал данных, поэтому необходимы два соединения. Telnet подключается только к одному порту - тому, который вы ему сообщаете.

Смотрите этот раздел на странице Википедии для получения дополнительной информации

1

Telnet использует только один порт, потому что он устанавливает только один двунаправленный поток данных между клиентом и сервером: данные с клавиатуры клиента (или stdin) на сервер и данные с сервера на экран клиента (или stdout). Нет необходимости отправлять какую-либо информацию о "контроле" или "статусе". Ваш клиент подключается к серверу telnet, и с этого момента telnet эмулирует трехпроводной кабель (данные Tx, данные Rx и земля) между последовательным портом компьютера и последовательным терминалом. После этого ваш клиент не имеет возможности отправлять какие-либо команды или другую "внешнюю" информацию на сервер telnet, а также не нуждается в этом - поэтому нет необходимости в отдельном канале связи, который бы предоставил порт secodnd. Единственная "управляющая информация", которая когда-либо передается, - это когда клиент отключается - и уведомление о разъединении автоматически обрабатывается TCP.

FTP должен обмениваться данными и протоколом команд и ответов между клиентом и сервером. Дизайнеры решили использовать разные порты для этих двух функций. Это облегчает некоторые аспекты программирования, особенно в старых операционных системах, которые также не поддерживают многопоточность или асинхронный ввод-вывод. Например, вы можете отправлять или получать информацию об управлении и статусе во время получения или отправки файловых данных, и с точки зрения программы потоку "управления" не нужно ждать завершения буфера для данных. msgstr "поток перед отправкой или получением собственного буфера.

Тем не мение! Разработчики ftp могли бы сделать это по-другому. Они могли бы использовать только один порт. Они могли бы добавить байт или около того в начало каждого фрагмента данных файла, или команды, или ответа, который бы сообщал другому концу "это блок данных" или «это идет к пути команда / ответ». Это немного усложняет программирование и исключает независимое чтение и запись в два потока. Но основные функции ftp могли быть выполнены только с одним портом.

И telnet мог бы использовать второй порт - хотя с ограниченной функциональностью telnet я не представляю, для чего. Может быть, один порт для каждого направления ... или, может быть, чисто реализовать отправку "перерыв".

Итак, один в конечном итоге правильный, но, вероятно, бесполезный ответ: «потому что люди, которые их написали, реализовали именно так».

-2

Протокол Ftp использует 2 порта 20 и 21, порт 20 предназначен для управления, а порт 21 - для передачи данных, а telnet использует только порт 23 для взаимодействия с терминалом.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .