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

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

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

Введение

Перед вами книга, посвященная сетевым функциям Windows 9х, NT 4, 2000 и СЕ Она предназначена в первую очередь опытным программистам и специалистам по сетям Впрочем, для начинающих она может послужить полезным справочным пособием и даже вводным курсом по сетевым функциям

Очем эта книга

Вкниге три части, посвященные работе в сети с применением NetBIOS и перенаправителя Windows, Winsock и RAS соответственно

Вглаве 1 рассматривается NetBIOS По нашему опыту работы в команде поддержки разработчиков Microsoft мы знаем, что многие компании все еще используют эту технологию Между тем, до сих пор нет адекватного руководства по написанию приложений NetBIOS для платформ Win32 В главе 1 также приводятся методы написания надежных и переносимых приложений (с учетом, что многие разработчики используют NetBIOS именно для связи с устаревшими системами)

Главы 2-4 посвящены перенаправителю Windows, почтовым ящикам и именованным каналам Как вы знаете, почтовые ящики и именованные каналы основаны на перенаправителе Мы решили посвятить перенаправителю целую главу, чтобы предоставить читателю базовую информацию о том, как три эти технологии соотносятся друг с другом Почтовые ящики — это ненадежный однонаправленный ориентированный на сообщения интерфейс прикладного программирования, не зависимый от доступных в системе протоколов Именованные каналы обладают более широкими возможностями, обеспечивая надежную двустороннюю дейтаграммную или поточную передачу данных Эти каналы используют средства безопасности Windows NT за счет перенаправителя, на что не способен ни один другой сетевой APIинтерфейс

Вторая часть книги посвящена API-интерфейсу Winsock Глава 5 — это введение в Winsock, где рассказывается о наиболее распространенных протоколах Winsock Все приложения Winsock должны создавать сокет для осуществления связи В этой главе мы приводим основную информацию о возможностях каждого протокола, а в главе б — подробное описание, как создать сокет и разрешить имя для каждого типа протокола

В главе 7 — самое интересное Здесь мы представляем базовую модель программирования клиент-сервер и описываем большинство функций Winsock, которые относятся к установлению и приему связи, передаче данных и г п Далее, в главе 8 рассказывается о методах ввода-вывода в Winsock Так как глава 7 задумывалась как введение в указанную тему, в ней обсуждаются только простейшие методы ввода-вывода В главе 8, напротив, эти методы описаны под-

Введение

робно Если вы новичок в работе с Winsock, то главы 5-7 помогут вам овладеть основами использования этого API-интерфейса

Остальные главы этой части книги посвящены особым аспектам и возможностям Winsock Параметры сокетов и команды управления вводом-вы- водом рассмотрены в главе 9 Именно здесь вы найдете описание большинства команд, влияющих на работу сокета или даже протокола Надеемся, эта глава будет полезна, как в учебных, так и в справочных целях

Вглаве 10 рассмотрена регистрация и разрешение имен служб в адреса базового протокола в Winsock 2 Это независимый от протокола метод Распространение Windows 2000 и Active Directory придает данной главе особую значимость

Глава 11 посвящена связи «точка — много точек>>, включая многоадресное IPвещание и ATM В главе 12 описана захватывающая технология — Quality of Service (QoS), позволяющая гарантировать выделение пропускной способности сети для приложений В главе 13 рассказывается о простых 1Р-соке- тах мы рассматриваем, как приложения Winsock могут использовать их для работы с протоколами ICMP и IGMP, а также другие аспекты программирования при помощи простых сокетов

Вглаве 14 описан интерфейс поставщика службы для Winsock — средства, при помощи которого программист может задать уровень между Winsock и поставщиками служб более низких уровней (например, TCP/IP) для управления работой сокета и протокола, регистрацией и разрешением имен Этот сложный инструмент позволяет расширить функциональность Winsock

И наконец, в главе 15 обсуждается элемент управления Microsoft Visual Basic для Winsock Мы решили включить эту главу в книгу, так как убедились, что многие разработчики до сих пор полагаются на Visual Basic и этот элемент Функциональность элемента Winsock ограничена и не позволяет использовать дополнительные новые свойства Winsock, но он незаменим для тех, кому требуется простая и легкая в использовании сетевая связь в Visual Basic

