2.10. Номера портов TCP и параллельные серверы

2.10. Номера портов TCP и параллельные серверы

Представим себе параллельный сервер, основной цикл которого порождает дочерний процесс для обработки каждого нового соединения. Что случится, если дочерний процесс будет продолжать использовать заранее известный номер порта при обслуживании длительного запроса? Давайте проанализируем типичную последовательность. Пусть сервер запускается на узле freebsd, поддерживающем множественную адресацию (IP-адреса 12.106.32.254 и 192.168.42.1), и выполняет пассивное открытие, используя свой заранее известный номер порта (в данном примере 21). Теперь он ожидает запрос клиента. Эта ситуация изображена на рис. 2.11.

Рис. 2.11. Сервер TCP с пассивным открытием на порте 21

Мы используем обозначение (*:21,*:*) для указания пары сокетов сервера. Сервер ожидает запроса соединения на любом локальном интерфейсе (первая звездочка) на порт 21. Удаленный IP-адрес и удаленный порт не определены, поэтому мы обозначаем их как *.*. Такая структура называется прослушиваемым сокетом (listening socket).

ПРИМЕЧАНИЕ

Мы отделяем IP-адрес от номера порта символом «:», потому что это обозначение используется в HTTP и часто встречается в других местах. Программа netstat отделяет номер порта от IP-адреса точкой, но иногда это приводит к затруднениям, потому что точки используются как в доменных именах (freebsd.unpbook.com.21), так и в записи IPv4 (12.106.32.254.21).

Когда мы обозначаем звездочкой локальный IP-адрес, такое обозначение называется универсальным адресом, а звездочка — символом подстановки (wildcard). Если узел, на котором запущен сервер, поддерживает множественную адресацию (как в нашем примере), сервер может указать, что он хочет принимать входящие соединения, которые приходят только для одного определенного локального интерфейса. Сервер должен выбрать либо один определенный интерфейс, либо принимать запросы от всех интерфейсов, то есть сервер не может задать список, состоящий из нескольких адресов. Локальный адрес, заданный с помощью символа подстановки, соответствует выбору произвольного адреса из определенного множества. В листинге 1.5 перед вызовом функции bind произвольный IP-адрес в структуре адреса сокета задан с помощью константы INADDR_ANY.

Через некоторое время на узле с IP-адресом 206.168.112.219 запускается клиент и выполняет активное открытие соединения с IP-адресом сервера 12.106.32.254. В этом примере мы считаем, что динамически назначаемый порт, выбранный клиентом TCP, — это порт 1500, что отражено на рис. 2.12. Под клиентом мы показываем его пару сокетов.

Рис. 2.12. Запрос на соединение от клиента к серверу

Когда сервер получает и принимает соединение клиента, он с помощью функции fork создает свою копию, давая возможность дочернему процессу обработать запрос клиента, как показано на рис. 2.13 (функцию fork мы описываем в разделе 4.7).

Рис. 2.13. Параллельный сервер, дочерний процесс которого обрабатывает запрос клиента

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

При выполнении следующего шага предполагается, что другой клиентский процесс на клиентском узле запрашивает соединение с тем же сервером. Код TCP клиента задает новому сокету клиента неиспользованный номер динамически назначаемого порта, скажем 1501. Мы получаем сценарий, представленный на рис. 2.14. На сервере различаются два соединения: пара сокетов для первого соединения отличается от пары сокетов для второго соединения, поскольку TCP клиента выбирает неиспользованный порт (1501) для второго соединения.

Рис. 2.14. Второе соединение клиента с тем же сервером

Из этого примера видно, что TCP не может демультиплексировать входящие сегменты, просматривая только номера портов назначения. TCP должен обращать внимание на все четыре элемента в паре сокетов, чтобы определить, какая конечная точка получает приходящий сегмент. На рис. 2.14 представлены три сокета с одним и тем же локальным портом (21). Если сегмент приходит с IP- адреса 206.168.112.219, порт 1500 и предназначен для IP-адреса 12.106.32.254, порт 21, он доставляется первому дочернему процессу. Если сегмент приходит с IP- адреса 206.168.112.219, порт 1501 и предназначен для IP-адреса 12.106.32.254, порт 21, он доставляется второму дочернему процессу. Все другие сегменты TCP, предназначенные для порта 21, доставляются исходному серверу с прослушиваемым сокетом.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Параллельные подсостояния

Из книги Самоучитель UML автора Леоненков Александр

Параллельные подсостояния Параллельные подсостояния (concurrent substates) позволяют специфицировать два и более подавтомата, которые могут выполняться параллельно внутри составного события. Каждый из подавтоматов занимает некоторую область (регион) внутри составного


