Читаем Linux API. Исчерпывающее руководство полностью

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

57.12. Выбор между TCP и UDP

Учитывая, что протокол TCP, в отличие от UDP, обеспечивает надежную доставку данных, встает вопрос: «Для чего вообще может понадобиться UDP?» Ответ на него частично дается в главе 22 книги [Stevens et al., 2004]. Здесь же мы кратко рассмотрим некоторые факторы, способные склонить выбор в пользу UDP.

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

• Протокол UDP может демонстрировать более высокую производительность при обмене простыми запросами и ответами, так как не требует установки и разрыва соединений. В приложении А книги [Stevens, 1996] отмечается, что в идеальной ситуации время обмена пакетами по протоколу TCP равно

2 * RTT + SPT

где RTT — время прохождения пакета туда-обратно (уходит на отправку запроса и получение ответа), а SPT — время, за которое сервер обрабатывает запрос (в глобальных сетях значение SPT может быть значительно меньше, чем RTT). В случае с протоколом UDP идеальный сценарий обмена пакетами выглядит как

RTT + SPT

Это на одно RTT меньше, чем при использовании TCP. Величина RTT между узлами, находящимися на большом расстоянии друг от друга (то есть на разных континентах) или разделенными большим количеством промежуточных маршрутизаторов, может достигать десятков секунд. Данное обстоятельство может сделать протокол UDP довольно привлекательным для некоторых видов сетевого взаимодействия. Хорошим примером может служить система DNS, позволяющая находить IP-адрес путем передачи между серверами всего лишь по одному пакету в каждом направлении.

• UDP-сокеты поддерживают широковещательную и многоадресную передачу данных. Широковещательная передача позволяет отправить датаграмму всем узлам, подключенным к сети, используя один и тот же порт. Многоадресная работает похожим образом, но позволяет передать датаграмму определенному набору узлов. Больше подробностей можно найти в главах 21 и 22 книги [Stevens et al., 2004].

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

Приложение, использующее UDP, но притом требующее определенного уровня надежности, должно само следить за доставкой данных. Обычно для этого применяются как минимум порядковые номера, подтверждение, повторная передача потерянных пакетов и обнаружение дублирования. Пример реализации такого подхода продемонстрирован в книге [Stevens et al., 2004]. Но если в вашем случае требуются более продвинутые возможности, такие как управление потоком и перегрузкой, то вам, вероятно, лучше воспользоваться протоколом TCP. Реализовать все эти функции поверх UDP будет непросто, и даже если у вас получится, вряд ли результат превзойдет протокол TCP.

57.13. Продвинутые возможности

Сокеты UNIX- и интернет-доменов поддерживают множество других возможностей, на которых мы не станем останавливаться подробно в этой книге. Часть из них будет кратко рассмотрена в данном разделе. Больше подробностей см. в книге [Stevens et al., 2004].

57.13.1. Внеканальные данные

Внеканальные данные — функция потоковых сокетов, которая позволяет отправителю назначать передаваемым пакетам высокий приоритет; то есть принимающая сторона может получить уведомление о наличии таких пакетов без необходимости читать все промежуточные данные в потоке. Эта возможность используется в таких программах, как elnet, rlogin и ftp, позволяя им отменять ранее переданные команды. Для отправки и получения внеканальных данных вызовам send() и recv() нужно указать флаг MSG_OOB. Когда сокет получает уведомление о наличии таких данных, ядро генерирует для его владельца (обычно это процесс, применяющий сокет) сигнал SIGURG, как при операции F_SETOWN для вызова fcntl().

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных