Каково назначение портов?

Каково назначение портов?

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

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

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

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

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

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

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

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

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

решение1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Связанный контент