Главная страница

Программирование в сетях Windows. Э. Джонс, Д. Оланд


Скачать 2.88 Mb.
НазваниеЭ. Джонс, Д. Оланд
АнкорПрограммирование в сетях Windows.pdf
Дата12.10.2017
Размер2.88 Mb.
Формат файлаpdf
Имя файлаПрограммирование в сетях Windows.pdf
ТипКнига
#9346
страница31 из 50
1   ...   27   28   29   30   31   32   33   34   ...   50
Параметр IP_MULTICAST_IF
Этот параметр задает IP-интерфейс, с которого рассылаются данные Обыч- но маршрут (не в случае многоадресной рассылки) для интерфейса, с кото- рого отправляется дейтаграмма, задает таблица маршрутов Система сама оп- ределяет наилучший интерфейс для конкретной дейтаграммы и ее направ- ления Впрочем, поскольку групповые адреса могут быть использованы кем угодно, таблицы маршрутов не достаточно Про1 раммист должен знать, куда направляются данные Конечно, это необходимо, только если компьютер, на который отправляются данные рассылки, подключен к нескольким сетям через несколько сетевых адаптеров В этом случае параметр optval содержит адрес локального интерфейса, на который надо отправлять данные рассыл- ки
DWORD dwlnterface,
dwlnterface = inet_addr( 129 121 32 19"),
if (setsockopt(s, IPPROTO.IP, IP_MULTICAST_IF, (char *)&dwlnterface,
sizeof(DWORD)) == SOCKET.ERROR)
{
// Ошибка
}
В этом примере мы задали для локального интерфейса адрес 129 121 32 19
Любые данные, отправленные на сокет 5, передаются с сетевого интерфей- са, которому назначен этот IP-адрес
ATM не требует отдельного параметра сокета для задания интерфейса
Можно явно привязать c r o o t к конкретному интерфейсу перед вызовом
WSAJomLeaf Аналогично, клиент должен быть связан с конкретным АТМ-ин- терфейсом, чтобы ожидать приглашения, вызывая accept или WSAAccept
Параметр IP_MULTICAST_LOOP
Последний параметр определяет, будет ли приложение получать данные соб- ственной рассылки Если приложение присоединяется к многоадресной груп- пе и отправляет данные в группу, оно тоже получит эти данные Если в ходе от- правки данных есть ожидающий выполнения вызов recvjrom, он вернет копию
Данных Заметьте для отправки данных в многоадресную группу не нужно при- соединять к ней приложение Это требуется, только если вы хотите получать
Данные, адресованные группе Параметр сокета 1PJAULT1CASTJJDOP предназ- начен для отключения эха данных на локальный интерфейс В качестве пара-

3 4 2 ЧАСТЬ II Интерфейс прикладного программирования Winsock метра optval передайте целое число, которое является логическим значением и определяет, включить или отключить петлю ф int optval,
го
optval = 0 , // Отключение петли я*
if (setsockopt(s, IPPROTO_IP, IP_MULTICAST_LOOP, (char *)&optval, "V
sizeof(int)) == SOCKET.ERROR) m,
{ i
II Ошибка
}
Те же функции выполняет ioctl-команда SIO_MULTIPOINT_LOOPBACK вме-
сте с WSAIoctl или toctlsocket К сожалению, этот параметр сокета не реали- зован в Windows 95, Windows 98 и Windows NT 4 и по умолчанию петля включена Если вы попытаетесь отключить ее таким способом, вернется ошибка WSAENOPROTOOPT
По определению корневой узел ATM — единственный, которому разре- шено отправлять данные в многоадресную группу, — не будет получать свои собственные данные, так как корневой сокет не является листовым, а полу- чать данные многоадресной рассылки в сети ATM могут только листовые сокеты Тот же процесс, который создает c_root, может создать и отдельный узел c_leaf, который c_root затем пригласит Впрочем, это будет «искусствен- ная» петля
Ограничение многоадресной рассылки _,
при удаленном доступе
При попытке отправить или получить данные рассылки через интерфейс
службы удаленного доступа (Remote Access Service, RAS) вы можете столк- нуться с одним ограничением Фактически оно связано с сервером, к кото- рому вы подключаетесь Большинство Windows-серверов удаленного досту- па работают под управлением Windows NT 4, в которой нет IGMP-прокси
Это означает, что любые запросы на присоединение к группе не вернутся от сервера Windows NT 4 В результате приложение не сможет подключиться к группе, а значит — отправлять или получать данные рассылки В RAS-серве- ре для Windows 2000 есть IGMP-прокси, хотя по умолчанию он выключен
Но после его включения удаленные клиенты будут подключаться к группам,
а также отправлять и получать многоадресные данные
Резюме
Многоадресная рассылка оптимизирует работу приложений, которым необ- ходимо поддерживать связь с множеством конечных точек без издержек, ха- рактерных для широковещания В этой главе мы дали определение многоад- ресной рассылке и рассмотрели ее модели Затем обсудили, как многоадрес- ная рассылка в сетях IP и ATM применяется к этим моделям И, наконец, оста- новились на том, как многоадресная рассылка реализуется в Winsock 1 через параметры сокетов и в Winsock 2 — с помощью функции WSAJoinLeaf

Г Л А В А 1 2
Качество обслуживания
С появлением разнообразных мультимедийных приложений и растущей по- пулярностью Интернета пропускная способность многих сетей снижается до критических отметок Эта проблема особо актуальна в сетях с общей сре- дой передачи, таких как Ethernet, поскольку в них весь трафик обрабатыва- ется одинаково, и даже одно приложение может переполнить сеть Качество
обслуживания (Quality of Service, QoS) — это набор компонентов, допуска- ющий дифференциацию и предпочтительную обработку данных в сети
QoS-совместимая сеть
Ш предотвращает злоупотребления сетевыми ресурсами со стороны неадап- тируемых протоколов (таких, как UDP),
Ш оптимально распределяет ресурсы между негарантированным (best- effort) трафиком, а также трафиком с высоким или низким приоритетом,
• резервирует ресурсы для правомочных пользователей,
И определяет очередность доступа к ресурсам для разных пользователей
Generic Quality of Service (GQoS) — это реализация QoS фирмой Microsoft
В настоящее время Microsoft поставляет QoS-совместимый поставщик TCP/IP
и UDP/IP в составе Windows 98 и Windows 2000 Протокол ATM также допус- кает использование службы QoS, поскольку она встроена в него изначально
В этой главе рассказывается о службе QoS и ее реализации на платфор- мах Win32 Будут рассмотрены компоненты, необходимые для предпочти- тельной обработки сетевого трафика Мы также покажем, как средствами
Winsock написать сетевое приложение, использующее преимущества этих компонентов для повышения скорости и резервирования пропускной спо- собности Большая часть главы посвящена службе QoS в IP-сетях, а последние разделы — немного отличающейся от нее QoS в АТМ-сетях
ПРИМЕЧАНИЕ На протяжении всей главы служба Quality of Service бу- дет называться QoS Предполагается, что обсуждается реализация QoS
от Microsoft
Введение
Для работы QoS требуются
устройства в сети, такие, как маршрутизаторы и коммутаторы, знако- мые с этой дифференциацией служб;

3 4 4 ЧАСТЬ II Интерфейс прикладного программирования Winsock
• локальные рабочие станции, способные определять приоритетность трафика, который они помещают в сеть;
• компоненты политики безопасности: кому и в каком размере разре- шено использовать имеющуюся пропускную способность.
Но прежде чем приступить к изучению этих компонентов, рассмотрим
протокол резервирования ресурсов (Resource Reservation Protocol, RSVP) —
сигнальный протокол, используемый для связи между QoS-отправителями и
QoS-приемниками.
Протокол RSVP
Протокол RSVP связывает воедино компоненты сети, приложения и парамет- ры политики безопасности. Он передает запросы резервирования ресурсов по сети, которая может состоять из различных сред передачи. RSVP переда- ет QoS-запросы пользователей всем сетевым устройствам, позволяя им ре- зервировать ресурсы. В результате узлы сети указывают, отвечает ли сеть нужному уровню обслуживания.
RSVP резервирует сетевые ресурсы, задавая сквозные потоки (flows) в сети. Поток — это сетевой путь, связанный с одним или несколькими отпра- вителями, одним или несколькими приемниками и определенным уровнем
QoS. Узел, отправляющий данные, которые нуждаются в определенном уров- не обслуживания, отправляет предполагаемому приемнику или приемникам сообщение PATH с требованиями к пропускной способности. Соответству- ющие параметры передаются по пути предполагаемым приемникам.
Принимающий узел, заинтересованный в этих данных, резервирует ре- сурсы для потока (и весь путь от отправителя), посылая отправителю сооб- щение RESV (резервировать). После этого промежуточные RSVP-устройства определяют, могут ли они выполнить требования к пропускной способнос- ти и имеет ли пользователь право запрашивать эти ресурсы. Если ответ в обоих случаях положительный, каждое из устройств резервирует ресурсы и передает отправителю сообщение RESV.
Когда отправитель получает сообщение RESV, начинается передача дан- ных QoS. Периодически каждая конечная точка внутри потока посылает со- общения PATH и RESV, чтобы подтвердить резервирование и получить сете- вую информацию об изменении пропускной способности. Периодическое обновление сообщений PATH и RESV также позволяет протоколу RSVP оста- ваться динамичным и «на лету» выявлять лучшие (например, более быстрые)
маршруты. При обсуждении Winsock далее в этой главе мы вернемся к RSVP
и рассмотрим, как вызовы API-функций Winsock его инициируют.
Заметьте: это одностороннее резервирование, даже если приложение за- прашивает пропускную способность и для передачи, и для приема. Один сеанс инициируется для требований передачи, другой — для требований приема.
Сетевые компоненты
Для работы QoS необходимо, чтобы сетевые устройства между двумя конеч-
ными точками различали приоритеты трафика. Тогда они смогут направлять

Г Л А В А 12 Качество обслуживания 345
трафик так, чтобы выполнялась гарантия QoS, полученная приложением.
Кроме того, эти сетевые устройства должны уметь определять, достаточна ли пропускная способность сети, когда приложение ее запрашивает. Это обес- печивают:
Ш 802.1р — стандарт, назначающий приоритет пакетов в подсети, путем за- дания трех битов внутри МАС-заголовка пакетов;
Ш IP-приоритет — метод задания очередности IP-пакетов;
Ш о п о в е щ е н и е на к а н а л ь н о м у р о в н е — механизм привязки RSVP-объек- тов к QoS-компонентам ГВС на втором уровне сетевой модели OSI;
Subnet Bandwidth Manager (SBM) — диспетчер, управляющий пропускной способностью в сети с общей средой передачи;
К Resource Reservation Protocol (RSVP) — протокол, передающий QoS- запросы и информацию QoS-совместимым сетевым устройствам по пути между отправителем и одним или несколькими приемниками.
Стандарт 802.1 р
Соблюдение гарантий QoS и неравноправная обработка пакетов возлагает- ся в основном на концентраторы и коммутаторы сети. Они находятся на канальном уровне модели OSI и располагают информацией о полях только внутри заголовка управления доступом к среде (media access control, MAC)
в начале каждого пакета.
802.1р — это стандарт, задающий очередность обработки пакетов путем присвоения трехбитного значения приоритета в заголовке MAC. Когда под- сеть сети, отличной от 802.1р, становится перегруженной, коммутаторы и маршрутизаторы не справляются с трафиком, и образуется задержка. В 802.1р- сетях коммутаторы и маршрутизаторы задают очередность входящего тра- фика, основываясь на битах приоритета, и в первую очередь обрабатывают пакеты с более высоким приоритетом.
Внедрение стандарта 802.1р для QoS требует специального оборудования,
способного распознавать это трехбитное поле: платы сетевого интерфей-
са (network interface card, NIC), сетевых драйверов и коммутаторов.
IP-приоритет
IP-приоритет — это метод определения значений приоритета на более вы- соком уровне, чем 802.1р. Он позволяет дифференцировать относительные приоритеты пакетов, проходящих через устройства сетевого уровня OSI (на- пример, маршрутизаторы). IP-приоритет реализует поле типа службы (type of service, TOS) внутри IP-заголовка, которое задает разные уровни приори- тета. На основании этих битов маршрутизаторы назначают очереди приори- тетов, в результате чего трафик более высокого приоритета обслуживается в первую очередь.
Как и в случае 802.1р, для работы IP-приоритета все устройства сетевого уровня в сети должны распознавать значения битов IP-приоритета и соот- ветствующим образом управлять трафиком.

3 4 6 ЧАСТЬ II Интерфейс прикладного программирования Winsock
Оповещение на канальном уровне
Оповещение на канальном уровне необходимо, когда трафик перемещает- ся по ГВС. Обычно ГВС связывает несколько сетей и таким образом по мере передачи данных управляет информацией на физическом, канальном и се- тевом уровнях. Для обеспечения сквозного QoS-соединения ГВС должна рас- познавать очередность трафика QoS. Для этого QoS обеспечивает привязку параметров RSVP и других параметров QoS к естественному для ГВС базово- му способу оповещения на канальном уровне, с помощью которого ГВС-тех- нологии реализуют свою собственную службу QoS.
Диспетчер SBM
Этот диспетчер управляет ресурсами в сети с общей средой передачи, напри- мер, в Ethernet, а также качеством обслуживания QoS-приложений. SBM не- обходим в таких сетях, поскольку когда конечная точка запрашивает QoS для приложения, каждое сетевое устройство принимает или отвергает запрос в зависимости от выделенных этому устройству частных ресурсов. Сетевые ус- тройства не знают о доступности ресурсов в общей среде передачи. SBM ре- шает эту проблему, становясь брокером для таких устройств. SBM также тес- но связан со службой управления допуском (Admission Control Service, ACS),
являющейся частью политики безопасности. SBM проверяет, имеет ли при- ложение (или пользователь) право запрашивать пропускную способность.
Заметьте: SBM для сети может быть узлом под управлением Windows 2000
Server.
Компоненты приложения
Рассмотрим, как локальная система задает очередность данных на основе уровней QoS, которые запросило приложение. Чтобы локальная система поддерживала QoS, необходимы:
поставщик службы GQoS — обращается к другим QoS-компонентам;
Я модуль управления трафиком (Traffic Control module, TC) — управ- ляет исходящим трафиком; включает классификатор пакетов (Generic
Packet Classifier), планировщик пакетов (Packet Scheduler) и формиров-
щик трафика (Packet Shaper);
Ш протокол р е з е р в и р о в а н и я ресурсов (Resource Reservation Pro-
tocol, RSVP) — протокол, вызываемый компонентом службы GQoS и пе- редающий по сети запрос на резервирование;
GQoS API — программный интерфейс для GQoS, такой как Winsock;
Traffic Control (TC) API — программный интерфейс для компонентов управления трафиком, регулирующий трафик на локальном узле.
Поставщик службы GQoS
Этот компонент влияет почти на все функции QoS: инициирует модуль ТС
и реализует, поддерживает и управляет оповещением RSVP для работы GQoS.

Г Л А В А 12 Качество обслуживания 347
Для поиска на узле QoS-совместимых поставщиков можно запросить ка- талог поставщика с помощью функции WSAEnumProtocols. Флаг совместимо- сти с QoS находится в структуре WSAPROTOCOLINFO, возвращаемой WSAE-
numProtocols, dwServiceFlagsl (флаг для проверки ХР1 _QOS_SUPPORTED).
Подробнее о WSAEnumProtocols — в главе 5.
Модуль ТС
Модуль ТС играет главную роль в QoS, поскольку задает приоритет пакетов как внутри, так и снаружи узла сети, на котором активизирован. Результаты этой предпочтительной обработки пакетов, проходящих через систему и сеть,
ощущаются по всей сети и напрямую влияют на характеристики QoS. Модуль
ТС реализуют Generic Packet Classifier, Packet Scheduler и Packet Shaper.
Классификатор пакетов Generic Packet Classifier (GPC). В его обя- занности входит классификация и задание очередности пакетов внутри се- тевых компонентов. GPC также задает приоритеты для таких задач, как вре- мя использования центрального процессора или передача в сети путем со- здания таблиц поиска и служб классификации в сетевом стеке. Это первый этап процесса задания очередности для сетевого трафика.
Планировщик пакетов Packet Scheduler определяет способ передачи данных, выполняя одну из ключевых функций QoS. Это модуль управления тра- фиком, регулирующий, сколько данных может получить приложение или по- ток. Планировщик использует схему задания очередности, предлагаемую GPC,
и обеспечивает разные уровни обслуживания для трафика разного приорите- та. Данные, которым GPC присвоил более высокий приоритет, обрабатывают- ся в первую очередь.
Формировщик трафика Packet Shaper регулирует передачу данных от потоков в сеть. Большинство приложений считывает и записывает дан- ные в виде пакетов. Между тем, многим QoS-приложениям необходима оп- ределенная скорость передачи данных. Формировщик планирует передачу данных в единицу времени, сглаживая нагрузку на сеть.
Интерфейс Traffic Control API
Этот интерфейс регулирует сетевой трафик на локальном узле и включает методы управления QoS-компонентами-. GPC, планировщиком и формиров- щиком. Некоторые функции Traffic Control выполняются неявно через вы- зовы к GQoS-совместимым функциям Winsock, которые обрабатывает по- ставщик службы GQoS. Впрочем, приложения, напрямую управляющие ком- понентами ТС, могут сделать это с помощью API-функций ТС, которые в этой книге не рассматриваются (подробности см. в Platform SDK). API-функции
Winsock GQoS мы рассмотрим далее в этой главе.
Компоненты политики безопасности
Этот третий и последний компонент GQoS управляет выделением ресурсов
QoS-совместимым приложениям. Компоненты политики безопасности наибо- лее интересны системным администраторам, которые полномочны выделять

3 4 8 ЧАСТЬ II Интерфейс прикладного программирования Winsock ресурсы, в том числе пропускную способность, конкретным пользователям или определенным приложениям Среди этих компонентов
Ш служба управления допуском (Admission Control Service, ACS)
служба Windows 2000 Server, перехватывающая RSVP-сообщения PATH и
RESV для управления доступом QoS-совместимых клиентов к разным уровням гарантий, предоставляемых средствами QoS,
К модуль локальной политики (Local Policy Module, LPM) — управля- ет доступом к ресурсам на основе политик, заданных в ACS для SBM,
Ш элемент политики (Policy Element, PE) — располагается на клиенте и выдает аутентификационную информацию для запросов на резервиро- вание
Служба ACS
Эта служба регулирует использование сети QoS-совместимыми приложени- ями посредством RSVP-протокола ACS перехватывает сообщения PATH и
RESV, чтобы проверить, имеет ли запрашивающее приложение достаточные привилегии После перехвата RSVP-сообщение передается модулю LPM, вы- полняющему аутентификацию
ACS располагается на компьютере с Windows 2000 и настраивается систем- ным администратором, который задает ограничения ресурсов для пользова- телей, приложений или групп
и
Модуль локальной политики безопасности
;
После перехвата RSVP-сообщения и добавления информации о пользовате- ле ACS передает их модулю LPM LPM ищет запись о пользователе в Active
Directory, проверяя сведения Если сетевые ресурсы доступны (как определил
SBM) и аутентификация пройдена успешно, сообщение RSVP, перехваченное
ACS, пересылается далее Если пользователь не имеет прав на запрос опреде- ленного уровня QoS, генерируется указывающая на это ошибка, которая воз- вращается внутри RSVP-сообщения
ПРИМЕЧАНИЕ Учетные записи пользователей должны быть частью домена Windows 2000
Элемент политики
РЕ фактически содержит сведения о политике безопасности, которые зап- рашивает модуль LPM Эти структуры данных не рассматриваются в нашей книге, поскольку в основном имеют отношение к администрированию се- тевых ресурсов
QoS и Winsock
Для программного доступа к QoS из приложений применяется Winsock 2
Прежде всего мы рассмотрим структуры QoS верхнего уровня, необходимые большинству вызовов Winsock, затем — функции Winsock, вызывающие QoS

Г Л А В А 12 Качество обслуживания
349
на сокете, и завершение QoS, активизированного на сокете После этого об- судим объекты, которые можно использовать для управления работой по- ставщика службы QoS или возвращения информации от него
Переход от обсуждения основных структур QoS к функциям QoS и обрат- но к структурам, относящимся к поставщику, может показаться нелогичным
И все же перед тем как рассмотреть работу поставщика, мы хотим подроб- но объяснить, как основные структуры взаимодействуют с API-вызовами
Winsock
Структуры QoS
Структура QoS — основа программирования QoS Она состоит из
Ш структуры FLOWSPEC, описывающей уровни QoS, используемые прило- жением отдельно для передачи и для приема данных,
Ж буфера поставщика службы, содержащего характеристики QoS для данного поставщика
Структура QOS ,^
Структура QOS задает параметры QoS для передачи и приема трафика t
t Н
typedef struct _QualityOfService
{
FLOWSPEC SendingFlowspec,
FLOWSPEC ReceivingFlowspec,
WSABUF ProviderSpecific,
} QOS, FAR . LPQOS,
Структуры FLOWSPEC определяют характеристики и требования для каж- дого направления трафика Поле ProviderSpecific используется для возвраще- ния информации и для изменения рабочих параметров QoS
Структура FLOWSPEC
FLOWSPEC — основная структура, описывающая отдельный поток (напом- ним поток описывает данные, перемещаемые в одном направлении)
typedef struct _flowspec
i
ULONG
ULONG
ULONG
ULONG
ULONG
TokenRate,
TokenBucketSize;
PeakBandwidth,
Latency,
DelayVariation,
SERVICETYPE ServiceType,
ULONG
ULONG
} FLOWSPEC, *
MaxSduSize,
MimmumPolicedSize,
PFLOWSPEC, FAR «LPFLOWSPEC;

