Опубликован: 28.09.2007 | Доступ: свободный | Студентов: 6073 / 960 | Оценка: 4.20 / 4.10 | Длительность: 47:32:00
ISBN: 978-5-94774-707-2
Лекция 4:

Сокеты

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

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

WSASocket и WSAAccept представляют собой два новых оператора, используемых для создания сокетов и групп, а также для включения сокета в определенную группу. Идентификатор группы сокета можно узнать с помощью оператора getsockopt с опцией SO_GROUP_ID. Установка и проверка относительного приоритета сокетов в группе осуществляется соответственно операторами getsockopt и setsockopt с опцией SO_GROUP_PRIORITY. Опции сокетов приведены в таблице 4.8.

Таблица 4.8. Опции сокетов
опция Тип назначение значение по умолчанию
SO_GROUP_ ID GROUP Идентификатор группы, к которой принадлежит сокет NULL
SO_GROUP_ PRIORITY int Относительный приоритет сокетов, принадлежащих группе 0
SO_MAX_ MSG SIZE int Максимальный размер сообщения для сокетов, ориентированных на сообщения. Не имеет смысла для сокетов типа stream Зависит от реализации
SO_PROTOCOL_INFO struct WSAPROTOCOL_INFO Описание протокольной информации Зависит от протокола
PVD CONFIG char FAR * Информационная структура, содержащая данные о сервис-провайдере Зависит от реализации

Сводная таблица кодов операций для процедуры ioctl приведена ниже (таблица 4.9). Оператор WSAIoctl поддерживает также все операции, специфицированные для процедуры iocltsocket.

Таблица 4.9. Коды операций
код операции входной тип выходной тип значение
SIO_ASSOCIATE_HANDLE зависит от API не использ. Связывает сокет с заданным дескриптором интерфейса-партнера
SIO_ENABLE_CIRCULAR_QUEUEING не использ. не использ. Разрешает организацию кольцевой очереди
SIO_FIND_ ROUTE struct sockaddr не использ. Запрос маршрута до заданного адреса
SIOFLUSH не использ. не использ. Аннулирует текущее содержимое очереди на отправку
SIO_GET_BROADCAST_ADDRESS не использ. struct sockaddr Определяет протокольно-зависимый широковещательный адрес для использования в sendto/ WSASendto
SIOGET_QOS не использ. QOS Определяет текущую спецификацию сокета
SIO_GET_ GROUP_QOS не использ. QOS Определяет спецификацию группы, к которой принадлежит сокет
SIO_MULTIPOINT LOO КВАСК BOOL не использ. Определяет, будут ли данные, посланные в ходе многоточечной сессии, получены сокетом локальной ЭВМ
SIO_MULTICAST_SCOPE int не использ. Определяет режим, в котором будут осуществляться мультикастинг-обмены
SIOSET_QOS QOS не использ. Устанавливает новую спецификацию для сокета
SIO_SET_ GROUP_QOS QOS не использ. Устанавливает новую спецификацию группы, к которой принадлежит сокет
SIO_TRANSLATE_HANDLE int зависит от API Возвращает дескриптор для сокета s, который соответствует контексту интерфейса-партнера

Оператор WSAAccept устанавливает условное соединение и имеет следующую структуру параметров (таблица 4.9.1).

Таблица 4.9.1.
S дескриптор сокета, который находится в режиме listen
addr опционный указатель на буфер (структуру), где должен храниться адрес подключаемого объекта. Формат адреса определяется типом протокола, заданным при создании сокета
addrlen Опционный указатель на целую переменную, которая определяет длину аргумента addr
IpfnCondition Адрес опционной условной процедуры, которая на основе полученной информации создает группу или подключает сокет к уже существующей группе
dwCallbackData Параметр, возвращаемый приложению. Этот параметр не интерпретируется WinSock

Программа извлекает очередную заявку на соединение из очереди сокета s и проверяет с помощью специфицированной программы выполнение условий соединения. Если условия выполнены, возвращается флаг CF_ACCEPT, программа создает новый сокет и осуществляет подключение его к группе в соответствии с параметром g, выработанным программой проверки условий. Вновь созданный сокет имеет такие же параметры, что и s, включая те, что задаются операторами контроля WSAAsyncSelect или WSAEventSelec t. Если программа проверки условия вернула флаг CF_REJECT, запрос на соединение аннулируется. Если невозможно принять решение немедленно, программа проверки условия должна вернуть флаг CF_DEFER, при этом никаких действий не предпринимается. Когда приложение будет готово обслужить запрос на соединение, оно снова запустит процедуру WSAAccept и пришлет либо CF_ACCEPT, либо CF_REJECT в качестве результата проверки условий.

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

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

  • Современные версии WinSock обеспечивают протокольно­-независимый доступ ко всем ресурсам сети, включая такие стандартные приложения, как DNS, SAP, X.500 и т.д.
  • Они позволяют реализовать несколько сессий ввода/вывода одновременно.
  • Они поддерживают любые стандартные уровни сервиса (QOS — Quality of service), осуществляют объединение сокетов по группам в соответствии с их параметрами.
  • Допускается многопротокольная широковещательная или мультикастинг­-адресация.
  • Предусматривается совместное использование сокетов несколькими процессами, условное создание сокетов и объединение их в группы.

Введено понятие WOSA-интерфейса (Windows Open Service Architecture), который обеспечивает связь между прикладной программой и сетевыми процедурами ОС. Этот интерфейс заметно упрощает программирование при работе с пакетами.

Каждая процедура, распознаваемая WOSA, имеет, в свою очередь, несколько интерфейсов, ориентированных на конкретных сервис-провайдеров. Применение этих средств реализуется через DLL.

WinSock, следуя модели WOSA, обеспечивает прикладной интерфейс для сетевого программирования API (Application Programming Interface), который организует доступ к транспортным услугам и серверу имен сервис-провайдера SPI (Service Provider Interface). SPI ориентирован на использование в рамках 32-битовой модели Microsoft Windows.

Транспортные сервис-провайдеры (например, TCP/IP или IPX/SPX) и доменные серверы (DNS) в WinSock представляют собой динамические библиотеки (DLL) с одной точкой входа для процедур инициализации WSPStartup или NSPStartup (обратите внимание на то, что здесь под сервис-провайдером подразумевается система, способная предоставить определенный вид услуг). Все остальные процедуры сервис-провайдера сделаны доступными для WinSock DLL через диспетчерскую таблицу. Динамическая библиотека сервис-провайдера загружается в память WinSock DLL только по мере необходимости и выгружается, когда она более не нужна. Динамическая библиотека сервис-провайдера имеет обычно расширение .WSP или .NSP. Процедуры WinSock SPI имеют префиксы (таблица 4.9.2.).

Сервис-­провайдеры WinSock при работе со строками применяют UNICODE. WinSock DLL выполняют необходимые преобразования при работе с приложениями, использующими ANSI или UNICODE.

Таблица 4.9.2.
WSP WinSock Service Provider для транспортных услуг сервис-провайдера
WPU WinSock Provider Upcall для входа в WinSock DLL сервис-провайдера
WSC WinSock Configuration для входа в WinSock DLL инсталляционных приложений
NSP Name Space Provider для работы с сервером имен
Каролина Попович
Каролина Попович
Евгений Виноградов
Евгений Виноградов

Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа?