Очередная модификация стандарта может перевернуть мир сетевых технологий.
Если бы версии программного обеспечения штамповались как телевизионные сериалы, то беды было бы не миновать. К счастью, очередная версия программы или приложения (в отличие от кино) обычно лучше прежней. То же самое справедливо и по отношению к Winsock 2.0. В 1991 году Winsock Group разработала определение интерфейса для сетевых приложений на базе Microsoft Windows. Возникновение стандарта Winsock 1.1 для доступа по TCP/IP в Internet из-под Windows относится к началу 1993 года. Стандарт оказался чрезвычайно успешным, и его популярность растет день ото дня.
Winsock 2.0 обещает дать еще большие, нежели его предшественник, выгоды администраторам сети и пользователям. Новый стандарт позволит увеличить производительность имеющихся приложений, упростить внедрение различных сетевых сред, а также обеспечить качество услуг (QOS) и протокольно-независимую групповую адресацию (для передачи мультимедиа по Internet).
Winsock 2.0 позволит создавать действительно независящие от транспортных протоколов приложения, работающие с TCP/IP, IPX/SPX, DECnet, OSI, NetBEUI, AppleTalk, ATM, ISDN и другими сетевыми средами. Большая эффективность таких приложений должна достигаться за счет совмещенного ввода/вывода и разделяемых сокетов. Качество услуг будет заложено в приложение, так что приложение само сможет определять когда и какие данные посылать и какой объем данных сеть в состоянии передать. Приложения в соответствии со стандартом Winsock 2.0 будут обладать мощным интеллектом.
Группа Winsock Group состоит из разработчиков и поставщиков операционных систем, сетевого программного обеспечения и приложений. Образованная осенью 1991 года, группа первночально насчитывала 30 членов, сегодня в ее составе несколько сотен представителей. Члены группы встречаются несколько раз в год; это открытый форум, на котором поставщики ПО имеют возможность тестировать приложение на совместимость с другими продуктами. Группа разработала спецификацию, реализованную как поставщиками коммуникационного оборудования и услуг, так и разработчиками программного обеспечения.
МОЛОДЫЕ ГОДЫ
Winsock 1.1 дал толчок к развитию World Wide Web. Без Winsock "Паутина" и Internet оставались бы коммуникационной средой исключительно для правительственных агенств, университетов и крупных корпораций, обслуживающими только пользователей рабочих станций под Unix. Winsock 1.1 позволил получить доступ в Internet обычному пользователю ПК под Windows.
1Winsock 1.1 предоставил инженерам инструменты для создания приложений, по-новому разделяющих данные через TCP/IP. Студенты и прочие бескорыстные личности разработали приложения, дающие ПК под Windows мощь коммуникаций подобно принятой в Unix. В результате такие продукты и сервисные программы, как электронная почта, ftp, gopher, archie, veronica, finger, NFS, группы новостей, X-серверы на базе ПК, эмуляция терминала и программы просмотра Web, доступны теперь и для корпоративных, и для обычных пользователей ПК. Сочетание эффективности ПК и коммуникаций TCP/IP стало реальностью.
ЧТО НОВОГО В WINSOCK 2.0?
Если цель Winsock 1.1 состояла в решении проблемы, то цель Winsock 2.0 - сделать сетевую среду лучше, быстрее и надежнее. Оглушительный успех Winsock 1.1 подтолкнул создателей к решению добавить к стандарту поддержку других транспортных протоколов и новые функциональные возможности.
Приложения Winsock могут поддерживать отличные от TCP/IP транспортные протоколы и обобщенные сервисы распознавания имен. Кроме того, спецификация дает определения опций для высокопроизводительных приложений.
Winsock был расширен с целью поддержки новейших коммуникационных сред, в их числе беспроводные устройства и сети на базе ATM и ISDN, которые, в свою очередь, осуществляют новые важные функции, например передачу мультимедиа с обеспечением качества услуг.
Одно из основных требований Winsock 2.0 - создание такого API, при котором разработчики смогли бы создавать не зависящие от транспортного протокола приложения. Тогда пользователи выбрали бы приложения на основе их функциональных достоинств, а не того, какие транспортные протоколы они поддерживают. В этом случае управление многопротокольной сетью для администраторов сети стало бы значительно проще. Не менее важно и обеспечение обратной совместимости, как двоичной, так и кодов, для имеющихся приложений Winsock 1.1.
Несколько сот компаний, в том числе Stardust Technologies, Microsoft, Intel, Novell и SunSoft, совместно работали над определением наиболее полного из когда-либо завершенных API транспортного уровня. Спецификацию Winsock 2.0 можно найти во множестве узлов Internet, список которых приводится в Таблице 1.
Для обеспечения обратной совместимости интерфейс Winsock 1.1 полностью включен в спецификацию 2.0. Однако Winsock 1.1 API - это только начало. Архитектура Winsock 1.1 была значительно изменена в версии 2.0 с целью поддержки нескольких протоколов, а также независящего от протокола распознавания имен. Спецификация согласована с архитектурой открытых систем Windows Open System Architecture (WOSA) компании Microsoft.
Microsoft, одна из учредительниц Winsock Group, решила в качестве основной стратегии в области коммуникационных API выбрать Winsock вместо NetBIOS. В результате WOSA включает Winsock как часть открытого комплекта API компании. Например, за исключением первой версии, Windows NT имеет 16-ти и 32-разрядные возможности Winsock, а в Windows 95 возможности Winsock заложены непосредственно в коммуникационную технологию.
Архитектура Winsock 2.0 (см. Рис. 1) делит подсистему Winsock на два базовых уровня: динамически компонуемые библиотеки (DLL), обеспечивающие Winsock API, и ряд поставщиков служб, подключаемых снизу к DLL с помощью интерфейса обеспечения служб (SPI). Как следствие, определение Winsock 2.0 API состоит из трех разделов: определение Winsock 2.0 API, определение Winsock 2.0 SPI и специфических для транспортных протоколов добавлений.
Возможности Winsock 2.0 реализованы пока только в средах Windows NT и Windows 95 (Win32). Так как Winsock 2.0 должен был быть обязательно совместим с Winsock 1.1 как в кодах, так и бинарно, 16-разрядная подсистема операционных систем Win32 будет поддерживать 16-разрядные приложения Winsock 1.1. Двоичная совместимость с 16-разрядным Winsock 1.1 достигается при помощи переадресации вызовов Winsock 1.1 API через подсистему Winsock 2.0 соответствующему поставщику служб TCP/IP.
ЭФФЕКТИВНОСТЬ И ПРОТОКОЛЫ
В соответствие с Winsock 1.1 ввод/вывод осуществляется одним из двух методов. Приложение может использовать блокирующие сокеты, в этом случае процедура Winsock, напри- мер Select() или Recv(), будет пытаться выполнить команды GetMessage()/DispatchMessage до тех пор, пока не прибудут данные. Альтернативный (и рекомендуемый) метод заключается в использовании оконных асинхронных процедур, в которых окно получает сообщение при прибытии данных.
Оба метода имеют свои достоинства и недостатки, но высокоэффективным не один из них не назовешь. Поэтому тот факт, что высокопроизводительные приложения могут использовать также и новые возможности Winsock 2.0 весьма и весьма отраден.
Иллюстрацией к сказанному служит следующий пример: перекрывающийся ввод/вывод сокращает передачу данных между буферами и число циклов ЦПУ, не говоря уже о значительном повышении производительности. Используемый вместе с механизмом объектов событий на базе Win32 перекрывающийся ввод/вывод обеспечивает быструю многопоточную передачу данных. Наилучший способ получения данных состоит в использовании WSARecv() вместе с объектами событий Win32. Поступающие данные копируются прямо в буфер данных приложения с сохранением копии, и ожидающий поток немедленно активизируется.
В Winsock 1.1 имеется много механизмов распознавания служб и имен для различных сетевых протоколов. Name Space SPI позволяет получить доступ к нескольким службам распознавания имен через единый API. Как провайдеры создадут поставщиков служб для Domain Name Service (DNS), NetWare Directory Services (NDS) и X.500, все возможности распознавания имен станут доступны через Winsock 2.0 Name Space API.
Эта категория новых API слишком обширна, чтобы мы могли рассмотреть ее подробно. Основная их функция состоит в обеспечении регистрации служб в рамках пространства имен и нахождения клиентом конкретной службы в пределах доступного ему пространства имен.
Отличительной особенностью Winsock 2.0 является поддержка множества протоколов. Новый протокол может быть включен в подсистему Winsock 2.0 посредством создания поставщика служб в соответствии с определением Winsock 2.0 SPI. Создав поставщика услуг, разные провайдеры могут обеспечить параллельный доступ к каждому из своих транспортных протоколов. Winsock 2.0 определяет однородный исчерпывающий набор API для программирования в соответствии с несколькими транспортными протоколами одновременно.
С целью обеспечения доступа через Winsock к специфическим для транспортного протокола возможностям отдельные разделы приложения Winsock 2.0 описывают особенности транспортных протоколов. TCP/IP, IPX/SPX, DECnet и OSI уже включены в Winsock 2.0. Вместе с тем некоторые поставщики ведут работу над включением своих протоколов в Winsock 2.0. Это означает, что, например, доступ к TCP/IP и IPX/SPX реально получить одновременно через Winsock 2.0 API. Приложение, нуждавшееся когда-то в различных бинарных компонентах для TCP/IP и IPX/SPX, может теперь выполняться вне зависимости от базового сетевого протокола. Конвертация приложений Winsock 1.1 в приложения Winsock 2.0 позволяет немедленно использовать то, что раньше было чисто приложением TCP/IP в NetWare и других сетевых средах.
Обеспечение качества услуг в Winsock 2.0 позволяет получить большую гибкость в работе с сетью. Приложения в стандарте Winsock 2.0 могут запрашивать требуемую полосу пропускания и получать информацию об изменении состояния сети, например, о потере возможности соединения, сужении или расширении полосы пропускания.
Благодаря Winsock 2.0, вышеперечисленные возможности могут быть реализованы в самых разных приложениях, в том числе мультимедиа и беспроводных приложениях. Мультимедиа-приложения способны запрашивать гарантированную минимальную скорость передачи, причем они могут отказаться от соединения или согласиться на худшее качество в случае, если требуемая минимальная полоса пропускания не может быть предоставлена. Беспроводные приложения могут быть извещены, если сеть временно недоступна, например, если интерфейс теряет связь с базовой станцией.
Другой особенностью Winsock 2.0 является не зависящая от протокола поддержка групповой адресации. Приложение определяет, какой из методов многопунктовой адресации поддерживает данный протокол, и затем вступает в многоадресную группу в соответствии с этим методом. Такая технология применима к популярным групповым приложениям, например планировщикам организации работ в группе, для обновления списка членов при изменении планов одного из членов.
Winsock 1.1 ограничивает возможность разделения сокетов между приложениями, хотя некоторые поставщики реализуют ее в своих продуктах. Учитывая потребность в разделении, Winsock 2.0 позволяет разделять сокеты между различными потоками внутри приложения и между приложениями, что чрезвычайно полезно для развитых серверных приложений.
ИМПЕРАТИВ ВЗАИМОДЕЙСТВИЯ
Что касается администраторов сети, то проблема обеспечения взаимодействующих реализаций актуальна и по сей день. А если принять во внимание десятки стеков TCP/IP для Windows (и десятки стеков, которые появятся в будущем), используемых тысячами разных приложений, то проблема совместимости приложений становится просто удручающей.
К счастью, многочисленные новоявленные тестовые лаборатории производят тестирование на взаимодействие в соответствии с требованиями администраторов сети в целях проверки заявлений поставщиков. Эти лаборатории предоставляют экспертизу в конкретной области сетевых технологий.
В отличие от Winsock 1.1 версия 2.0. требует более сложных тестов на взаимодействие. Документация на спецификацию Winsock 1.1 насчитывает 134 страницы, в то время как документация на Winsock 2.0 в настоящее время занимает 521 страницу со 170 страницами исправлений. Это весьма важные технические спецификации и вероятность неправильной интерпретации довольно велика, а посему мало разработать корректную реализацию, необходимо также провести тестирование на предмет совместимости с другими продуктами.
h99.0005В число поставщиков сетевых стеков, предоставляющих в настоящее время реализации Winsock, входят Microsoft, WRQ, FTP Software, SunSoft, Novell, NetManage, Persoft и Frontier Technologies. В связи с ростом важности удаленных средств соединения среди мобильных корпоративных и обычных пользователей поставщики (Netcom Online Communications, Quarterdeck и CompuServe) стали активно предлагать коммутируемые реализации Winsock.
НАЗНАЧЕНИЕ DLL
Приложения с реализованным Winsock, стеки TCP/IP для Windows, а также другие воплощения Winsock не всегда взаимодействуют друг с другом. Помимо традиционных причин (ошибки реализации и различные интерпретации спецификации) есть еще причины связанные с динамически компонуемыми библиотеками Winsock.
К любому стеку Winsock прилагается динамически компонуемая библиотека Winsock. Каждый поставщик создает собственную Winsock DLL, а некоторые из них могут иметь несколько эволюционирующих со временем версий.
Часть поставщиков наделяет Winsock DLL нестандартными функциями, такими, например, как вызовы для беспроводной связи или же вызовы для других транспортных протоколов (IPX/SPX и проч.). Преимущества таких дополнений очевидны, когда полный пакет предоставляется одним поставщиком. Иными словами, если вы используете стек транспортных протоколов от поставщика А, динамически компонуемую библиотеку от поставщика А и приложения от поставщика А, в которых Winsock реализован, то никаких проблем с совместимостью не возникнет.
Но поскольку сети чаще всего гетерогенны, наиболее распространена ситуация, когда стек транспортных протоколов - от поставщика А, динамически компонуемая библиотека - от поставщика Б, а приложения - от поставщика А, в которых Winsock реализован. Даже если администратор сети строго следит за однородностью сети, какой-нибудь пользователь может по собственному почину установить приложение от поставщика С и с удивлением обнаружить, что оно имеет стек транспортных протоколов, записываемый поверх стека поставщика А. Однако стек от поставщика А полностью не исчезнет, его следы будут проявляться в сети то здесь, то там самым непредсказуемым образом. В настоящее время имеется свыше 50 динамически компонуемых библиотек различных поставщиков и сотни приложений, в которых реализуется Winsock.
ПРОВЕДЕНИЕ ТЕСТИРОВАНИЯ
Приложения Winsock должны пройти строгое тестирование. Стандарт API освобождает программистов от необходимости работы с несколькими отличающимися друг от друга API, однако он не извиняет отказ от проведения тестирования на взаимодействие с существующими продуктами.
Администраторам сети следует покупать продукты только у поставщиков, проведших полномасштабное тестирование.
С точки зрения разработки приложения необходимо, прежде всего, обратить внимание на требования к тестированию, относящиеся собственно к программированию приложений, в которых стандарт Winsock реализуется. Если написанное приложение работает со стеком и библиотекой DLL от поставщика А, то это отнюдь не означает, что оно будет работать с программным обеспечением от другого поставщика. Без необходимого тестирования со стороны групп разработки приложений и проверки качества непременно возникнут проблемы со взаимодействием.
С другой стороны, необходимо держать в уме, что у разработчиков приложений нет твердой почвы под ногами. Сеть, на которую они опираются, неизбежно меняют, когда стеки обновляются, дорабатываются и полностью пересматриваются. Разработчики приложений не могут быть даже уверены, что их приложения будут использоваться в привычной среде TCP/IP Ethernet.
Некоторые поставщики Quarterdeck (вследствие приобретения Internetware), Firefox, Cisco (вследствие приобретения Internet Junction) создали уполномоченные библиотеки DLL Winsock. Сознавая необходимость установки, настройки и обслуживания стеков TCP/IP и Winsock DLL на сотнях уже имеющихся клиентах NetWare на базе Windows 3, эти поставщики разработали уполномоченные переадресаторы Winsock.
В подобных реализациях Winsock DLL - это переадресатор API, заворачивающий запросы на вызовы функций и переадресующий их по родной сети IPX/SPX на сервер Novell. Загружаемый модуль NetWare на данном сервере распаковывает вызовы функций и передает их реализации TCP/IP, находящейся на сервере. Учитывая число локальных сетей NetWare, установленных по всему миру, мы можем ожидить появления еще большего разнообразия в решениях, имеющих, например, шлюзы в Unix и Windows NT.
Среди поставщиков коммутируемых интерактивных услуг и провайдеров услуг Internet стала популярна новая тенденция. NetCruiser компании Netcom - одна из них. NetCruiser представляет собой простой в установке продукт, помещающийся на одной дискете и не нуждающийся в IP-конфигурации.
Поддержка Winsock была включена в NetCruiser 1.6, и теперь пользователи могут запускать свои любимые приложения Winsock, используя NetCruiser в качестве проводника. Аналогично CompuServe добавила Winsock DLL к своему продукту NetLauncher вместе с компонентами расширения. Последней к этой группе присоединилась America Online, недавно добавившая Winsock DLL к своему продукту. Данная разработка позволяет мобильным и обычным пользователям применять свои корпоративные клиентские приложения Winsock с любой коммутируемой службой.
РЕВОЛЮЦИОННЫЙ КАНДИДАТ
Если Winsock 1.1 был призван решить проблему множества API для стеков Windows TCP/IP, то Winsock 2.0 обеспечивает поддержку таких новых сред, как ATM, ISDN и протоколы защиты для различных сетевых транспортных протоколов.
Когда Winsock Group собралась впервые, трудно было предположить, что из этого получится, например, побуждение финансовых институтов и правительств к предоставлению информации с помощью никому ранее не известной системы World Wide Web. А уж о покупке зубной пасты по Internet и игре в "Монополию" или "Цивилизацию" с друзьями по всему свету не приходилось даже и мечтать.
Ко времени выхода этой статьи в свет должны были появиться средства разработки программного обеспечения, включающие подсистему Winsock 2.0, файлы-заголовки, библиотеки и образцы кодов. В ожидании уже заявленных ратификации и публикации спецификации проведение тестов на взаимодействие планировалось на начало 1996 года. Какое влияние Winsock 2.0 окажет на нашу работу пока не вполне ясно. Не приходиться сомневаться, что сеть кардинально изменит нашу культуру и наш взгляд на мир, но утверждать наверняка, где и как эта трансформация произойдет, невозможно. Однако весь ход истории человечества доказывает, что коренные изменения происходят тогда, когда люди реализуют технологии, дающие новые возможности. Winsock 2.0 способен на многое, но самое главное у него есть - революционный потенциал.
Мартин Бикфорд - директор по партнерским отношениям и соучредитель компании Stardust Technologies, специализирующейся на тестировании и консультациях по Winsock. С ним можно связаться через Internet по адресу: martin@stardust.com. Мартин Халл - исполнительный директор, соучредитель Stardust Technologies и, кроме того, председатель Winsock Group. С ним можно связаться через Internet по адресу: martinh@stardust.com. Крис Велленс - испольнительный директор и учредитель InterWorking Labs, специализирующейся на тестировании коммуникационных протоколов. С ним можно связаться через Internet по адресу: chrisw@iwl.com.
ОТКУДА ВЗЯЛСЯ WINSOCK
Предыстория версии 1.1
B конце 80-х Microsoft Windows стали неотъемлемой частью предприятия. Продукт не был предназначен для работы в сетях, и когда Windows начали поставляться с NetBEUI, единственной возможностью для пользователей, желающих работать с другим протоколом - IPX/SPX, DECnet или TCP/IP, - было приобретение дополнительного программного обеспечения у независимых поставщиков.
На рынке TCP/IP стеки для предприятий предлагаются вместе со средствами разработки программного обеспечения для администраторов корпоративых сетей и независимых разработчиков ПО. Эти стеки дали администраторам сетей инструменты для перемещения данных по сетям и объединенным сетям. Однако API для разработчиков ПО были нестандартизованы.
Если бы вы писали самую первую программу просмотра в 1990 году, то вам пришлось бы специально определять типы поддерживаемых IP-стеков. Каждый из них требовал изучения нового интерфейса с явным определением программного порта.
Все изменилось с появлением Winsock. Написание на Winsock API дает один для всех IP-стеков порт. Если сегодня мы рассматриваем TCP/IP-доступ из-под Windows как само собой разумеющийся, то так было не всегда. Протоколы TCP/IP наиболее широко использовались в операционных системах типа Unix. Вообще-то приложения, написанные для ОС Unix, могли по умолчанию работать с сетью и, следовательно, общаться с другими машинами и пользователями; коммуникационное программное обеспечение для ПК под Windows получало распространение не раньше решения проблемы нестандартных TCP/IP API.
В 1991 году группа поставщиков ПО объединилась с целью создания стандартного определения интерфейса для сетевых приложений на базе Windows. Сосредотичившись поначалу на доступе по TCP/IP в Internet, группа разработала открытый сетевой стандарт API, версия 1.1 которого появилась в 1993 году. Этот стандарт вскоре стал известен как Winsock.
Появление стандартного интерфейса прикладного программирования для всех версий Microsoft Windows позволила поставщикам ПО создавать сетевые приложения со стандартным интерфейсом. Утверждение стандарта привело к взрывообразному росту предложений для доступа по TCP/IP в Internet под Windows.