Winsock - Winsock

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

Фон

Более поздние операционные системы Microsoft, как MS-DOS, так и Microsoft Windows, предлагали ограниченные сетевые возможности, в основном на основе NetBIOS. В частности, в то время Microsoft не предлагала поддержку стека протоколов TCP / IP. Ряд университетских групп и коммерческих поставщиков, включая группу ПК / IP в Массачусетский технологический институт, Программное обеспечение FTP, Sun Microsystems, Унгерманн-Басс, и 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 Sockets основаны на Розетки BSD, но предоставляет дополнительные функции, позволяющие API соответствовать стандартной модели программирования Windows. API Windows Sockets охватывает почти все функции Розетки BSD API, но были некоторые неизбежные препятствия, которые в основном возникли из-за фундаментальных различий между Windows и Unix (хотя сокеты Windows меньше отличались от Розетки BSD чем последний из ПОТОКИ ). Все вызовы функций в 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 для рабочих групп (кодовое имя Снежок). Это был неотъемлемый компонент Windows 95 и Windows NT начиная с версии 3.5 и выше (первоначальная коммерчески доступная версия Windows NT, версия 3.1, включала только проприетарную и весьма неполную реализацию TCP / IP на основе API-интерфейса AT&T UNIX System V "STREAMS"[нужна цитата ]).
  • Версия 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 доступны для широкого спектра полезных целей, включая родительский контроль в Интернете, фильтрацию веб-контента, 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, Граница, IBM, Микродин, NetManage, Novell, Sun Microsystems и Trumpet Software International.
  • Trumpet Winsock - пользователем Питер Таттам была одной из немногих реализаций Winsock 1.0, которые можно было установить под Windows 3.0, в котором не было встроенной поддержки Winsock.[3][4] Труба была также самой популярной условно-бесплатная реализация Winsock для Windows 3.x. Trumpet Winsock 5.0 доступен для Windows 95 /98 и Windows NT и включает совместимый с Winsock 1.1 стек IPv6 для этих операционных систем.[5]
  • В Винный проект содержит исходный код и двоичную совместимую реализацию Winsock поверх Розетки BSD API.

Смотрите также

Рекомендации

  1. ^ «Winsock версии 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.

внешняя ссылка