Уинсок
Эта статья нуждается в дополнительных цитатах для проверки . ( июль 2010 г. ) |
В вычислительной сфере ( Windows Sockets API WSA ) , позже сокращенный до Winsock , представляет собой интерфейс прикладного программирования (API), который определяет, как Windows сетевое прикладное программное обеспечение должно получать доступ к сетевым службам, особенно TCP/IP . Он определяет стандартный интерфейс между клиентским приложением Windows TCP/IP (например, FTP-клиентом или веб-браузером ) и базовым стеком протоколов TCP/IP . Номенклатура основана на API сокетов Беркли , используемом в BSD для связи между программами.
Фон
[ редактировать ]Ранние операционные системы Microsoft, как MS-DOS, так и Microsoft Windows, предлагали ограниченные сетевые возможности, в основном основанные на NetBIOS . В частности, в то время Microsoft не предлагала поддержку стека протоколов TCP/IP. Ряд университетских групп и коммерческих поставщиков, в том числе группа PC/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 был единственным доступным многопоточным продуктом, полностью основанным на 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 Sockets основаны на сокетах BSD , но предоставляют дополнительные функциональные возможности, позволяющие API соответствовать обычной модели программирования Windows. API Windows Sockets охватывал почти все возможности API сокетов BSD , но существовали некоторые неизбежные препятствия, которые в основном возникали из фундаментальных различий между Windows и Unix (хотя Windows Sockets меньше отличались от сокетов BSD , чем последний от STREAMS ). Все вызовы функций в API начинаются с моникера Провинциальный административный суд , например WSASend() для отправки данных в подключенный сокет.
Однако цель разработки Windows Sockets заключалась в том, чтобы разработчикам было относительно легко переносить приложения на основе сокетов из 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, она обеспечивала совместимость на уровне исходного кода и двоичного кода с API Winsock 1.1. Одним из менее известных дополнений стал 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» (Registered IO) для Winsock. [2] Эти расширения предназначены для уменьшения накладных расходов пользователя при переходе в режим ядра для сетевого пути данных и пути уведомлений, но при этом используют остальную часть обычного стека Windows TCP и UDP (и используют существующие сетевые карты). Путь установки (например, функция подключения) не отличается от обычного пути Winsock.
Реализации
[ редактировать ]Реализации Microsoft
[ редактировать ]- Microsoft не предоставила реализацию Winsock 1.0.
- Версия 1.1 Winsock поставлялась в дополнительном пакете (называемом Wolverine) для Windows for Workgroups (под кодовым названием 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). Winsock LSP доступны для широкого спектра полезных целей, включая родительский контроль в Интернете, фильтрацию веб-контента, качество обслуживания и т. д. Порядок расположения всех провайдеров сохраняется в каталоге Winsock. В предыдущих версиях Windows удаление ошибочного LSP могло привести к повреждению каталога Winsock в реестре, что потенциально могло привести к потере всех сетевых подключений . Winsock в Windows XP с пакетом обновления 2, Windows Server 2003 с пакетом обновления 1 и во всех более поздних операционных системах Windows имеет возможность самовосстановления после удаления пользователем такого LSP.
Другие реализации
[ редактировать ]- Среди других поставщиков, предлагающих Winsock-совместимые стеки TCP/IP и UDP/IP, были (в алфавитном порядке) 3Com , Beame & Whiteside, DEC, Distinct, Frontier, FTP Software , 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. Trumpet Winsock 5.0 доступен для Windows 95/98 . и Windows NT и включает в себя стек IPv6, совместимый с Winsock 1.1, для этих операционных систем [5]
- Проект Wine содержит совместимую с исходным кодом и двоичную реализацию Winsock поверх API сокетов BSD .
См. также
[ редактировать ]- Розетки Беркли
- Поставщик многоуровневых услуг (Winsock LSP)
Ссылки
[ редактировать ]- ^ «Winsock Версия 1.0 Ред.А» . Проверено 8 октября 2020 г.
- ^ «Новые методы разработки сетевых приложений с малой задержкой» . Канал 9 .
- ^ «Мозаике» исполняется 20 лет: давайте зажжем старушку, покажем ей сегодня паутину» . theregister.co.uk .
- ^ «Каково было создать сайт во всемирной паутине в 1995 году» . fastcompany.com . 18 ноября 2015 г.
- ^ «Загрузки» . www.trumpet.com.au .
Внешние ссылки
[ редактировать ]- MSDN — Справочник новых возможностей Windows Socket 2
- MSDN — стартовая страница Windows Socket 2
- Часто задаваемые вопросы по сокетам - Часто задаваемые вопросы по сокетам Windows
- Программирование клиента/сервера с использованием сокетов TCP/IP на Wayback Machine (архивировано 3 марта 2016 г.) — программирование Winsock C++
- Портирование программ Berkeley Socket на Winsock
- Блог Windows Network Development — блог разработчиков Microsoft, посвященный Winsock, WSK, WinINet, Http.sys, WinHttp, QoS и System.Net, с упором на функции, представленные в Windows Vista.
- Краткая история Microsoft в Интернете
- Информация о разработке WinSock
- Часто задаваемые вопросы программиста Winsock