Главная страница
Навигация по странице:

  • Табл. 9-2. Типы атрибута IAS Значение irdaAttnbType Поле

  • Параметр IRLMPJRLPT_MODE

  • Параметр \RLMP_SEND_PDU_LEN

  • Уровень параметров IPPROTOJP

  • ограничения обработки и защиты

  • штамп времени

  • строгая маршрутизация источника

  • Рис. 9-2. Формат заголовка параметра IP

  • Параметр IP_HDRINCL

  • Уровень параметров IPPROTOJTCP

  • Параметр TCPJIODELAY

  • Уровень параметров NSPROTOJPX

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


    Скачать 2.88 Mb.
    НазваниеЭ. Джонс, Д. Оланд
    АнкорПрограммирование в сетях Windows.pdf
    Дата12.10.2017
    Размер2.88 Mb.
    Формат файлаpdf
    Имя файлаПрограммирование в сетях Windows.pdf
    ТипКнига
    #9346
    страница24 из 50
    1   ...   20   21   22   23   24   25   26   27   ...   50
    ГЛАВА 9 Параметры сокета и команды управления вводом выводом 261
    struct
    l\
    u_long Len,
    u_long CharSet,
    u_char UsrStr[IAS_MAX_USER_STRING],
    ы
    } lrdaAttnbUsrStr,
    } lrdaAttribute,
    } WINDOWS_IAS_QUERY, *PWINDOWS_IAS_QUERY, FAR *LPWINOOWS_IAS_QUERY,
    Структура запроса IAS для Windows СЕ
    typedef struct _WCE_IAS_QUERY
    {
    u_char irdaDeviceID[4],
    j char irdaClassName[61],
    char irdaAttnbName[61],
    u_short lrdaAttribType,
    union
    ''" {
    h
    int lrdaAttnblnt,
    tf struct
    jy
    {
    ° int Len,
    u_char 0ctetSeq[1],
    u_char Reserved[3],
    } lrdaAttribOctetSeq,
    struct
    {
    int Len,
    u_char CharSet,
    u_char UsrStr[1],
    u_char Reserved[2],
    1
    } lrdaAttnbUsrStr,
    } irdaAttribute,
    } WCE_IAS_QUERY *PWCE_IAS_QUERY,
    В табл 9-2 перечислены разные константы для поля irdaAttnbType, которое указываеа тип атрибута Значения для двух последних записей включены в таб лицу лишь для полноты информации Задать эти значения нельзя их может вернуть в поле trdaAttnblype вызов getsockopt с параметром 1R1MPJAS_QUERY
    Табл. 9-2. Типы атрибута IAS
    Значение irdaAttnbType Поле
    IAS_ATTR1B_INT lrdaAttnblnt
    IAS_A TTRIBOCTETSEQ h daAttrtbOctetSeq
    IAS_ATTRIBJTR IrdaAltrtbUvSti
    IAS ATTRIB NO CLASS Нет
    1ASATTRIB NO ATTRIB Нет

    2 6 2 ЧАСТЬ II Интерфейс прикладного программирования Winsock
    Чтобы задать значение, укажите в поле и daDevicelD ИК-устройство, для которого изменяется запись IAS Кроме гого, в поле irdaAttnbName следует задать класс, а в irdaClassName — службу для атрибута Помните, что при использовании IrSock серверы сокета — это службы, заре! истрированные средствами IAS, которым сопоставлен номер LSAP-SEL Данный номер кли- енты используют для соединения с сервером
    Для изменения номера LSAP-SEL входа службы IAS укажите в поле irda-
    DevicelD идентификатор устройства, на котором запущена служба В поле
    irdaAttnbName запишите строку IrDA IrLMP LsapSel, а в поле irdaClassName
    имя службы (например, MySocketServer) Затем присвойте значение 1AS_
    ATTR1BJNT полю irdaAttnbType, а в irdaAttnblnt укажите новый номер LSAP-
    SEL Конечно, номер LSAP-SEL лучше не изменять этот пример дан здесь лишь для наглядности
    Параметр IRLMPJRLPT_MODE
    Этот параметр (тип optval BOOL, версия Winsock 1+) можно и получить, и задать Если он равен TRUE, сокет настроен для связи с ИК-принтерами Сред- ствами Winsock можно подключиться к инфракрасному принтеру и отпра- вить задание печати Для этого перед установлением связи переведите сокет в режим IRLPT Просто присвойте этому параметру значение TRUE после со- здания сокета
    Чтобы найти в пределах диапазона принтеры, поддерживающие инфракрас- ный режим, используйте параметр 1RLMP_ENUMDEV1CES Некоторые устаревшие
    ИК-принтеры не регистрируют себя в IAS, возможно, вам придется подключить- ся к ним напрямую по идентификатору < LSAP-SEL-XYX> (подробнее о способах обхода IAS — в главе 6) Этот параметр доступен в Windows СЕ/2000
    Параметр \RLMP_SEND_PDU_LEN
    Этот параметр (тип optval — mt, версия Winsock 1+) можно только получить
    Он отображает максимальный размер блока данных протокола (Protocol
    Data Unit, PDU), необходимый при использовании параметра IRLMP_ 9WIRE_
    MODE Более подробно этот параметр, доступный в Windows СЕ/2000, рас- смотрен в описании IRLMPJ)WIREJ4ODE
    Уровень параметров IPPROTOJP
    Параметры сокета на уровне IPPROTOJP относятся к специфичным атрибутам протокола IP, таким как изменение определенных полей в заголовке IP и добав- ление сокета к многоадресной группе IP Многие из этих параметров объявле- ны в Winsock h и Winsock2 h по-разному Заметьте, что при загрузке Winsock 1
    необходимо включить правильный заголовок и компоновать приложение при- ложение с Wsock32 lib Аналогичным образом следует включить файл заголов- ка Winsock 2 и компоновать приложение с Ws2_32 lib для Winsock 2 Обсужда- емые в этом разделе параметры часто используются для многоадресного веща- ния, поддерживаемого обеими версиями Многоадресное вещание поддержи- вают все платформы Win32, кроме Windows СЕ до версии 2 1

    Г Л А В А 9 Параметры сокета и команды управления вводом выводом 263
    Параметр IPJOPTIONS
    Этот параметр (тип optval char [] версия Winsock 1+) можно и пол\чить и задать Он позволяет задава гь разные параметры IP внутри заголовка IP He
    /'которые из возможных вариантов i Я ограничения обработки и защиты — со1ласно RFC 1108,
    Н запись маршрута — каждый маршрутизатор добавляет свой IP адрес к заголовку (см пример использования Ping в главе 13),
    штамп времени — каждый маршрутизатор добавляет свой IP адрес и время,
    II нестрогая маршрутизация источника — пакет требуется для посеще ния каждого из перечисленных в заголовке параметра IP-адресов,
    строгая маршрутизация источника — пакет требуется для посещения только тех IP-адресов, которые перечислены в заголовке параметра
    Учтите, что не все эти параметры поддерживаются узлами и маршрути- заторами Когда вы определяете параметр IP, данные, передаваемые в вызов
    setsockopt, следуют за структурой (рис 9-2) Допустимая длина заголовка па- раметра IP — до 40 байт
    <
    Код
    < » •
    Дяша
    < >
    Смещение
    < >
    До 40 байт
    >.
    Данные, специфичные для параметра
    -ft. f
    * >•
    1 байт 1 байт 1 байт 37 байт
    Рис. 9-2. Формат заголовка параметра IP
    Поле кода указывает тип параметра например, значение 0x7 представля- ет параметр <запись маршрута) Длина — это просто длина заголовка пара- метра, а смещение — значение смещения в заголовок, где начинается фраг- мент данных заголовка Вид фрагмента данных заголовка зависит от конк- ретного параметра
    В приведенном далее отрывке кода мы задаем параметр <запись маршру- та) Сначала объявляем структуру (struct ip_option_hdi), содержащую первые три значения параметра (код, длина, смещение), а затем — данные парамет- ра Так как массив состоит из девяти длинных целых чисел без знака, мож- но записать до девяти IP-адресов Помните, что максимальный размер заго- ловка параметра IP составляет 40 байт Впрочем, наша структура занимает только 39 байт, поэтому система дополнит за вас заголовок до 32 разрядного слова (до 40 байт)
    struct ip_option_hdr
    {
    unsigned char code,
    unsigned char length,
    unsigned char offset,
    K

    2 6 4 ЧАСТЬ II Интерфейс прикладного программирования Winsock unsigned long addrs[9],
    } opthdr,
    ZeroMemory((char *)&opthdr, sizeof(opthdr));
    opthdr code = 0x7,
    opthdr length = 39;
    opthdr o f f s e t = 4, // Смещение на первый адрес (addrs)
    ret = setsockopt(s, IPPROT0_IP, IP_OPTIONS, (char *)&opthdr,
    sizeof(opthdr));
    После того как параметр задан, он применяется к любым пакетам, отправ- ляемым на данный сокет Также для обнаружения заданных параметров вы мо- жете вызвать getsockopt с IPJDPTIONS, впрочем, при этом не будут возвращены данные, хранимые в специфичных для параметра буферах Для извлечения дан- ных, заданных в параметрах IP, необходимо использовать простые сокеты
    (SOCK_RAW) Или задать параметр IPJHDRINCL — тогда заголовок IP возвраща- ется вместе с данными после вызова функции приема данных Winsock
    Параметр IP_HDRINCL
    Этот параметр (тип optval — BOOL, версия Winsock 2+) можно и получить, и задать Если он равен TRUE, то функция отправки включит заголовок IP пе- ред посылаемыми данными, а функция приема — вернет этот заголовок вме- сте с данными Так что при вызове функции send Winsock включите полный заголовок IP перед данными и правильно заполните каждое поле заголовка
    (рис 9-3) Этот параметр доступен только в Windows 2000 4 бита заголовка еджбы fTOS)
    жизни 0Ttj восьмибитный
    Ш йрвгокш
    Полная дляна в байтах —* 18 бит три однобитны*
    флага
    1б-5итная контрольная сумма заголовка
    32-битныи ff-адоес поаучателя
    Параметры IP (вимвсть)
    Даннь»
    Рис. 9-3. Заголовок IP

    Г Л А В А 9 Параметры сокета и команды управления вводом выводом 265
    Первое поле заголовка — версия IP (на данный момент, версия 4) Длина заголовка — количество 32-битных слов в заголовке Заголовок IP всегда должен быть кратен 32 бшам
    Следующее поле — тип службы, подробнее о котором — в описании па- раметра сокета IP_TOS Поле полной длины выражает длину заголовка IP и данных в байтах, а затем идет уникальный идентификатор каждого о т р а в - ленного IP-пакета Как правило, система увеличивает это значение с отправ- кой каждого пакета Поля флагов и смещения используются при разбивке IP- пакетов на пакеты меньшего размера Время жизни (поле TTL) ограничива- ет количество маршрутизаторов, через которые может пройти пакет При отправке пакета поле TTL каждый раз уменьшается маршрутизатором на 1,
    и когда значение достигает 0, передача прекращается Это ограничивает вре- мя, в течение которого пакет может передаваться по сети Поле протокола используется для демультиплексирования входящих пакетов Вот несколько допустимых протоколов, которые используют адресацию IP TCP, UDP, IGMP
    и1СМР
    Далее идет 16-битная контрольная сумма заголовка Она рассчитывается только для заголовка, без учета данных Следующие два поля — 32-битные
    IP-адреса отправителя и получателя Поле параметров IP имеет переменную длину и содержит дополнительные сведения (обычно о защите или марш- рутизации)
    Самый простой способ отправить заголовок IP вместе с данными — оп- ределить структуру, содержащую заголовок IP и данные, и передать ее в вы- зов send Этот параметр работает только в Windows 2000 (подробнее — в главе 13)
    Параметр IPJTOS
    Этот параметр (тип optval — int, версия Winsock 1+) можно и получить, и задать Он представляет собой тип службы (type of service, TOS) — поле в заголовке IP, используемое для обозначения некоторых характеристик па- кета Длина поля — 8 бит, оно разбито на три части трехбитное поле стар- шинства (которое игнорируется), четырехбитное поле TOS, и оставшийся бит (который должен быть равен 0) Назначение четырех бит TOS — сокра- тить задержку, увеличить производительность, повысить надежность и со- кратить издержки, причем одновременно нельзя задать более одного бита
    Если значение всех четырех бит равно 0, то подразумевается обычное обслу- живание RFC 1340 определяет биты, рекомендуемые для разных стандарт- ных приложений типа TCP, SMTP, NNTP и т п В RFC 1349 исправлены неко- торые положения RFC 1340
    Для интерактивных приложений (например, Rlogin или Telnet) может потребоваться сократить задержку Для любого вида передачи файлов, на- пример, FTP, важна максимальная производительность, а высокая надеж- ность необходима для управления сетью (SNMP) и протоколов маршрутиза- ции Наконец, новости Usenet (NNTP) — пример снижения издержек Пара- метр IPJTOS не доступен в Windows СЕ

    2 6 6 ЧАСТЬ II Интерфейс прикладного программирования Winsock
    При установке бит TOS на сокете, поддерживающем QoS, возникает до- полнительная проблема. Поскольку QoS использует старшинство IP для раз- личения уровней обслуживания, изменение этих значений разработчиками нежелательно. Поставщик услуг QoS перехватит вызов setsockopt с IPJTOS на
    QoS-сокете, чтобы проверить возможность замены. Подробнее о QoS — в главе 12.
    Параметр IPJTTL
    Этот параметр (тип optval int, версия Winsock 1+), представляющий собой
    IP-параметр времени жизни, можно и получить, и задать. Поле времени жиз-
    ни (time-to-live, TTL) представлено в заголовке IP. Дейтаграмма использует поле TTL, чтобы ограничить количество маршрутизаторов, через которые она может пройти, дабы предотвратить циклы маршрутизации (когда дей- таграмма передается по кругу). Каждый маршрутизатор, через который про- ходит дейтаграмма, уменьшает ее поле TTL на 1. После обнуления TTL дей- таграмма отбрасывается. Этот параметр не доступен в Windows СЕ.
    Параметр IP_MULTICAST_IF
    Этот параметр многоадресного интерфейса (тип optval unsigned long,
    версия Winsock 1+) и получает, и задает локальный интерфейс, откуда ло- кальный компьютер может отправлять любые данные для группы. Его имеет смысл использовать только на компьютерах с несколькими сетевыми ин- терфейсами (сетевыми адаптерами, модемами и т. п.). Параметр optval дол- жен быть длинным целым без знака, представляющим двоичный IP-адрес локального интерфейса. Для преобразования строкового адреса в десятич- но-точечной нотации в длинное целое без знака используйте функцию
    inet_addr.
    DWORD mcastIF;
    // Сначала присоедините сокеты к многоадресной группе mcastIF = inet_addr("129.113.43.120");
    ret = setsockopt(s, IPPR0T0_IP, IP_MULTICAST_IF, (char *)&mcastIF,
    sizeof(mcastlF));
    Параметр IP_MULTICAST_TTL
    Этот параметр (тип optval int, версия Winsock 1+) можно и получить, и задать. Он определяет время жизни на пакетах многоадресной рассылки для этого сокета и напоминает уже знакомый вам TTL IP, но в отличие от последнего, применяется только к групповым данным, отправленным с дан- ного сокета. TTL также предотвращает циклы маршрутизации, но при мно- гоадресном вещании сужает область распространения данных. Поэтому для получения дейтаграмм члены многоадресной группы должны нахо- диться в пределах «диапазона». Стандартное значение TTL для групповых дейтаграмм — 1.

    Г Л А В А 9 Параметры сокета и команды управления вводом-выводом 267
    Параметр IP_MULTICAST_LOOP
    Этот параметр (тип optval BOOL, версия Winsock 1+) можно и получить, и задать. Если он равен TRUE (по умолчанию), то данные, отправленные на групповой адрес, будут отражены во входящем буфере сокета. Если присво- ить этому параметру значение FALSE, то никакие отправленные сокетом дан- ные не попадут в его очередь входящих данных.
    Параметр IP_ADD_MEMBERSHIP
    Этот параметр (тип optval struct ipjnreq, версия Winsock 1+) можно толь- ко задать — это способ добавить сокет к многоадресной группе IP в Winsock
    1. Создайте сокет с семейством адресов AFJNET и типом SOCKJDGRAM в вы- зове функции socket. Для добавления сокета в многоадресную группу, исполь- зуйте структуру:
    struct ipjnreq
    {
    struct in_addr imrjnultiaddr;
    struct m_addr imr_interface;
    >;
    Здесь поле imrjnultiaddr — двоичный групповой адрес, a imr_interface
    локальный интерфейс, на котором следует отправлять и получать групповые данные Подробнее о допустимых групповых адресах — в главе 11. Поле
    imrjnterface — двоичный IP-адрес локального интерфейса, либо значение
    INADDR_ANYдля выбора интерфейса по умолчанию.
    Параметр IP_DROP_MEMBERSHIP
    Этот параметр (тип optval struct ipjnreq, версия Winsock 1+) можно толь- ко задать. Он противоположен по назначению IP_ADD_MEMBERSHIP и уда- ляет сокет из данной группы IP. При его вызове со структурой ipjnreq, со- держащей значения, которые использовались для регистрации в данной группе, сокет 5 будет удален из нее. Подробнее — в главе 11.
    Параметр IP_DONTFRAGMENT
    Этот параметр (тип optval — BOOL, версия Winsock 1+) можно и получить, и задать. Если он равен TRUE, сети запрещается фрагментировать дейтаграм- му IP в ходе передачи. Впрочем, если размер дейтаграммы больше макси-
    мального блока передачи даннълх (maximum transmission unit, MTU) и флаг
    IP «не фрагментировать» задан внутри заголовка IP, отправка будет приос- тановлена и появится сообщение об ошибке ICMP и необходимости фраг- ментации. Эта параметр не доступен в Windows СЕ.
    Уровень параметров IPPROTOJTCP
    К этому уровню относится лишь один параметр, применимый только к пото- ковым сокетам (SOCK_STREAM), принадлежащим к семейству адресов AFJNET.
    Он доступен во всех версиях Winsock и поддерживается всеми платформа-
    Ми Win32.

    2 6 8 ЧАСТЬ II Интерфейс прикладного программирования Winsock
    Параметр TCPJIODELAY
    Чтобы увеличить эффективность и пропускную способность за счет умень- шения издержек, система выполняет алгоритм Nagle, который позволяет «ук- рупнить > пакеты TCP Издержки в том, что длина заголовка TCP для каждого пакета — 20 байт Расточительно отправлять сообщения по 2 байта с 20-бай- товым заголовком, поэт ому когда приложение запрашивает порцию данных,
    система сможет накапливать данные в течение некоторою времени перед фактической отправкой по сети Если дополнительные данные за указанный период времени не накопятся отправка произойдет безусловно
    Недоста i ок этого алгоритма — замедление подтверждений о получении данных TCP Но поскольку узел будет жда гь накопления данных для отправ- ки партнеру, он может присоединить уведомление АСК к следующей порции данных, а не отправить ею сразу в отдельном пакете
    Параметр TCP_NODELAY (тип optval BOOL, версия Winsock 1+) можно и получить, и задать Если он равен TRUE, алгоритм Nagle отключается Этот алгоритм порой отрицательно воздействует на какое-либо сетевое приложе- ние, которое отправляет данные в от носительно небольшом количестве и ожидает своевременного ответа Классический пример — Telnet, ин герактив- ное приложение, позволяющее пользователю войти на удаленную машину и давать ей команды Как правило, пользователь нажимает на клавиши по несколько раз в секунду, и алгори гм Nagle такой сеанс просто бы «тормозил»
    Уровень параметров NSPROTOJPX
    Описанные в этом разделе параметры сокета специфичны для Microsoft-рас- ширения интерфейса сокетов Window IPX/SPX и предназначены для совме- стимости с существующими приложениями Впрочем, их не рекомендуются использовать, поскольку они гарантированно работают только со стеком
    Microsoft IPX/SPX Приложение, использующее эти расширения, не сможет работать в других реализациях IPX/SPX Эти параметры определены в файле
    WSNwLink h, который должен быть включен после Winsock h и Wsipx h
    1   ...   20   21   22   23   24   25   26   27   ...   50


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