Из Википедии, бесплатной энциклопедии
  (Перенаправлено из WinSock )
Перейти к навигации Перейти к поиску

В вычислении , то API Windows Sockets (WSA) , а затем сокращается до Winsock , является технической спецификацией , которая определяет , как Windows , сетевое программное обеспечение должно получить доступ к сетевым службам , в частности TCP / IP . Он определяет стандартный интерфейс между клиентским приложением Windows TCP / IP (например, FTP-клиентом или веб-браузером ) и лежащим в основе стеком протокола TCP / IP . Номенклатура основана на модели API сокетов Беркли, используемой в BSD для связи между программами.

Фон [ править ]

Более поздние операционные системы Microsoft, как MS-DOS, так и Microsoft Windows, предлагали ограниченные сетевые возможности, в основном на основе NetBIOS . В частности, в то время Microsoft не предлагала поддержку стека протоколов TCP / IP. Ряд университетских групп и коммерческих поставщиков, включая группу ПК / IP в Массачусетском технологическом институте , FTP Software , Sun Microsystems , Ungermann-Bass и Excelan , представили продукты TCP / IP для MS-DOS, часто как часть аппаратного / программного пакета. . Когда была выпущена Windows 2.0 , к этим поставщикам присоединились другие, такие как Distinct и NetManage, которые предложили TCP / IP для Windows.

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

Проект Windows Sockets берет свое начало в сеансе Birds Of A Feather, состоявшемся на Interop '91 в Сан-Хосе 10 октября 1991 года. [1] Он основан на спецификациях сокетов, созданных NetManage и переданных в общественное достояние на этой встрече. . В то время сокет NetManage был единственным доступным многопоточным продуктом на 100% на основе DLL для Windows 3.0. Первую редакцию спецификации составили Мартин Холл, Марк Тофик из Microdyne (позже Sun Microsystems ), Джефф Арнольд из Sun Microsystems , Генри Сандерс и Дж. Аллард из Microsoft при содействии многих других. [ необходима цитата ]Состоялась некоторая дискуссия о том, как лучше всего решать проблемы авторского права, интеллектуальной собственности и потенциальные антимонопольные вопросы, и было уделено внимание работе через IETF или созданию некоммерческого фонда. В конце концов было решено, что авторские права на спецификацию будут просто охраняться авторскими правами пяти авторов как (неаффилированных) лиц.

Все участвующие разработчики долгое время сопротивлялись сокращению имени до простого Winsock, [ необходима цитата ], поскольку среди пользователей была большая путаница между API и файлом библиотеки DLL (winsock.dll), который предоставлял только общие интерфейсы WSA для приложения над ним. Пользователи обычно полагают, что только убедившись, что файл DLL присутствует в системе, можно обеспечить полную поддержку протокола TCP / IP. [ необходима цитата ]

Технология [ править ]

Спецификация Windows Sockets API определяет два интерфейса: API, используемый разработчиками приложений , и SPI , который предоставляет разработчикам сетевого программного обеспечения средства для добавления новых модулей протокола в систему. Каждый интерфейс представляет собой контракт. API гарантирует, что соответствующее приложение будет правильно работать с соответствующей реализацией протокола от любого поставщика сетевого программного обеспечения. SPIКонтракт гарантирует, что соответствующий модуль протокола может быть добавлен в Windows и, таким образом, может быть использован API-совместимым приложением. Хотя эти контракты были важны при первом выпуске Windows Sockets, поскольку сетевые среды требовали поддержки нескольких протоколов (см. Выше), они теперь представляют только академический интерес. В Windows Sockets API версии 2.0 включены функции для использования IPX / SPX , хотя этот протокол был практически устаревшим уже на момент поставки WSA 2.0. Microsoft поставляла стек протоколов TCP / IP со всеми последними версиями Windows, и нет никаких существенных независимых альтернатив. Также не было значительного интереса к реализации протоколов, отличных от TCP / IP.