Часть III посвящена клиентскому серверу удаленного доступа (Remote Access Server, RAS) Мы решили включить в книгу главу о RAS из-за популярности Интернета и широкого распространения коммутируемого доступа к нему Возможность коммутируемого доступа в сетевом приложении очень полезна, так как упрощает работу пользователя с программой То есть конечному пользователю не придется думать, как установить соединение, чтобы работать с сетевым приложением

В конце книги — три приложения Приложение А — справочник по командам NetBIOS, который, по нашему мнению, для программистов бесценен В нем перечислены параметры ввода и вывода для каждой команды В приложении В описаны новые вспомогательные функции IP, выдающие полезную информацию о сетевой конфигурации текущего компьютера Приложение С — справочник по кодам ошибок Winsock с подробным описанием отдельных ошибок и возможных причин их возникновения

XIV Введение

Мы надеемся, что наша работа станет для вас ценным учебным и справочным пособием. Думаем, что это наиболее полная книга о сетевом программировании для Windows.

Как пользоваться прилагаемым компакт-диском

В тексте книги мы часто приводим примеры программ, иллюстрирующие работу с обсуждаемыми сетевыми API-интерфейсами. Эти примеры записаны на прилагаемый компакт-диск. Для их установки вставьте компакт-диск в дисковод, и программа Autorun запустит программу установки. Программу установки можно также инициировать вручную, запустив файл PressCD.exe из корневого каталога компакт-диска. Вы вправе установить образцы кода на компьютер или работать с ними прямо с компакт-диска (из папки Examples\Chapters\Chapter XX).

ПРИМЕЧАНИЕ Для работы с компакт-диском необходима 32-битная ОС Windows.

Наряду с примерами программ в состав компакт-диска ыключена последняя версия Microsoft Platform SDK. Мы сделали это, потому что многие из наших примеров рассчитаны на современные заголовочные файлы и библиотеки, которые появились только после Windows 2000 Beta 3.

Поддержка

Авторы приложили все усилия, чтобы обеспечить точность содержания книги и прилагаемого к ней компакт-диска. Издательство Microsoft Press публикует постоянно обновляемый список исправлений и дополнений к своим книгам по адресу http://mspress.microsoft.com/support/.

Многие определения функций и таблицы в книге адаптированы или переизданы с разрешения и при активном участии группы документирования Microsoft Platform SDK. Часть материала основана на предварительно разработанной документации и может претерпеть изменения. Информацию, обновления и исправления ошибок по последней версии SDK см. на Webузле MSDN по адресу: http://msdn.microsoft.com/developer/sdk/platform.asp.

Если все же у вас возникнут вопросы или вы захотите поделиться своими предложениями или комментариями, обращайтесь в издательство Microsoft Press по одному из этих адресов:

mspinput@microsoft.com

Microsoft Press

Attn: Network Programmingfor Microsoft Windows Editor One Microsoft Way

Redmond, WA 98052-6399

Ч А С Т Ь

I

УСТАРЕВШИЕ СЕТЕВЫЕ API

о

Первая часть издания посвящена сетевому интерфейсу NetBIOS, перенаправителю и типам использующих его сетевых соединений. Хотя в книге в основном обсуждается программирование средствами Winsock, мы включили в нее часть I, так как устаревшие сетевые API имеют некоторые преимущества перед Winsock.

В главе 1 рассматривается интерфейс NetBIOS, который, как и Winsock, является независимым от протокола сетевым API. NetBIOS обеспечивает асинхронные вызовы, а также совместимость со старыми операционными системами типа OS/2, DOS и др. В главе 2 обсуждается перенаправитель, с которым связаны две следующие темы: почтовые ящики (глава 3) и именованные каналы (глава 4). Перенаправитель обеспечивает независимый от транспорта ввод-вывод файлов. Почтовые ящики — это простой интерфейс, который помимо прочего поддерживает широковещание и однонаправленное взаимодействие между компьютерами под управлением Windows. Наконец, именованные каналы дают возможность использовать двусторонний канал связи, который поддерживает функции безопасности Windows.

