Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование в сетях Windows

.pdf
Скачиваний:
538
Добавлен:
11.03.2015
Размер:
3.02 Mб
Скачать

1 08

ЧАСТЬ II Интерфейс прикладного программирования Winsock

Широковещаниеданных

Широковещание данных подразумевает их передачу с одной рабочей станции всем остальным рабочим станциям ЛВС. Этой функцией обладают неориентированные на соединение протоколы, так как все компьютеры в ЛВС могут получать и обрабатывать широковещательные сообщения.

Недостаток широковещательных сообщений — их вынужден обрабатывать каждый компьютер. Например, пользователь передает сообщение всем станциям ЛВС, и сетевой адаптер каждого компьютера получает сообщение и помещает его в сетевой стек. Затем стек определяет, какие сетевые приложения должны получить это сообщение. Обычно большинству компьютеров в сети не нужны эти данные, и они их отбрасывают. Тем не менее, каждый вынужден тратить время на обработку пакета данных, чтобы проверить, нужны ли они для какого-нибудь приложения. Следствием является высокая рабочая нагрузка при широковещании, что может существенно замедлить работу в ЛВС. В общем, маршрутизаторы не транслируют широковещательных пакетов данных.

Многоадресное вещание

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

Например, многоадресная передача по протоколу IP является видоизмененной формой широковещания. Для нее необходимо, чтобы все заинтересованные в приеме и передаче узлы были членами особой группы. При присоединении процесса к группе многоадресного вещания на сетевом адаптере добавляется фильтр. Он заставляет сетевое оборудование обрабатывать и транслировать по сетевому стеку до соответствующего процесса только данные, предназначенные групповому адресу, к которому присоединился процесс. Многоадресная передача часто применяется в приложениях для видеоконференций. Подробнее о программировании многоадресного вещания средствами Winsock — в главе 11.

Качество обслуживания

Управляя качеством обслуживания (Quality of Service, QoS), приложение может зарезервировать определенную часть пропускной способности сети для монопольного использования. Рассмотрим для примера воспроизведение видеопотока в реальном времени. Для его плавности и четкости видеоданные должны поступать из сети равномерно и с определенной скоростью. В недавнем прошлом плавное воспроизведение достигалось за счет накапливания видеоданных в буфере. Если данные передавались неравномерно, паузы сглаживались кадрами из буфера. QoS позволяет резервировать определенную часть емкости канала связи, чтобы гарантировать равномерную передачу и считывание видеоданных. Теоретически это означает, что за счет использования QoS приложение может не буферизовать информацию. QoS посвящена глава 12.

Г Л А В А 5 Сетевые протоколы