Код и дизайн сокетов Windows основаны на сокетах BSD , но предоставляют дополнительные функции, позволяющие API соответствовать стандартной модели программирования Windows. Windows Sockets API охватывал почти все функции API сокетов BSD , но были некоторые неизбежные препятствия, которые в основном возникали из-за фундаментальных различий между Windows и Unix (хотя Windows Sockets меньше отличались от сокетов BSD, чем последние от STREAMS ). Все вызовы функций в API начинаются с прозвища WSA , например WSASend () для отправки данных в подключенный сокет.

Однако цель разработки сокетов Windows заключалась в том, чтобы разработчикам было относительно легко переносить приложения на основе сокетов из Unix в Windows. Было сочтено недостаточным создание API, который был бы полезен только для недавно написанных программ Windows. По этой причине Windows Sockets включал ряд элементов, которые были разработаны для облегчения переноса. Например, приложения Unix могли использовать одну и ту же переменную errno для записи сетевых ошибок и ошибок, обнаруженных в стандартных функциях библиотеки C. Поскольку в Windows это было невозможно, Windows Sockets представила специальную функцию WSAGetLastError ()., чтобы получить информацию об ошибке. Такие механизмы были полезны, но перенос приложений оставался чрезвычайно сложным. Многие оригинальные приложения TCP / IP были реализованы с использованием системных функций, специфичных для Unix , таких как псевдотерминалы и системный вызов fork , и воспроизведение таких функций в Windows было проблематичным. В течение относительно короткого времени перенос уступил место разработке специализированных приложений для Windows.

Технические характеристики [ править ]

  • Версия 1.0 (июнь 1992 г.) определяет основные операции Winsock. Он был очень близок к существующему интерфейсу сокетов Беркли, чтобы упростить перенос существующих приложений. Было добавлено несколько расширений для Windows, в основном для асинхронных операций с уведомлениями на основе сообщений.
Хотя документ не ограничивал поддержку TCP / IP, TCP и UDP были единственными явно упомянутыми протоколами. Большинство поставщиков предоставляли поддержку только TCP / IP, хотя Winsock от DEC также включал поддержку DECNet .
  • Версия 1.1 (январь 1993 г.) внесла множество мелких исправлений и уточнений в спецификацию. Самым значительным изменением стало включение функции gethostname () .
  • Winsock 2 был обратно совместимым расширением Winsock 1.1. Он добавил поддержку независимого от протокола разрешения имен, асинхронных операций с уведомлениями на основе событий и процедур завершения, многоуровневых реализаций протокола, многоадресной рассылки и качества обслуживания . Также формализована поддержка нескольких протоколов, включая IPX / SPX и DECnet.. Новая спецификация позволила факультативно совместно использовать сокеты между процессами, входящие запросы на соединение должны быть условно приняты, а определенные операции должны выполняться над группами сокетов, а не с отдельными сокетами. Хотя новая спецификация существенно отличалась от Winsock 1, она обеспечивала совместимость на уровне исходного кода и двоичного кода с Winsock 1.1 API. Одним из менее известных дополнений был API интерфейса поставщика услуг (SPI) и многоуровневые поставщики услуг .
  • Версии 2.0.x (начиная с мая 1994 г.) имели статус внутренней черновой версии и не были объявлены общедоступными стандартами.
  • Версия 2.1.0 (январь 1996 г.) была первым публичным выпуском спецификации Winsock 2.
  • Версия 2.2.0 (май 1996 г.) включает множество мелких исправлений, уточнений и рекомендаций по использованию. Это также была первая версия, в которой была удалена поддержка 16-разрядных приложений Windows.
  • Версия 2.2.1 (май 1997 г.) и версия 2.2.2 (август 1997 г.) внесли незначительные улучшения функциональности. Добавлены механизмы запроса и получения уведомлений об изменениях в конфигурации сети и системы.
  • В технической предварительной версии IPv6 для Windows 2000 (декабрь 2000 г.) была впервые реализована RFC 2553 (март 1999 г., позже устарел RFC 3493 ), независимый от протокола API для разрешения имен, который станет частью Winsock в Windows XP .

Обновления в Windows 8 [ править ]

Windows 8 включает расширения «RIO» (зарегистрированный ввод-вывод) для Winsock. [2] Эти расширения предназначены для уменьшения накладных расходов при переходе пользователя в режим ядра для пути сетевых данных и пути уведомления, но используют остальную часть обычного стека TCP и UDP Windows (и используют существующие сетевые карты). Путь установки (например, функция «подключения») не отличается от обычного пути Winsock.