Г Л А В А

Интерфейс NetBIOS

Network Basic Input/Output System (NetBIOS) — стандартный интерфейс прикладного программирования (application programming interface, API), разработанный Sytek Corporation для IBM в 1983 г. NetBIOS определяет программный интерфейс для сетевой связи, но не обусловливает физический способ передачи данных по сети. В 1985 г. IBM предприняла попытку сформировать цельный протокол — создала NetBIOS Extended User Interface (NetBEUI), интегрированный с интерфейсом NetBIOS. Программный интерфейс NetBIOS вскоре приобрел такую популярность, что поставщики ПО начали реализовать его для других протоколов, таких как TCP/IP и IPX/SPX. В настоящее время NetBIOS используют платформы и приложения во всем мире, включая многие компоненты Windows NT, Windows 2000, Windows 95 и Windows 98.

ПРИМЕЧАНИЕ Windows СЕ не дает возможности использовать NetBIOS API, хотя поддерживает транспортный протокол TCP/IP, имена NetBIOS и механизм их разрешения.

В Win32 интерфейс NetBIOS обеспечивает обратную совместимость со старыми приложениями. В этой главе обсуждаются главные принципы программирования с помощью NetBIOS, начиная с имен NetBIOS и номеров LANA. Мы рассмотрим основные услуги, предлагаемые NetBIOS, включая те, что обеспечивают связь с установлением соединения или без такового (дейтаграммные). В каждом разделе будет приведен простой клиент-серверный пример. Завершит главу обзор типичных ошибок. В приложении А вы найдете список команд NetBIOS с обязательными параметрами и кратким описанием.

Сетеваямодель0SI

Модель Open Systems Interconnect (OSI) обеспечивает высокоуровневое представление сетевых систем. Ее семь уровней полностью описывают фундаментальные сетевые концепции: от приложения до способа физической передачи данных. Вот эти уровни:

Яприкладной — предоставляет пользовательский интерфейс для передачи данных между программами;

представительский — форматирует данные;

Ш сеансовый — управляет связью между двумя узлами;

IJl-\•#r-i

Ш транспортный — обеспечивает передачу данных (надежную или ненадежную);

И сетевой — поддерживает механизм адресации между узлами и маршрутизацию пакетов данных;

канальный — управляет взаимодействием между узлами на физическом уровне; отвечает за группировку данных, передаваемых по физическому носителю;

II физический — физический носитель, ответственный за передачу данных в виде электрических сигналов.

В этой модели NetBIOS относится к сеансовому и транспортному уровням.

Интерфейс MicrosoftNetBIOS

Как уже упоминалось, существуют реализации NetBIOS API для разных сетевых протоколов, что делает интерфейс независимым от протокола. Иначе говоря, если вы разработали приложение согласно спецификации NetBIOS, оно может использовать протоколы TCP/IP, NetBEUI или даже IPX/SPX. Эта полезная особенность позволяет корректно написанному приложению NetBIOS выполняться почти на любом компьютере, независимо от физической сети. Однако есть несколько нюансов. Чтобы два приложения NetBIOS могли связаться друг с другом по сети, они должны выполняться на рабочих станциях, имеющих по крайней мере один общий транспортный протокол. Например, если на компьютере Джона установлен только TCP/IP, а на компьютере Мэри — только NetBEUI, приложения NetBIOS на компьютере Джона не смогут связаться с приложениями на компьютере Мэри.

Кроме того, только определенные протоколы реализуют интерфейс NetBIOS. Например, Microsoft TCP/IP и NetBEUI делают это по умолчанию, a IPX/ SPX — нет. Поэтому Microsoft предлагает реализующую этот интерфейс версию IPX/SPX, что следует учесть при проектировании сети. При установке протоколов обычно видно, поддерживает ли версия протокола IPX/SPX возможности NetBIOS. Например, вместе с Windows 2000 поставляется NWLink IPX/SPX/NetBIOS Compatible Transport Protocol — то, что этот протокол поддерживает NetBIOS, прямо вытекает из его названия. В Windows 95 и Windows 98 в окне свойств протокола IPX/SPX есть флажок, с помощью которого включается поддержка NetBIOS для IPX/SPX.