3 5 0 ЧАСТЬ II Интерфейс прикладного программирования Winsock
Рассмотрим каждое из полей структуры FLOWSPEC
Поле TokenRate задает скорость передачи данных в байтах в секунду
Если по какой-то причине скорость передачи снижается, приложение может накопить дополнительные блоки данных (token), чтобы передать их позже
Количество таких блоков ограничивается значением PeakBandwidth, а накоп- ление самих блоков (так называемая корзина блоков) — значением поля
TokenBucketSize Это суммарное ограничение позволяет избежать появления неактивных потоков, которые накопили слишком много данных если бы они вдруг выдали в сеть собранные данные, емкость канала связи была бы исчер- пана Для управления трафиком и соблюдения целостности ресурсов сете- вых устройств потокам разрешено накапливать данные (на скорости Token-
Rate) только до значения своего поля TokenBucketSize Кроме того, < пакетные >
передачи разрешены только в объемах, ограниченных значением PeakBan-
dwidth
Управление трафиком поддерживается за счет того, что потоки не могут отправлять слишком много данных за один раз, а целостность ресурсов се- тевых устройств — за счет того, что такие устройства запасают пакеты с вы- соким приоритетом
Из-за этих ограничений приложение может начать передачу, только если накоплено достаточно данных Иначе приложение либо ожидает поступления дополнительной информации, либо полностью отбрасывает данные Модуль
ТС определяет, что происходит с данными, слишком долго ожидающими пе- редачи Поэтому приложение должно следить, чтобы значение поля TokenRate
было разумным Если приложение не требует планирования скорости пере- дачи, этому полю можно присвоить значение QOSJ4OT SPECIFIED (-1)
Поле TokenBucketSize. Значение этого поля ограничивает количество данных, которые могут накапливаться для определенного потока Например,
видеоприложения обычно задают этому полю размер передаваемого кадра,
поскольку, как правило, им требуется передавать только целые видеокадры
Приложения, требующие постоянной скорости передачи данных, присвоят этому полю значение, допускающее некоторые вариации Значение поля
TokenBucketSize, как и TokenRate выражается в байтах в секунду
Поле PeakBandwidth. Определяет максимальное количество данных,
передаваемое за указанный период времени Фактически это значение задает максимальный объем «пакетной > передачи — это очень важно, поскольку не позволяет приложениям, накопившим много данных, переполнить ими сеть
PeakBandwidth выражается в байтах в секунду
Поле Latency задает максимально допустимую задержку между переда- чей бита и его приемом предполагаемым адресатом Интерпретация этого значения зависит от уровня обслуживания, запрошенного в поле ServiceType
Задержка выражается в микросекундах
Поле DelayVariation определяет разницу между минимальной и макси- мальной задержкой доставки пакета Обычно приложение использует это значение для определения размера буфера приема данных и поддержки ис- ходных условий передачи DelayVariation выражается в микросекундах