ТЕМА НОМЕРА: Серверы

Из книги Журнал «Компьютерра» № 12 от 28 марта 2006 года автора Журнал «Компьютерра»

ТЕМА НОМЕРА: Серверы Автор: Сергей ОзеровНесмотря на «потребительскую» направленность выставки, на ней была представлена практически вся IT-индустрия, включая и такие бесконечно далекие от простого пользователя вещи, как «настоящие» серверы, профессиональное сетевое


Повторитель портов

Из книги Работа на ноутбуке автора Садовский Алексей

Повторитель портов Повторитель портов – удобный аксессуар для ноутбуков. На нем выведены дополнительные разъемы, что позволяет подключить больше внешних устройств. У многих ноутбуков есть разъем, к которому можно подсоединить повторитель.Представим ситуацию: вы


Параллельные иерархии

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Параллельные иерархии Чтобы не оставить камня на камне, рассмотрим вариант примера SKIER с двумя параллельными иерархиями. Это позволит нам смоделировать ситуацию, уже встречавшуюся на практике: TWO_ WAY_LIST > LINKED_LIST и BI_LINKABLE > LINKABLE; или иерархию с телефонной службой


4.9. Последовательные и параллельные серверы

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

4.9. Последовательные и параллельные серверы Сервер в нашем простом примере из предыдущего раздела являлся последовательным сервером (iterative server). Он последовательно обрабатывал запросы клиентов, переходя к следующему только после полного завершения работы с предыдущим.


Сканеры портов

Из книги 500 лучших программ для Windows автора Уваров Сергей Сергеевич

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


Отображение портов

Из книги Сетевые средства Linux автора Смит Родерик В.

Отображение портов Большинство серверов TCP/IP принимают обращения от клиентов через порт с определенным номером. Так, например, сервер, реализующий протокол SMTP (Simple Mail Transfer Protocol — простой протокол передачи почты), использует при работе порт 25, а Web-сервер, поддерживающий


Перенаправление портов

Из книги OrCAD PSpice. Анализ электрических цепей автора Кеоун Дж.

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


Параллельные резонансные цепи

Из книги Самоучитель Skype. Бесплатная связь через Интернет автора Яковлева Е. С.

Параллельные резонансные цепи Уравнения для анализа параллельной резонансной цепи значительно сложнее уравнений для последовательного колебательного контура. Можно найти полное описание этих уравнений в учебниках. Однако моделирование на PSpice позволяет легко


Проверка USB-портов

Из книги Инфобизнес на полную мощность [Удвоение продаж] автора Парабеллум Андрей Алексеевич

Проверка USB-портов USB (Universal Serial Bus, универсальная последовательная шина) служит для подключения многочисленных периферийных устройств к компьютеру.При работе с программой Skype может понадобиться различное оборудование, подключаемое с помощью USB-портов, как например:?


Параллельные тренинги

Из книги Ноутбук для начинающих. Мобильно, доступно, удобно автора Ковалевский Анатолий Юрьевич


Репликатор портов

Из книги Linux глазами хакера автора Флёнов Михаил Евгеньевич

Репликатор портов Репликатор портов (секционный модуль, повторитель портов) – более простой вариант док-станции. Необходимо заметить, что очень часто путают одно с другим, и нефирменные док-станции по сути своей – лишь репликаторы портов. Например, Mobility Electronics и Targus


10.7.2. Сканирование портов

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

10.7.2. Сканирование портов В разд. 1.1 мы говорили о том, что на начальном этапе взлома компьютера хакер должен получить как можно больше сведений о жертве. Средством сбора первичной информации является сканирование портов. Делать это с собственного компьютера опасно,


2.9. Номера портов

Из книги автора

2.9. Номера портов В любой момент времени каждый транспортный протокол (UDP, TCP, SCRIPT) может использоваться несколькими процессами. Все три протокола различают эти процессы при помощи 16-разрядных целых чисел — номеров портов (port numbers).Когда клиент хочет соединиться с сервером,


4.8. Параллельные серверы

Из книги автора

4.8. Параллельные серверы Сервер, представленный в листинге 4.2, является последовательным (итеративным) сервером. Для такого простого сервера, как сервер времени и даты, это допустимо. Но когда обработка запроса клиента занимает больше времени, мы не можем связывать один


22.7. Параллельные серверы UDP

Из книги автора

22.7. Параллельные серверы UDP Большинство серверов UDP являются последовательными (iterative): сервер ждет запрос клиента, считывает запрос, обрабатывает его, отправляет обратно ответ и затем ждет следующий клиентский запрос. Но когда обработка запроса клиента занимает