Важно, что NetBEUI — немаршрутизируемый протокол. Если между клиентом и сервером есть маршрутизатор, приложения на этих компьютерах не смогут связаться. Маршрутизатор будет отбрасывать пакеты по мере их приема. TCP/IP и IPX/SPX — маршрутизируемые протоколы и не имеют такого ограничения. Так что если вы твердо запланировали использовать NetBIOS, задействуйте в сети по крайней мере один из маршрутизируемых транспортных протоколов. Характеристики протоколов и рекомендации по их выбору мы приводим в главе 6.

ЧАСТЬ I Устаревшие сетевые API

Номера LANA

Какое отношение имеют транспортные протоколы к NetBIOS с точки зрения программирования' Ключ к пониманию NetBIOS — номера сетевых адаптеров (LAN Adapter, LANA). В первоначальных реализациях NetBIOS каждому физическому сетевому адаптеру присваивалось уникальное значение — номер LANA. В Win32 это стало проблематичным, так как рабочая станция может иметь и множество сетевых протоколов, и множество плат сетевого интерфейса.

Номер LANA соответствует уникальным сочетаниям сетевого адаптера с транспортным протоколом. Так, если рабочая станция имеет две сетевых платы и два поддерживающих NetBIOS транспорта (например, TCP/IP и NetBEUI), будет присвоено четыре номера LANA. Номера могут соответствовать сочетаниям адаптера с протоколом примерно следующим образом:

0 — «TCP/IP — сетевой адаптер 1»;

1 — «NetBEUI — сетевой адаптер 1»;

2 — «TCP/IP — сетевой адаптер 2»;

3 — «NetBEUI — сетевой адаптер 2».

Номера LANA лежат в диапазоне от 0 до 9, и операционная система назначает их без какого-либо определенного порядка Кроме LANA 0, который имеет особый смысл — это номер «по умолчанию» Когда появился интерфейс NetBIOS, большинство операционных систем поддерживало единственный номер LANA и многие приложения были жестко запрограммированы на работу только с LANA 0. Для обратной совместимости вы можете вручную назначить LANA 0 конкретному протоколу

В Windows 95 и Windows 98 можно открыть диалоговое окно свойств сетевого протокола с помощью значка Network в Control Panel. Выберите вкладку Configuration в диалоговом окне Network, затем из списка компонентов — сетевой протокол и щелкните кнопку Properties Вкладка Advanced диалогового окна свойств для каждого протокола, поддерживающего NetBIOS, содержит флажок Set This Protocol To Be The Default Protocol Пометка флажка перестраивает привязки протоколов так, чтобы протоколу по умолчанию был назначен LANA 0 Этот флажок можно пометить только для одного протокола Поскольку Windows 95 и Windows 98 поддерживают Plug-and-Play, не требуется явно задавать приоритет протоколов.

Windows NT 4 допускает большую гибкость в установке NetBIOS На вкладке Services диалогового окна Network выберите NetBIOS Interface из списка Network Services и щелкните кнопку Properties. В диалоговом окне NetBIOS Configuration вы можете явно назначить номера LANA всем сочетаниям сетевого интерфейса с транспортным протоколом В этом диалоговом окне сетевой интерфейс определяется именем его драйвера. Впрочем, имена протоколов не всегда говорят сами за себя. На рис 1 -1 показано диалоговое окно NetBIOS Configuration. Оно свидетельствует: на компьютере установлено два сетевых адаптера и три транспортных протокола — TCP/IP (NetBT), NetBEUI (Nbf) и IPX/SPX (NwlnkNb). Щелкнув кнопку Edit, вы можете вручную назначить номера LANA для отдельных протоколов.

ГЛАВА 1 Интерфейс NetBIOS

NetBIOS Configuration

