Вопрос о номерах портов в компьютерных сетях - PullRequest
2 голосов
/ 19 декабря 2010

Насколько я понимаю, номера портов похожи на телефонные номера. Так же, как коммутатор бизнес-телефона может использовать основной номер телефона и назначать каждому сотруднику добавочный номер (например, x100, x101 и т. Д.), Так и компьютер имеет основной адрес и набор номеров портов для обработки входящих и исходящих соединений. 1001 *

Но вопрос в следующем:

  • На каком основании назначается номер порта? Процесс или приложение?

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

И еще один вопрос, связанный с портом.

Если веб-сервер настроен на прослушивание через порт 80, клиентский браузер должен всегда связываться с портом 80. Я не уверен в правильности следующей иллюстрации связи между веб-браузером и веб-сервером.

  • Клиентский браузер отправил запрос на сервер, сообщение должно содержать следующую информацию:

    Кому: <адрес сервера: 80>

    От:

  • Сервер отправил ответ клиентскому браузеру следующим образом:

    Кому:

    От: <адрес сервера: 80>

Итак, вопрос в том, выберет ли сервер другие номера портов для отправки сообщений клиенту? Потому что я думаю, что один порт 80 выглядит недостаточно.

Add - 1 - 21:16 2010/12/19

В моем посте выше слово " application " представляет статическую программу file , которую знает система. Можно запустить несколько экземпляров этого приложения, которые являются несколькими " процессов "

Ответы [ 6 ]

3 голосов
/ 19 декабря 2010

Каждое клиентское соединение будет представлено сокетом на сервере. Сокеты однозначно представлены комбинацией следующих 4 частей информации:

  • Одноранговый IP-адрес
  • Одноранговый порт
  • Локальный IP-адрес
  • Локальный порт

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

Если на одном сервере запущено несколько приложений веб-сервера, им придется прослушивать разные порты или серверу нужно иметь несколько IP-адресов.

1 голос
/ 19 декабря 2010

На компьютере только один процесс может прослушивать определенный номер порта. Например, если процесс Apache прослушивает порт 80, никакое другое приложение также не может прослушивать порт 80.

Apache обычно предварительно разветвляет несколько процессов, только один из них прослушивает порт 80. Задача этого процесса - передать обработку для любого соединения одному из пула других процессов Apache так же быстро и эффективно, как и он. может.

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


(Edit)

Я был почти уверен, что веб-серверы прослушивают один процесс (или поток), который принимает входящие соединения и передает соответствующие файловые дескрипторы рабочим процессам (или потокам). EJP сообщает, что это не так.

Кажется, что в Apache есть несколько различных модулей многопроцессорной обработки , которые влияют на то, как он распределяет нагрузку по ответу на несколько одновременных запросов. Например: MPM Prefork и MPM Worker

Джефф Позканер написал обзор дизайна HTTP-сервера, который мне показался интересным:

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

Второе поколение веб-серверов решило эту проблему, отбрасывая дочерний процесс для каждого запроса. ...

Небольшой вариант сервера этого типа использует «облегченные процессы» или «потоки» вместо полноценных процессов Unix. ...

Третье поколение серверов называется «предварительная разветвленность». Вместо запуска нового подпроцесса для каждого запроса у них есть пул подпроцессов, которые они хранят и используют повторно. ...

Четвертое поколение. Только один процесс. Нет непереносимых потоков / LWP. Одновременно отправляет несколько файлов, используя неблокирующий ввод / вывод, вызывая select () / poll () / kqueue (), чтобы узнать, какие из них готовы для получения дополнительных данных. ...

0 голосов
/ 20 декабря 2010

будет ли сервер выбирать другой порт номера для отправки сообщений на клиент

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

0 голосов
/ 19 декабря 2010

Я не уверен, что вы подразумеваете под разницей между «процессом» и «приложением». Все это просто выполнение кода на вашем компьютере.

В любом случае, процесс / приложение будет прослушивать / привязывать к любому номеру порта, настроенному авторами приложения. По соглашению, многие номера портов зарезервированы для определенных типов приложений, то есть приложений, которые обмениваются данными с использованием определенного протокола. Например, веб-серверы, использующие HTTP, обычно работают на порту 80. SMTP-серверы работают на порту 22. HTTPS - 443 и т. Д.

Конечно, вы можете настроить свой веб-сервер (например, apache httpd) на работу с любым портом, который вам нравится, но ваш клиент должен знать, иначе он примет порт 80.

Два процесса / приложения могут не связываться с одним и тем же портом. Если вы попытаетесь запустить другой процесс / приложение на порту, который уже используется, вы получите сообщение об ошибке: невозможно привязать порт или что-то в этом роде.

0 голосов
/ 19 декабря 2010

Что такое приложение, если это не процесс?В брандмауэрах вы открываете порты для исполняемых файлов.Его можно рассматривать как приложение, и это процесс, когда он выполняется.

Несколько слушателей не могут прослушивать один и тот же порт. Один и тот же процесс может прослушивать несколько портов.*

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

0 голосов
/ 19 декабря 2010

Сетевой стек различает TCP-соединения тройнымпоэтому для правильной работы достаточно знать адрес и порт клиента.

...