4

У меня есть несколько вопросов относительно следующего объяснения портов, которые я нашел.

Уровень приложений взаимодействует с транспортным уровнем через порт. Порты пронумерованы, и стандартные приложения всегда используют один и тот же порт.

Использование номера порта позволяет транспортному протоколу (обычно TCP) знать, какой тип содержимого находится внутри пакета, что позволяет ему на приемной стороне сообщить, в какой протокол приложения он должен доставлять полученные данные.

  • Почему номер порта используется для определения типа протокола данных приложения, если нет абсолютной гарантии?

    Насколько я понимаю, нет никаких ограничений на то, какие данные приложения вы отправляете через порт (это всего лишь предложение). Плюс, данные протокола уже не включены где-то в пакет для этой цели?

  • Кроме того, что происходит с данными, если вы отправляете HTTP или какой-либо другой протокол в пункт назначения 25 (который ожидает SMTP)?

  • В-третьих, что происходит с данными, если вы отправляете их на порт, который не связан ни с одной программой и, следовательно, не прослушивается?

  • ** Наконец, если порт может быть привязан только к одной программе, как могут одновременно работать несколько программ, которые зависят от входящих данных HTTP, на моем компьютере?****

Заранее спасибо!

1 ответ1

15

Почему номер порта используется для определения типа протокола данных приложения, если нет абсолютной гарантии?

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

Насколько я понимаю, нет никаких ограничений на то, какие данные приложения вы отправляете через порт (это всего лишь предложение).

Правильный. На самом деле, это даже не предложение, а соглашение, которое многие люди разделяют.

Плюс, данные протокола уже не включены где-то в пакет для этой цели?

Нет. По крайней мере, не на том уровне, который обычно указывает порт: вы знаете, какой тип протокола IP более высокого уровня отправляется (например, TCP, UDP), но не знаете, что это за содержимое (например, HTTP, SMTP).

Кроме того, что происходит с данными, если вы отправляете HTTP или какой-либо другой протокол в пункт назначения 25 (который ожидает SMTP)?

TCP просто передает данные на прикладной уровень, который может делать с ним все, что захочет. В большинстве случаев вы просто получаете ошибки. Иногда вы получаете дыры в безопасности.

Время от времени вы получаете хорошее поведение для некорректных клиентов, например, ошибки HTTP в виде простого текста, которые выдаются некоторыми HTTPS-серверами, когда вы не используете SSL для порта.

В-третьих, что происходит с данными, если вы отправляете их на порт, который не связан ни с одной программой и, следовательно, не прослушивается?

Вы получаете сообщение об ошибке ICMP от принимающей системы. Технически, приемник может делать все, что угодно, но на практике это то, что происходит.

Наконец, если порт может быть привязан только к одной программе, как на моем компьютере могут одновременно работать несколько программ, которые зависят от входящих HTTP-данных?

Когда ваш браузер устанавливает HTTP-соединение с удаленным сервером, он использует случайный локальный порт и обращается к общеизвестному порту (80 или 443) на удаленном сервере. В этом случае уникальный для каждого отдельного исходящего соединения. (Хотя, технически, это не должно быть, как в случае с сервером.)

На стороне сервера, когда вы слушаете, только один процесс может принимать новые соединения через порт (в сокетах Unix / BSD), но он может передавать установленное соединение другим процессам для обслуживания. Поскольку набор уникален, трафик может быть направлен на правильное соединение.

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