Г Л А В А 12 Качество обслуживания 351
Поле ServiceType определяет уровень обслуживания, необходимый по- току данных Могут быть заданы следующие типы обслуживания
Ш SERVICETYPENOTRAFFIC — указывает, что в этом направлении данные не передаются
Ш SERMCETYPEBESTEFFORT указывает, что параметры, заданные в струк- туре FLOWSPEC, рекомендательные, и что система попытается поддержать этот уровень обслуживания Доставка пакета не гарантируется
Ш SERVICETYPECONTROLLEDLOAD — указывает, что параметры передачи должны вплотную приближаться к обеспечиваемым при негарантирован- ном обслуживании в не загруженной трафиком сети Это предполагает два условия Во-первых, потери пакетов будут примерно соответствовать обычному уровню ошибок среды передачи, во-вторых, задержка переда- чи не намного превысит минимальную
SERVICETYPEGUARANTEED — гарантирует в течение всего соединения передачу данных со скоростью, заданной в поле TokenRate Если факти- ческая скорость передачи данных превысит значение TokenRate, данные
МОГУТ быть задержаны или отброшены (в зависимости от настройки ТС)
Если же значение TokenRate не превышено, соблюдение параметров за- держки (Latency) также гарантировано
Помимо этих четырех типов обслуживания есть несколько других флагов,
которые могут вернуть приложению полезную информацию Над этими ин- формационными флагами и любым действительным флагом ServiceType мож- но выполнить логическую операцию ИЛИ Вот эти флаги, называемые фла- гами модификатора типа обслуживания
SERVICETYPE NETWORK UNAVAILABLE несоблюдение условий обслу- живания в направлении передачи или приема
Ш SERMCETYPEGENERALINFORMATION — для потока поддерживаются все типы обслуживания
К SERVICETYPENOCHANGE запрашиваемый уровень обслуживания QoS
не изменился Этот флаг может быть возвращен из вызова Winsock, или приложение указывает его при повторном согласовании параметров QoS,
сообщая, что в данном направлении уровни QoS не изменились
« SERMCEIMMEDIATE TRAFFIC CONTROL - приложение использует этот флаг, чтобы немедленно вызвать ТС вместо негарантированной пе- редачи до приема сообщения RESV
Я SERVICENOTRAFFICCONTROL над этим и другими флагами Service-
Type можно выполнить логическую операцию ИЛИ, чтобы полностью отключить управление трафиком
SERMCENOQOSSIGNAIING — этот флаг можно использовать вместе с предыдущим, чтобы предотвратить передачу любых оповещающих RSVP- сообщений Будет вызван локальный компонент управления трафиком,
но RSVP-сообщения PATH не отправятся Этот флаг может также исполь- зоваться совместно с принимающей структурой FLOWSPEC для подавле-