Usethts здвеп tochangeHie lane numbei on the istedNeiffiOS networkraises

 

i>erj NetworkBisute „ „ . „ _ _ „ ,

000

Nbf->IEEPRO->IEEPR02

001

NetBT •>IEEPR0 •> IEEPRO2

002

NwlnkNb >Nwlnklpx

003

Nbf->E100B•>E100B1

004

NetBT->E100B->E100B1

Рис. 1-1. Диалоговое окно NetBIOS Configuration

Windows 2000 также позволяет напрямую назначать номера LANA. В Control Panel щелкните значок Network And Dial-up Connections. Далее выберите в меню Advanced команду Advanced Settings и в открывшемся диалоговом окне настройте параметры на вкладке LANA numbers.

При разработке устойчивого приложения NetBIOS всегда пишется код, который может обрабатывать соединения на любом номере LANA. Предположим, Мэри пишет серверное приложение NetBIOS, которое слушает клиентов на LANA 2. На компьютере Мэри LANA 2 соответствует протоколу TCP/ IP. Далее Джон решает написать клиентское приложение для связи с сервером Мэри, так что его приложение будет связываться через LANA 2 на его рабочей станции; однако, LANA 2 на компьютере Джона соответствует NetBEUI. Приложения не смогут связаться друг с другом, хотя им доступны протоколы TCP/IP и NetBEUI. Чтобы устранить это несоответствие, серверное приложение Мэри должно слушать клиентские соединения на каждом доступном номере LANA на рабочей станции Мэри. Аналогично, клиентское приложение Джона должно пытаться связаться на каждом номере LANA, доступном на его компьютере. Так Мэри и Джон смогут гарантировать успех связи их приложений. Конечно, наличие кода, который может обрабатывать соединения на любом номере IANA не означает, что этот код будет работать, если у двух компьютеров не найдется ни одного общего протокола.

Имена NetBIOS

Теперь перейдем к именам NetBIOS. Процесс — или, если угодно, приложение — регистрирует имя на каждом номере LANA, с которым ему требуется связаться. Имя NetBIOS имеет длину 16 символов; 1б-й символ зарезервирован для специальных целей. При добавлении имени в таблицу имен, вы должны очистить буфер имен. В среде Win32 каждый процесс имеет таблицу имен NetBIOS для каждого доступного номера LANA. Добавление имен.и для LANA 0 означает, что приложение доступно только клиентам, соединяющимся на этом LANA 0. Максимально к каждому номеру LANA могут быть Добавлены 254 имени, они пронумерованы от 1 до 254 (0 и 255 зарезерви-

Устаревшие сетевые API

рованы для системы) Впрочем, каждая ОС задает максимальный номер по умолчанию, меньший 254 Вы вправе его изменить при переопределении каждого номера LANA

Есть два типа имен NetBIOS уникальное и групповое Никакой другой процесс в сети не может зарегистрировать уже имеющееся уникальное имя будет выдана ошибка дублирования имени Как вам, наверное, известно, имена компьютеров в сетях Microsoft — имена NetBIOS Когда компьютер загружается, он регистрирует свое имя на локальном сервере Windows Internet Naming Server (WINS), который сообщает об ошибке, если другой компьютер уже использует то же имя Сервер WINS поддерживает список всех зарегистрированных имен NetBIOS

Вместе с именем могут храниться и сведения о протоколе Например, в сетях TCP/IP WINS запоминает IP-адрес компьютера, зарегистрировавшего имя NetBIOS Если сеть сконфигурирована без сервера WINS, компьютеры проверяют, нет ли в сети такого же имени, путем широковещательной рассылки сообщения Если никакой другой компьютер не оспаривает сообщение, сеть позволяет отправителю использовать заявленное имя

Групповые имена используются, чтобы отправлять или, наоборот, получать данные, предназначенные для множества получателей Имя группы не обязательно должно быть уникальным Групповые имена используются для многоадресной рассылки

