Я получил этот вопрос на собеседовании и понятия не имел, что ответить. Может кто-нибудь, пожалуйста, помогите мне понять это?
Почему протокол telnet использует только 1 порт, а протокол FTP использует 2 порта на сервере?
Я получил этот вопрос на собеседовании и понятия не имел, что ответить. Может кто-нибудь, пожалуйста, помогите мне понять это?
Почему протокол telnet использует только 1 порт, а протокол FTP использует 2 порта на сервере?
Как уже отмечалось, 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) --------------
FTP использует командный канал и канал данных, поэтому необходимы два соединения. Telnet подключается только к одному порту - тому, который вы ему сообщаете.
Смотрите этот раздел на странице Википедии для получения дополнительной информации
Telnet использует только один порт, потому что он устанавливает только один двунаправленный поток данных между клиентом и сервером: данные с клавиатуры клиента (или stdin) на сервер и данные с сервера на экран клиента (или stdout). Нет необходимости отправлять какую-либо информацию о "контроле" или "статусе". Ваш клиент подключается к серверу telnet, и с этого момента telnet эмулирует трехпроводной кабель (данные Tx, данные Rx и земля) между последовательным портом компьютера и последовательным терминалом. После этого ваш клиент не имеет возможности отправлять какие-либо команды или другую "внешнюю" информацию на сервер telnet, а также не нуждается в этом - поэтому нет необходимости в отдельном канале связи, который бы предоставил порт secodnd. Единственная "управляющая информация", которая когда-либо передается, - это когда клиент отключается - и уведомление о разъединении автоматически обрабатывается TCP.
FTP должен обмениваться данными и протоколом команд и ответов между клиентом и сервером. Дизайнеры решили использовать разные порты для этих двух функций. Это облегчает некоторые аспекты программирования, особенно в старых операционных системах, которые также не поддерживают многопоточность или асинхронный ввод-вывод. Например, вы можете отправлять или получать информацию об управлении и статусе во время получения или отправки файловых данных, и с точки зрения программы потоку "управления" не нужно ждать завершения буфера для данных. msgstr "поток перед отправкой или получением собственного буфера.
Тем не мение! Разработчики ftp могли бы сделать это по-другому. Они могли бы использовать только один порт. Они могли бы добавить байт или около того в начало каждого фрагмента данных файла, или команды, или ответа, который бы сообщал другому концу "это блок данных" или «это идет к пути команда / ответ». Это немного усложняет программирование и исключает независимое чтение и запись в два потока. Но основные функции ftp могли быть выполнены только с одним портом.
И telnet мог бы использовать второй порт - хотя с ограниченной функциональностью telnet я не представляю, для чего. Может быть, один порт для каждого направления ... или, может быть, чисто реализовать отправку "перерыв".
Итак, один в конечном итоге правильный, но, вероятно, бесполезный ответ: «потому что люди, которые их написали, реализовали именно так».