3 5 2 ЧАСТЬ II Интерфейс прикладного программирования Winsock '
ния автоматической генерации сообщения RESV Приложение получает уведомление, что сообщение PATH поступило, после чего изменяет QoS,
вызывая WSAloctl (SIO_SET_QOS), чтобы сбросить этот флаг и тем самым выдать сообщение RESV
Поле MaxSduStze задает максимальный размер пакета данных, переда- ваемых в определенном потоке Выражается в байтах
Поле MinimumPolicedSize задает минимальный размер пакета данных,
передаваемых в определенном потоке Выражается в байтах
Функции, вызывающие QoS
Предположим, приложение запрашивает определенную пропускную способ- ность сети Этот процесс инициируют четыре функции После начала сеанса
RSVP приложение регистрируется для получения событий FD_QOS Информа- ция о состоянии QoS и коды ошибок передаются ему, как события FD_QOS
Приложение может зарегистрироваться для приема этих событий обычным способом включить флаг FD_QOS в поле события функции WSAAsyncSelect или
WSAEventSelect
Уведомление FD_QOS особенно существенно, если соединение устанавли- вается с помощью структур FLOWSPEC со значениями по умолчанию (QOS_
NOT _SPECIFIED) После того как приложение сделало запрос QoS, базовый поставщик периодически обновляет структуру FLOWSPEC для указания теку- щего состояния сети и уведомляет приложение, выдавая событие FD_QOS
Располагая этой информацией, приложение может запросить или изменить уровни QoS, чтобы отобразить имеющуюся пропускную способность По- мните обновленная информация указывает только на локально доступную пропускную способность и не обязательно сообщает о сквозной пропуск- ной способности
После создания потока сетевая пропускная способность может менять- ся, или отдельный участник потока может изменить запрошенный уровень обслуживания Повторное согласование выделенных ресурсов вызывает ге- нерацию события FD_QOS, которое сообщает об этих изменениях приложе- нию На этом этапе приложение должно вызвать S1O_GET_QOS, чтобы полу- чить новые уровни ресурсов Оповещения о событиях QoS и обмен инфор- мацией о состоянии мы обсудим далее, в разделе, посвященном программи- рованию QoS
Функция WSAConnect
Клиент использует функцию WSAConnect, чтобы инициировать одноадрес- ное QoS-соединение с сервером Запрашиваемые значения QoS передаются как параметры ipSQOS В настоящее время групповое QoS не поддерживает- ся и не реализовано, ipGQOS должно передаваться нулевое значение
int WSAConnect (
SOCKET s,
const struct sockaddr FAB «name,
int namelen,

ГЛАВА 12 Качество обслуживания 353
LPWSABUF lpCallerData,
LPWSABUF lpCalleeData,
LPQOS lpSQOS,
LPQOS lpGQOS
Вызов WSAConnect может использоваться совместно с требующими и не тре- бующими соединения сокетами В первом случае эта функция устанавливает соединение и генерирует соответствующие сообщения PATH и (или) RESV
При использовании не требующих соединения сокетов необходимо свя- зать адрес конечной точки с сокетом, чтобы поставщик службы знал, куда отправлять сообщения PATH и RESV Важно учесть, что только данные, от- правленные на адрес приемника, будут обработаны системой согласно уров- ням QoS, заданным для этого сокета Другими словами, если WSAConnect ис- пользуется для сопоставления конечной точки не требующему соединения сокету, данные будут передаваться только между этими двумя конечными точками в течение времени жизни этого сокета Если необходимо передать данные с гарантиями QoS нескольким конечным точкам, используйте WSA-
Ioctl или SIO_SET_QOS для указания всех нужных конечных точек
Функция WSAAccept
Функция WSAAccept принимает соединение клиента, которое может подде^ъ
живать QoS
SOCKET WSAAccept(
SOCKET s, ,
(
struct sockaddr FAR «addr,
LPINT addrlen,
LPCONDITIONPROC lpfnCondition,
DWORD dwCallbackData
Если вам требуется условная функция, ее прототип должен выглядеть так-
int CALLBACK ConditionalFunc(
LPWSABUF lpCallerld,
LPWSABUF lpCallerData,
LPQOS lpSQOS,
LPQOS lpGQOS,
LPWSABUF lpCalleeld,
LPWSABUF lpCalleeData,
GROUP FAR *g,
DWORD dwCallbackData
Недостаток в том, что поставщик не гарантирует возвращение действи- тельных значений QoS, которые клиент запрашивает как параметр ipSQoS
Так что для активизации QoS на клиентском сокете должна быть вызвана функция WSAIoctl с параметром SIO_SET_QOS до или после вызова функции
WSAAccept Если QoS включено на прослушивающем сокете, эти значения будут скопированы на клиентский сокет по умолчанию

3 5 4 ЧАСТЬ II Интерфейс прикладного программирования Winsock '
На самом деле, условная функция бесполезна. При использовании про- токола TCP нельзя отклонить клиентское соединение само по себе, потому что к моменту вызова условной функции оно уже было установлено на уров- не TCP. Кроме того, поставщик не передаст действительные параметры QoS
условной функции, даже если сообщение PATH уже поступило. В силу этих причин мы не рекомендуем применять условную функцию WSAAccept.
ПРИМЕЧАНИЕ При использовании WSAAccept в Windows 98 необхо- димо учесть следующее. Если вы используете условную функцию с
WSAAccept и значение параметра IpSQOS не пустое, включите QoS (ис- пользуя SIO_SET_QOS). Иначе WSAAccept не завершится успешно.
Функция WSAJoinLeaf
Эта функция используется для многоточечных соединений (подробнее о
многоадресном вещании — в главе 11):
SOCKET WSAJoinLeaf( ''"
SOCKET s,
5
"'"'
const struct sockaddr FAR «name,
int namelen,
LPWSABUF lpCallerData,
LPWSABUF lpCalleeData,
LPQOS IpSQOS,
LPQOS lpGQOS,
DWORD dwFlags
);
Чтобы приложение могло присоединиться к сеансу групповой рассылки,
оно должно создать сокет с соответствующими флагами (WSA_FLAG_MULTI-
POINT_C_ROOT, WSA_FLAG_MULTIPOINT_C_LEAF, WSA_FLAG_MULTIPOINT_D_
ROOT и WSA_FLAG_MULTIPOINT_D_LEAF). Когда приложение устанавливает многоточечные соединения, оно задает параметры QoS в параметре IpSQOS.
При использовании WSAJoinLeaf операция присоединения к многоадрес- ной группе IP отделена от установки сеанса QoS RSVP. Вероятно, подключе- ние к многоадресной группе будет успешным. Функция возвращается, не за- вершив запрос на резервирование. Позднее вы получите сообщение FD_QOS
об успехе или неудаче выделения запрошенных ресурсов.
Помните о времени жизни (TTL), указанном для многоадресных данных.
Если вы планируете задать TTL с параметрами SIO_MULTICAST_SCOPE или
IP_MULTICAST_TTL, это следует сделать до вызова WSAJoinLeaf 'или ioctl-коман- ды SIOJ>ET_QOS для включения QoS на сокете. Если область действия опре- делена после включения QoS, указанное TTL не вступит в силу до повторно- го согласования параметров QoS посредством SIO_SET_QOS. Значение TTL
также будет передаваться запросом RSVP.
Важно настроить TTL до включения QoS на сокете, поскольку TTL много- адресной рассылки, заданное на сокете, также влияет на время жизни сооб- щений RSVP, от чего напрямую зависит количество сетей, которым будет пе- редан запрос на резервирование ресурсов. Например, чтобы задать несколь-

Г Л А В А 12 Качество обслуживания
355
ко конечных точек в многоадресной группе IP, охватывающей три сети, при- свойте TTL значение 3, чтобы генерируемый сетевой трафик не передавал- ся «лишним» сетям. Если TTL не настроить до вызова WSAJomLeaf, сообщения
RSVP будут отправляться со стандартным временем жизни (63), из-за чего узел попытается зарезервировать ресурсы в чрезмерном количестве сетей.
Функция WSAIoctl
Функция WSAIoctl с ioctl-параметром SIO_SET_QOS используется либо для первого запроса QoS на сокете, либо для повторного согласования условий
QoS после их начального запроса. При ее использовании в случае неудачи запроса QoS возвращается более подробная информация об ошибке в све- дениях от поставщика. (Подробнее о функции WSAIoctl и ее вызове, а также о параметрах SIO_SET_QOS и SIO_GET^)OS - в главе 9.)
С помощью параметра SIO_SET_QOS задают или изменяют параметры QoS
на сокете. Используя WSAIoctl с SIOSET_QOS, можно определять объекты,
относящиеся к поставщику, для тонкой настройки работы QoS. В частности,
приложение, где используются не требующие соединения сокеты и не при- меняется WSAConnect, может вызвать WSAIoctl с SIO_SET_QOS и указать объект адреса назначения в буфере поставщика, чтобы определить конечную точ- ку, пригодную для установления сеанса RSVP. При задании параметров QoS
передайте структуру QOS как ipvInBuffer с параметром cblnBujfer, указываю- щим, сколько байт передано.
Параметр SIO_GET_QOS используется после приема события FD_QOS. Ког- да приложение получает уведомление об этом событии, для выяснения его причины следует вызвать WSAIoctl с параметром SIO_GET_QOS. Как уже упо- миналось, событие FD_QOS может быть сгенерировано из-за изменения про- пускной способности сети или повторного согласования условий партне- ром. Чтобы получить значения QoS для сокета, передайте достаточно боль- шой буфер как ivpOutBuffer с параметром cbOutBuffer, указывающим размер.
Входными параметрами могут быть NULL и 0.
Единственная сложность при вызове SIO_GET_QOS — передать буфер,
достаточно большой, чтобы вместить структуру QOS, включая объекты, от- носящиеся к поставщику. Поле ProviderSpecific представляет собой структу- ру WASBUF и находится внутри структуры QOS. Если поле len равно QUE-
RY_PS_SIZE, а поле buf— 0, после возвращения из WSAIoctl поле len получит новое значение. Если вызов функции не удастся из-за слишком маленького буфера, поле len также получит новое правильное значение. Запрос точно- го размера буфера поддерживается только в Windows 2000. В Windows 98
просто предоставьте большой буфер.
С функцией WSAIoctl также можно использовать ioctl-команду SIO_CHK_
QOS для запроса значений шести флагов:
й ALLGWTO SEND DATA сообщает, может ли передача данных начать- ся немедленно или приложение должно ожидать сообщения RESV; возвра- щаемое значение — BOOL;
И ABLETORESVRSVP — сообщает отправителям, поддерживает ли их интерфейс протокол RSVP; возвращаемое значение — BOOL;

3 5 6 ЧАСТЬ II Интерфейс прикладного программирования Winsock
Ш LINERATE — возвращает сведения о пропускной способности интерфей- са; возвращаемое значение — DWORD;
Ш LOCAL TRAFFIC CONTROL — сообщает, установлен ли и доступен ли для использования ТС; возвращаемое значение — BOOL;
Ж LOCALQoSABILJTY сообщает, доступна ли QoS; возвращаемое значе- ние - BOOL;
Ш ENDTOENDQOSABILITY сообщает, доступна ли в сети сквозная QoS;
возвращаемое значение — BOOL.
Когда вы вызываете команду SIO_CHK_QOS, параметр ipvlnBuffer указыва- ет на значение типа DWORD, содержащее один из трех флагов. Параметр
ipvOutBufferтакже должен ссылаться на DWORD, и по возвращении содержит запрошенное значение. Чаще всего используется флаг ALLOWED _TO_SEND_
DATA. Его применяют отправители, которые инициировали сообщение PATH,
но не получили сообщение RESV, указывающее на успешное выделение уров- ня QoS. Когда отправители используют ioctl-команду SIO_CHK_QOS с флагом
ALLOWED_TO_SEND_DATA, у сети запрашивается, достаточна ли в настоящий момент скорость передачи негарантированного трафика для передачи дан- ных, описанных в соответствующей структуре QOS (см. главу 9)-
Перечисленные выше флаги, которые возвращают значение BOOL, на са- мом деле возвращают 1 или 0, что соответственно означает «да» или «нет».
Последние четыре флага могут возвращать константу INF_NOT_AVAILABLE,
если в настоящий момент ответ получить не удалось.
Завершение QoS
Завершение обработки RSVP и ТС для сокета вызывает каждое из следующих
СОбыТИЙ:
• закрытие сокета с помощью функции closesocket;
Ш завершение работы сокета с помощью функции shutdown;
• вызов функции WSAConnect с нулевым адресом партнера;
Ш вызов функции WSALoctl и SLO_SET_QOS с типами обслуживания SERVI-
CETYPE_NOTRAFFIC или SERVICEJYPE_BESTEFFORT.
Это вполне очевидно, кроме работы функции shutdown. Она может опо- вестить о прекращении передачи или приема, в результате чего будет завер- шен поток данных только для этого направления. Другими словами, если функция shutdown вызывается с параметром SD_SEND, QoS по-прежнему бу- дет влиять на получаемые данные.
Объекты, относящиеся к поставщику
Объекты, рассматриваемые в этой главе, передаются как часть поля Рго-
viderSpecific структуры QOS. Они либо возвращают информацию QoS прило- жению с помощью события FD_QOS, либо их можно передать вместе с дру- гими параметрами QoS вызову функции WSAIoctl с параметром SIO_SET_QOS
t
чтобы перенастроить работу QoS.

1   ...   27   28   29   30   31   32   33   34   ...   50


написать администратору сайта