Реализации [ править ]

Реализации Microsoft [ править ]

  • Microsoft не поставляла реализацию Winsock 1.0.
  • Версия 1.1 Winsock была предоставлена ​​в виде дополнительного пакета (называемого Wolverine) для Windows для рабочих групп (кодовое имя Snowball ). Он был неотъемлемым компонентом Windows 95 и Windows NT, начиная с версии 3.5 и более поздних (первоначальная коммерчески доступная версия Windows NT, версия 3.1, включала только проприетарную и довольно неполную реализацию TCP / IP на основе AT&T UNIX System V "STREAMS "API [ необходима ссылка ] ).
  • Версия 2.1 Winsock поставлялась в виде дополнительного пакета для Windows 95. Она была неотъемлемым компонентом Windows 98 , Windows NT 4.0 и всех последующих выпусков Windows. (Microsoft не поставляла реализации Winsock 2 для Windows 3.x или Windows NT 3.x.)
  • Последние версии Winsock 2.x поставлялись с новыми выпусками Windows или как часть пакетов обновления.
  • Winsock 2 расширяется с помощью механизма, известного как многоуровневый поставщик услуг (LSP). LSP Winsock доступны для широкого круга полезных целей, включая родительский контроль в Интернете, фильтрацию веб-содержимого, QoS и т. Д. Порядок уровней всех поставщиков сохраняется в каталоге Winsock. В предыдущих версиях Windows удаление LSP с ошибками могло привести к повреждению каталога Winsock в реестре, что потенциально могло привести к потере всех сетевых подключений . Winsock в Windows XP с пакетом обновления 2, Windows Server 2003 с пакетом обновления 1 и во всех более поздних операционных системах Windows имеет возможность самовосстановления после удаления пользователем такого LSP.

Другие реализации [ править ]

  • Среди других поставщиков, предлагающих Winsock-совместимые стеки TCP / IP и UDP / IP, были (в алфавитном порядке) 3Com , Beame & Whiteside, DEC, Distinct, FTP Software , Frontier, IBM , Microdyne, NetManage , Novell , Sun Microsystems и Trumpet Software International.
  • Trumpet Winsock Питера Таттама была одной из немногих реализаций Winsock 1.0, которые можно было установить под Windows 3.0 , не имеющей встроенной поддержки Winsock. [3] [4] Trumpet также была самой популярной условно-бесплатной реализацией Winsock для Windows 3.x. Труба Winsock 5.0 доступна для Windows 95 / 98 и Windows NT и включает в себя Winsock 1.1 совместимый стек IPv6 для этих операционных систем. [5]
  • Проект Wine содержит совместимую с исходным кодом и двоичную версию Winsock поверх API сокетов BSD .

См. Также [ править ]

  • Розетки Berkeley
  • Многоуровневый поставщик услуг (Winsock LSP)

Ссылки [ править ]

  1. ^ "Winsock Version 1.0 Rev.A" . Проверено 8 октября 2020 .
  2. ^ «Новые методы разработки сетевых приложений с малой задержкой» . Канал 9 .
  3. ^ «Mosaic исполняется 20 лет: давайте зажжем старуху, покажем ей сеть сегодня» . theregister.co.uk .
  4. ^ «Каково было создать сайт в Интернете в 1995 году» . fastcompany.com . 18 ноября 2015.
  5. ^ "Загрузки" . www.trumpet.com.au .

Внешние ссылки [ править ]

  • MSDN - Справочник по Winsock2
  • MSDN - Winsock2 Home
  • FAQ по сокетам - FAQ по сокетам Windows
  • Программирование клиент / сервер с сокетами TCP / IP - Программирование Winsock на C ++
  • Перенос программ Berkley Socket на Winsock
  • Блог Windows Network Development - блог разработчиков Microsoft, посвященный Winsock, WSK, WinINet, Http.sys, WinHttp, QoS и System.Net, с упором на функции, представленные в Windows Vista
  • Краткая история Microsoft в Интернете
  • Информация о разработке WinSock
  • FAQ программиста Winsock