16-й символ в именах NetBIOS определяет большинство сетевых служб Microsoft Имена служб и групп для WINS-совместимых компьютеров сервер WINS регистрирует напрямую, а для регистрации имен других компьютеров применяется широковещание по локальной подсети Чтобы получить информацию о зарегистрированных на локальном (или удаленном) компьютере именах NetBIOS, используйте утилиту Nbtstat В табл 1-1 приведены сведения о зарегистрированных именах NetBIOS, которые команда Nbtstat -n выдала для пользователя Davemac, вошедшего в компьютер, конфигурированный как основной контроллер домена и работающий под управлением Windows NT Server вместе с Internet Information Server

Табл. 1-1. Таблица имен NetBIOS

Имя

16-йбайт

Тип имени

Служба

DAVEMAC1

<00>

Уникальное

Имя службы рабочей станции

DAVEMAC1

<20>

Уникальное

Имя службы сервера

DAVEMACD

<00>

Групповое

Имядомена

DAVEMACD

<1C>

Групповое

Имя контроллера домена

DAVEMACD

<1B>

Уникальное

Имя координатора сети

DAVEMAC1

<03>

Уникальное

Имяотправителя

Inet~Services

<1C>

Групповое

Групповое имя Internet Information

 

 

 

Server

IS~DAVEMAC1

<00>

Уникальное

Уникальное имя Internet Information

DAVEMAC1+++++++

 

Server

<BF>

Уникальное имя сетевого монитора

 

 

 

 

Г Л А ВА 1 Интерфейс NetBIOS

Утилита Nbtstat устанавливается вместе с протоколом TCP/IP Она може! также опрашивать таблиц имен на удаленных компькл ерах, используя параметр -а с именем удаленного компьютера или параметр -А с ei о IP-адресом Перечислим стандартные значения 1б-го байта, добавляемые в конец уникальных NetBIOS-имен компьютеров разными сетевыми службами Microsoft

Ш <00> — имя службы рабочей станции (NetBIOS-имя компьютера),

<03> — имя службы сообщений, используемое при получении и отправке сообщений, зарегистрировано сервером WINS для службы сообщений на клиенте WINS и обычно добавляется в конец имени компьютера и во шедшего в систему пользователя,

<1В> — имя координатора сети (master browser) домена, определяет основной контроллер домена и указывает, каких клиентов и других обозревателей использовать для контакта с координатором сети домена,

Я<0б> — серверная служба удаленного доступа (RAS),

<1F> — служба сетевого динамического обмена данными (Network Dynamic Data Exchange, NetDDE),

Ш <20> — имя службы на сервере, используемое для предоставления точек подключения к общим файлам,

<21> — клиент RAS,

<ВЕ> — агент сетевого монитора,

<BF> — утилита Network Monitor (Сетевой монитор)

Атеперь перечислим заданные по умолчанию символы 1б-го байта, добавляемые в конец обычно используемых групповых имен NetBIOS

<1С> — групповое имя домена, содержащее список определенных адресов компьютеров, которые его зарегистрировали Контроллер домена это имя регистрирует WINS обрабатывает его как доменную группу каждый член группы должен индивидуально обновить свое имя или будет исключен Доменная группа ограничена 25 именами Если в результате репликации статическое 1С-имя конфликтует с динамическим 1С-именем на другом сервере WINS, для соответствующих участников добавляется комбинированная запись, которая помечается как статическая Если запись статическая, члены группы не должны обновлять свои IP-адреса

Ш <1D> — имя координатора сети (master browser), используемое клиентами для обращения к нему В подсети может быть лишь один координатор Серверы WINS возвращают положительный ответ на регистрацию имени домена, но не сохраняют это имя в своих базах данных Если компьютер посылает запрос на имя домена серверу WINS, тот возвращает отрицательный ответ Если компьютер, сделавший запрос, сконфигурирован как h- или m-узел, он затем выполняет широковещателыгую рассылку запроса имени, чтобы разрешить его Тип узла определяет способ разрешения имени клиентом Клиенты, сконфигурированные для разрешения в режиме b-узла, выполняют широковещательную рассылку пакетов для оповещения о себе и разрешения имен NetBIOS При разрешении в ре-

I