1(09

фрагментарные сообщения

фрагментарные сообщения (partial message) передают только ориентированные на сообщения протоколы. Предположим, приложению необходимо получить сообщение, а локальный компьютер принял лишь часть данных. Это обычное явление, особенно если компьютер-отправитель передает крупные сообщения. У локального компьютера может не хватить ресурсов, чтобы вместить сообщение целиком. На самом деле, большинство ориентированных на сообщение протоколов налагают разумные ограничения на максимально возможный размер дейтаграммы, чтобы такая ситуация не возникала часто.

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

Маршрутизация

Важно учесть, является ли протокол маршрутизируемым. Если да, то между двумя рабочими станциями можно установить канал связи (виртуальный ориентированный на соединение либо канал передачи дейтаграмм), независимо от того, какая сетевая аппаратура их разделяет. Например, компьютер А находится в отдельной от компьютера В подсети. Между ними расположен маршрутизатор, соединяющий эти подсети. Маршрутизируемый протокол «знает», что эти компьютеры расположены в разных подсетях, поэтому направляет пакет данных маршрутизатору, который решает, как лучше переслать данные компьютеру В. Поскольку немаршрутизируемый протокол не способен передавать данные между сетями, маршрутизатор удаляет любые его пакеты. Маршрутизатор не пересылает пакет данных немаршрутизируемого протокола, даже если его адресат находится в подключенной подсети. Единственный немаршрутизируемый протокол, поддерживаемый платформами Win32 — NetBEUI.

Другие характеристики

Каждый протокол, поддерживаемый на платформах Win32, обладает специфичными или уникальными характеристиками: например, порядком передачи байт или максимально допустимым размером пакета. Однако далеко не

еэти характеристики важны для разработки Winsock-приложения. В Win- £. предусмотрен механизм перечисления каждого доступного поставщи-

ротокола и опроса его характеристик (он описан разделе «Информация ° протоколе» этой главы).

110 ЧАСТЬ II Интерфейс прикладного программирования Winsock

Поддерживаемые протоколы

Весьма полезно, что платформы Win32 одновременно поддерживают несколько сетевых протоколов. Как уже упоминалось в главе 2, перенаправитель Windows гарантирует маршрутизацию сетевых запросов соответствующим протоколам и подсистемам. Впрочем, средствами Winsock вы можете написать сетевые приложения, напрямую использующие любой из этих протоколов. В главе б рассказывается, как происходит адресация компьютеров в сети при помощи протоколов, установленных на рабочей станции. Важно, что Winsock не зависит от протокола: большинство операций схожи при использовании любого протокола. Впрочем, способы адресации рабочих станций необходимо знать, чтобы определить местоположение и соединиться с сетевым партнером.

Сетевыепротоколы,поддерживаемыеWin32

Платформы Win32 поддерживают разнообразные протоколы. Каждый протокол обычно способен работать в нескольких режимах. Например, протокол IP поддерживает как ориентированные на соединение поточные службы, так и службы дейтаграмм, не ориентированные на соединение. В табл. 5-1 перечислены основные доступные протоколы и некоторые поддерживаемые ими режимы работы.

Табл. 5-1. Характеристики доступных протоколов

Про-

Имя

Тип

Уста-

НадежПорядок

Коррект-

Под-

Под-

QoS

Макс.

токол

 

сообновка ность пакетов

ное завер-

держка

держка

 

размер

 

 

щения

соеди-

 

 

шение

широко-

многоад-

 

сообщения

 

 

 

нения

 

 

сеанса

вещания ресное™

 

(байт)

 

 

 

 

 

 

 

 

IP

MSAFD Поток Да

Да

Да

Да

Нет

Нет

Нет Без огра-

 

TCP

 

 

 

 

 

 

 

 

ничений

 

MSAFD

Сооб-

Нет

Нет

Нет

Нет

Да

Да

Нет 65467

 

UDP

щение

 

 

 

 

 

 

 

 

 

RSVP

Поток

Да

Да

Да

Да

Нет

Нет

Да

Без огра-

 

TCP

 

 

 

 

 

 

 

 

ничений

 

RSVP

СообНет

Нет

Нет

Нет

Да

Да

Да

65467

 

UDP

щение

 

 

 

 

 

 

 

 

IPX/

MSAFD СообНет

Нет

Нет

Нет

Да

Да

Нет

576

SPX

nwln-

щение

 

 

 

 

 

 

 

 

 

kipx

 

 

 

 

 

 

 

 

 

 

[IPX]

 

 

 

 

 

 

 

 

 

 

MSAFD

Сооб-

Да

Да

Да

Нет

Нет

Нет

Нет

Без огра-

 

nwln-

щение

 

 

 

 

 

 

 

ничений

 

kspx

 

 

 

 

 

 

 

 

 

 

[SPX]

 

 

 

 

 

 

 

 

 

 

MSAFD

Сооб-

Да

Да

Да

Нет

Нет

Нет

Нет

Без огра-

 

nwln-

щение

 

 

 

 

 

 

 

ничений

kspx [SPX] [псевдопоток]

 

 

 

 

 

 

Г Л А ВА

5

Сетевые протоколы

1J1

 

 

 

 

 

 

 

 

 

Табл. 5-1.

(продолжение)

 

 

 

 

 

 

 

Про-

Имя

Тип

Уста-

НадежПорядок

Коррект-

Под-

Под-

OoS

Макс.

токол

 

сообновка ность пакетов

ное завер-

держка

держка

 

размер

 

 

щения

соеди-

 

 

шение

широко-

многоад-

 

сообщения

 

 

 

нения

 

 

сеанса

вещания

ресности

 

(байт)

 

MSAFD

Сооб-

Да

Да

Да

Да

Нет

 

Нет

Нет

Без oi ра-

 

nwln-

щение

 

 

 

 

 

 

 

 

ничений

 

kspx

 

 

 

 

 

 

 

 

 

 

 

[SPXII]

 

 

 

 

 

 

 

 

 

 

 

MSAFD СообДа

Да

Да

Да

Нет

 

Нет

Нет

Без огра-

 

nwln-

щение

 

 

 

 

 

 

 

ничений

 

kspx

 

 

 

 

 

 

 

 

 

 

 

[SPXII]

 

 

 

 

 

 

 

 

 

 

 

[псевдо-

 

 

 

 

 

 

 

 

 

 

поток]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Net-

SequenСооб-

Да

Да

Да

Нет

Нет

 

Нет

Нет

64 кб

BIOS

ml Расщение

 

 

 

 

 

 

 

 

(65535)

 

kets

 

 

 

 

 

 

 

 

 

 

 

(после-

 

 

 

 

 

 

 

 

 

 

 

дователь-

 

 

 

 

 

 

 

 

 

 

ность

 

 

 

 

 

 

 

 

 

 

 

пакетов)

 

 

 

 

 

 

 

 

 

 

DatagСообНет

Нет

Нет

Нет

Да1

 

Нет

Нет

64 кб

 

rams

щение

 

 

 

[SP25]

 

 

(65535)

 

(дейтаг-

 

 

 

 

 

 

 

 

 

 

раммы)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

AppleMSAFD

Сооб-

Да

Да

Да

Да

Нет

 

Нет

Нет

64 кб

Talk

Apple-

щение

 

 

 

 

 

 

 

 

(65535)

 

Talk

 

 

 

 

 

 

 

 

 

 

 

[ADSP]

 

 

 

 

 

 

 

 

 

 

 

MSAFD

Сооб-

Да

Да

Да

Да

Нет

 

Нет

Нет

Без огра-

 

Apple-

щение

 

 

 

 

 

 

 

 

ничений

 

Talk

 

 

 

 

 

 

 

 

 

 

 

[ADSP]

 

 

 

 

 

 

 

 

 

 

 

[псевдо-

 

 

 

 

 

 

 

 

 

j

поток]

 

 

 

 

 

 

 

Нет

Нет

4096

 

MSAFD

Сооб-

Да

Да

Да

Да

Нет

 

 

Apple-

щение

 

 

 

 

 

 

 

 

 

 

Talk [PAP]

 

 

 

 

 

 

 

 

 

 

MSAFD

Поток

Нет

Нет

Нет

Нет

Нет

 

Нет

Нет

Без огра-

 

Apple-

 

 

 

 

 

 

 

 

 

ничений

on

Talk

 

 

 

 

 

 

 

 

 

 

 

[RTMP]

 

 

 

 

 

 

 

 

 

 

 

MSAFD Поток Нет

Нет

Нет

Нет

Нет

 

Нет

Нет

Без огра-

 

Apple-

 

 

 

 

 

 

 

 

 

ничений

 

Talk

 

 

 

 

 

 

 

 

 

 

 

[ZIP]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ATM

MSAFD

Поток

Да

Нет

Да

Нет

Нет

 

Да

Да

Без огра-

 

ATM

 

 

 

 

 

 

 

 

 

ничений

 

AAL5

 

 

 

 

 

 

 

 

 

 

 

 

NetBIOS поддерживает отправку дейтаграмм как уникальным, так и групповым

клиентам, общее широковещание не поддерживается

»<3„

 

 

 

см. след. стр.

112 ЧАСТЬ II Интерфейс прикладного программирования Winsock

Табл., 5 - 1 . {продолжение)

ПроИмя токол

Тип

Уста-

НадежПорядок

Коррект-

Под-

Под-

QoS Макс,

сооб-

новка

ность пакетов

ное завер-

держка

держка

размер

щения

соеди-

 

шение

широко-

многоад-

сообщения

 

нения

 

сеанса

вещания

ресное™

(байт)

 

Native

Сооб- Да

Нет

Да

Нет

Нет

Да

Да

Без огра-

 

ATM

щение

 

 

 

 

 

 

ничений

 

(AAL5)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Infra-

MSAFD

По гок Да

Да

Да

Да

Нет

Нет

Нет

Без огра-

red SoIrda

 

 

 

 

 

 

 

ничений

ckets

[IrDA]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

СетевыепротоколывWindowsСЕ

В отличие от других платформ Win32, Windows СЕ поддерживает только TCP/IP. Кроме того, Windows СЕ поддерживает только Winsock 1.1, поэтому большинство новых возможностей Winsock 2, описанных в этом разделе, не применимы к данной платформе. Windows СЕ поддерживает NetBIOS поверх TCP/IP при помощи перенаправителя, но не позволяет обращаться к этому протоколу ни через «родной» API-интерфейс NetBIOS, ни через Winsock.

Информация о протоколе

Winsock 2 позволяет узнать, какие протоколы и с какими характеристиками установлены на рабочей станции. Для каждого рабочего режима протокола существует соответствующая запись каталога в рамках системы. Например, после установки TCP/IP в каталог будут занесены две записи для IP: одна для протокола TCP (надежного, с установлением соединения), вторая — для протокола UDP (ненадежного, без установления соединения).

Узнать об установленных сетевых протоколах можно с помощью функции WSAEnumProtocols:

int WSAEnumProtocols ( LPINT lpiProtocols,

LPWSAPROTOCOL_INFO lpProtocolBuffer, LPDWORD lpdwBufferLength

Она заменила функцию EnumProtocols из Winsock 1.1, применяемую в Windows СЕ. Единственное отличие: WSAEnumProtocols возвращает массив структур WSAPROTOCOLJNFO, a EnumProtocols — массив структур PROTOCOL INFO, содержащий меньше полей, чем структура WSAPROTOCOLJNFO (хотя информация та же). Структура WSAPROTOCOLJNFO определена так:

typedef struct _WSAPROTOCOL_INFOW {

 

DWORD

dwServiceFlagsi;

 

DWORD

dwServiceFlags2;

 

DWORD

dwServiceFlags3;

 

DWORD

dwServiceFlags4;

< ш,

 

Г Л А ВА

5 Сетевые протоколы

113

 

 

 

 

DWORD

dwProviderFlags;

 

 

GUID

Providerld;

 

 

DWORD

dwCatalogEntryld;

 

 

WSAPROTOCOLCHAIN

ProtocolChain;

 

 

int

iVersion;

 

 

int

iAddressFamily;

 

 

int

iMaxSockAddr;

 

 

int

iMinSockAddr;

 

 

int

iSocketType;

 

 

int

iProtocol;

 

 

int

iProtocolMaxOffset;

 

 

int

INetworkByteOrder;

 

 

int

ISecurityScheme;

 

 

DWORD

dwMessageSize;

 

 

DWORD

dwProviderReserved;

 

 

WCHAR

szProtocol[WSAPROTOCOL_LEN +

1];

 

} WSAPROTOCOL_INFOW, FAR * LPWSAPR0TOCOL_INFOW;

ИнициализацияWinsock

Перед вызовом любой функции Winsock необходимо загрузить правильную версию библиотеки Winsock. Функция инициализации Winsock —

WSAStartup:

int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);

Первый параметр — версия библиотеки Winsock, которую необходимо загрузить. На современных платформах Win32 используется версия 2.2. Единственное исключение — Windows СЕ, поддерживающая только Winsock 1.1. Для загрузки версии Winsock 2.2 укажите значение 0x0202, либо макрос MAKEWORD(2, 2). Верхний байт определяет дополнительный номер версии, нижний — основной.

Второй параметр — структура WSADATA, возвращаемая по завершении вызова. Она содержит информацию о версии Winsock, загруженной функцией WSAStartup:

typedef struct WSAData {

 

WORD

 

wVersion;

 

WORD

 

wHighVersion;

 

char

 

szDescription[WSADESCRIPTION_LEN

+ 1]

char

 

szSystemStatus[WSASYS_STATUS_LEN

+ 1]

unsigned

short

iMaxSockets;

 

unsigned

short

iMaxUdpDg;

 

char FAR

*

lpVendorlnfo;

 

> WSADATA, FAR * LPWSADATA;

Единственная полезная информация, возвращаемая в структуре WSADATA—поляwVersionиwHighVersion.Поля,относящиесякмакси- мальному количеству сокетов и максимальному размеру UDP, следует получать из записи каталога для конкретного протокола. Ранее мы

см.след.стр.

114

ЧАСТЬ II Интерфейс прикладного программирования Winsock

говорили об этом, когда приводили описание WSAEnumProtocols и возвращаемых этой функцией структур.

Индивидуальные поля структуры WSADATA таковы:

ШwVersion — версия Winsock, которую предполагает использовать

ВЫЗОВ;

wHighVersion — высшая версия Winsock, поддерживаемая загруженной библиотекой (как правило, то же значение, что и wVersion)

Ш szDescription текстовое описание загруженной библиотеки; Ш szSystemStattis — текстовая строка с соответствующей информа-

цией о состоянии или конфигурации;

iMaxSockets — максимальное количество сокетов (пропустите это поле для Winsock 2 и более поздних версий);

Ж iMaxUdpDg — максимальный размер дейтаграммы UDP;

ipVendorlnfo информация об изготовителе (пропустите это поле для Winsock 2 и более поздних версий).

По завершении работы с библиотекой Winsock вызовите функцию WSACleanup для выгрузки библиотеки и освобождения ресурсов:

int WSACleanup (void);

Для каждого вызова WSAStartup необходимо согласованно вызывать WSACleanup, так как каждый стартовый вызов увеличивает значение эталонного счетчика ссылок на загруженные Winsock DLL. Чтобы уменьшить значение счетчика, требуется равное количество вызовов WSACleanup.

Обратите внимание: Winsock 2 полностью совместим со всеми вызовами функций Winsock 1.1. Поэтому приложение, написанное для Winsock 1.1, будет работать и с библиотекой Winsock 2- функции Winsock 1.1 сопоставляются их эквивалентам в Winsock 2.

Проще всего задать WSAEnumProtocols с ipProtocolBujfer, равным NULL, и IpdwBufferLength — равным 0. При вызове с WSAENOBUFS произойдет ошибка, однако IpdwBufferLength будет содержать размер буфера, достаточный для возвращения всей информации о протоколах. Вызвав функцию с правильным размером буфера, вы получите несколько структур WSAPROTOCOLJNFO. Просмотрите структуры в цикле и найдите запись протокола с необходимыми атрибутами Программа Enum.c на прилагаемом компакт-диске перечисляет все установленные протоколы и распечатывает их характеристики.

Особенно часто в структуре WSAPROTOCOLJNFO используется поле dwServiceFlagsl — битовая маска разных атрибутов протокола. В следующем списке перечислены битовые флаги и действия, которые инициируются, если данный флаг задан.

ХР1 CONNECTIONLESS — протокол передает данные без установлени соединения; если флаг не задан — с установлением соединения.

*ХР1 GUARANTEED DELIVERY— протокол гарантирует доставку данных получателю.

Г Л А ВА 5 Сетевые протоколы

115

ж XPl GUARANTEED_ORDER — протокол гарантирует доставку данных в порядке их отправки без дублирования, хотя саму доставку не гарантирует.

щXPl MESSAGEORIENTED протокол обрабатывает границы сообще-

ний.

ш xpjPSEUDOSTREAM — протокол передает сообщения, но границы сообщений игнорируются приемником.

Ш XPl GRACEFULjCLOSE протокол поддерживает двухфазное завершение сеанса (каждая сторона уведомляется о намерении другой завершить сеанс связи). Если этот флаг не задан, сеанс разрывается без предупреждения.

щXPl EXPEDITED DATA — протокол поддерживает обмен срочными (out- of-band) данными

т XP1_CONNECT_DATA протокол поддерживает передачу данных с запросом соединения.

XP1DISCONNECTDATA протокол поддерживает передачу данных с запросом разъединения.

Ш ХР 1 SUPPORTBROADCAST — протокол поддерживает механизм широковещания.

XPl SUPPORT MULTIPOINT — протокол поддерживает механизм многоадресной передачи данных.

ШXPl MULTIPOINTCONTROLPLANE — плоскость управления (control plane) маршрутизируется, если флаг не задан — этого не происходит.

ХР 1_MULTIPOINT_DATA_PLANE — плоскость данных маршрутизируется, если флаг не задан — этого не происходит.

ШXPlQoS SUPPORTED протокол поддерживает запросы QoS.

*ХР 1_UNI_SEND — протокол однонаправленный и обеспечивает лишь отправку данных.

*XP1UNIRECV протокол однонаправленный и обеспечивает лишь прием данных.

*XP1_IFS_HANDLES дескрипторы сокета, возвращенные поставщиком, являются описателями файловой системы IFS и могут быть использованы в таких API-функциях, как ReadFile и WriteFile.

Ш XPl PARTIAL MESSAGE флаг MSG_PARTIAL поддерживается функциями WSASend и WSASendTo.

Для проверки наличия определенного свойства выберите соответствующий флаг и логически сложите его с полем dwServiceFlags 1. Если результат сложения ненулевой, протокол обладает указанным свойством, иначе — нет.

ьольшинство из приведенных в списке флагов подробно описаны в следующих главах. Поэтому сейчас рассмотрим другие, не менее важные поля: iProtocol, iSocketType и iAddressFamily.

116

ЧАСТЬ II Интерфейс прикладного программирования Winsock

Поле iProtocol определяет, к какому протоколу относится данная запись Поле iSocketType важно, если протокол способен работать в разных режимах, например, с установлением поточного или дейтаграммного соединения И наконец, поле lAddressFamily позволяет выяснить корректную структуру адресации, применяемую данным протоколом Эти три поля очень важны при создании сокета для конкретного протокола

СокетыWindows

Рассмотрим, как доступные протоколы используют средства Winsock Как вы уже, вероятно, знаете, этот интерфейс основан на понятии сокета Сокет — это описатель поставщика транспорта В Win32 сокет отличается от описателя файла, а потому представлен отдельным типом — SOCKET Сокет создается одной из двух функций

SOCKET WSASocket ( int af,

int type, int protocol,

LPWSAPROTOCOL_INFO lpProtOCOlInfo, GROUP g,

DWORD dwFlags

SOCKET socket ( int af,

int type, int protocol

Первый параметр — af, определяет семейство адресов протокола Например, если вы хотите создать UDPили ТСР-сокет, подставьте константу AF_ INET, чтобы сослаться на протокол IP Второй параметр — type, это тип сокета для данного протокола Он может принимать одно из следующих значений

SOCKSTREAM,SOCK_DGRAM,SOCKJEQPACKET,SOCK_RAWnSOCKRDMТретий параметр — protocol, указывает конкретный транспорт, если для данного семейства адресов и типа сокета существует несколько записей В табл 5-2 перечислены значения, используемые в полях семейства адресов, типа сокета и протокола для данного сетевого транспорта

Табл. 5-2. Параметры сокетов

Протокол

 

Семейство

Тип сокета

Протокол

 

 

 

адресов

 

 

 

 

Internet

 

AFINET

TCP

SOCKSTREAM

IPPROTOJP

Protocol (IP)

 

 

UDP

SOCKDGRAM

1PPROTOJJDP

 

 

 

Простые сокеты

SOCKRAW

IPPROTO_RAW

 

 

 

 

 

 

1PPROTOJCMP

IPX/SPX

AF NS

MSAFD nwln-

SOCKDGRAM

NSPROTOIPX

 

 

 

kipx [IPX]

 

 

 

 

 

ГЛАВА 5 Сетевые протоколы

,117

 

 

 

 

 

 

Табл. 5-2.

(продолжение)

 

 

 

 

 

 

 

 

 

 

 

Протокол

Семейство

Тип сокета

Протокол

 

 

 

 

адресов

 

 

 

 

 

 

AFJPX

MSAFD nwln-

SOCK SEQ-

NSPROTOJPX

 

 

 

 

kspx [SPX]

PACKET

 

 

 

 

 

MSAFD nwln-

SOCKJTREAM

NSPROTO SPX

 

 

 

 

kspx [SPX]

 

 

 

 

 

 

[псевдопоток]

 

 

 

 

 

 

MSAFD nwln-

SOCK SEQ-

NSPROTOJPXII

 

 

kspx [SPXII]

PACKET

 

 

 

 

 

MSAFD nwlnk-

SOCKJTREAM

NSPROTOJPXII

 

 

spx [SPXII]

 

 

 

 

 

 

[псевдопоток]

 

 

 

 

NetBIOS

AFJVETBIOS Последова-

SOCK SEQ-

Номер LANA

 

 

 

 

тельные пакеты

PACKET

 

 

 

 

 

Дейтаграммы

SOCKDGRAM

Номер LANA

 

 

AppleTalk

AFAPPLE-

MSAFD Apple-

SOCKJUDM

ATPROTOADSP

 

TALK

Talk [ADSP]

 

 

 

 

 

 

MSAFD Apple-

SOCKJTREAM

ATPROTOADSP

 

 

Talk [ADSP]

 

 

 

 

 

 

[псевдопоток]

 

 

 

 

 

 

MSAFD Apple-

SOCK_RDM

ATPROTOPAP

 

 

 

 

Talk [PAP]

 

 

 

 

 

 

MSAFD Apple-

SOCKJDGRAM

DDPPROTO

 

 

 

 

Talk [RTMP]

 

RTMP

 

 

 

 

MSAFD Apple-

SOCKJDGRAM

DDPPROTOZIP

 

 

Talk [ZIP]

 

 

 

 

ATM

AF_ATM

MSAFDATM

SOCKJtAW

ATMPROTO_AAL5

 

 

AAL5

 

 

 

 

 

 

NativeATM

SOCK_RAW

ATMPROTO_AAL5

 

 

(AAL5)

 

 

 

 

Infrared

AFJRDA

MSAFDIrda

SOCKJTREAM

IRDA PROTO

 

 

Sockets

 

[IrDA]

 

SOCK_STREAM

Начальные три параметра для создания сокета подразделены на три уровня Первый и самый важный — семейство адресов Он указывает используемый в настоящее время протокол и ограничивает применение второго и третьего параметров Например, семейство адресов ATM (AF_ATM) позволяет использовать только простые сокеты (SOCKJZAW) Аналогично, выбор семейства адресов и типа сокета ограничивает выбор протокола

Впрочем, можно передать в параметре protocol значение О В этом случае истема выбирает поставщика транспорта, исходя из других двух параметров — of и type Перечисляя записи каталога для протоколов, проверьте значение поля dwProviderFlags из структуры WSAPROTOCOLJNFO Если оно равно PFL_ MATCHES'_PROTOCOL_ZERO — это стандартный транспорт, применяемый, если в параметре протокола socket или WSASocket передано значение О

еречислив все протоколы с помощью WSAEnumProtocols, передайте струкРУ WSAPROTOCOLJNFO в функцию WSASocket как параметр ipProtocolInfo