Articulo de referencia

Winsock

En informática , la API de sockets de Windows ( WSA ), posteriormente abreviada como Winsock , es una interfaz de programación de aplicaciones (API) que define cómo el software ...

En informática , la API de sockets de Windows ( WSA ), posteriormente abreviada como Winsock , es una interfaz de programación de aplicaciones (API) que define cómo el software de aplicaciones de red de Windows debe acceder a los servicios de red, especialmente TCP/IP . Define una interfaz estándar entre una aplicación cliente TCP/IP de Windows (como un cliente FTP o un navegador web ) y la pila de protocolos TCP/IP subyacente . La nomenclatura se basa en la API de sockets de Berkeley utilizada en BSD para la comunicación entre programas.

Fondo

Los primeros sistemas operativos de Microsoft, tanto MS-DOS como Microsoft Windows, ofrecían capacidades de red limitadas, basadas principalmente en NetBIOS . En particular, Microsoft no ofrecía soporte para la pila de protocolos TCP/IP en aquel entonces. Varios grupos universitarios y proveedores comerciales, entre ellos el grupo PC/IP del MIT , FTP Software , Sun Microsystems , Ungermann-Bass y Excelan , introdujeron productos TCP/IP para MS-DOS, a menudo como parte de un paquete de hardware y software. Con el lanzamiento de Windows 2.0 , a estos proveedores se unieron otros como Distinct y NetManage para ofrecer soporte TCP/IP para Windows.

El inconveniente al que se enfrentaban todos estos proveedores era que cada uno utilizaba su propia API (Interfaz de Programación de Aplicaciones). Sin un modelo de programación estándar único, resultaba difícil convencer a los desarrolladores de software independientes de crear aplicaciones de red compatibles con la implementación TCP/IP de cualquier proveedor. Si a esto se suma el recelo de los usuarios finales a depender de un único proveedor, quedó claro que se necesitaba cierta estandarización.

El proyecto Windows Sockets tuvo su origen en una sesión de Birds of a Feather celebrada en Interop '91 en San José el 10 de octubre de 1991. [ 1 ] Se basa en las especificaciones de sockets creadas por NetManage y que esta empresa puso a disposición del público en dicha reunión. En ese momento, el socket de NetManage era el único producto multihilo 100% basado en DLL disponible para Windows 3.0 . La primera edición de la especificación fue escrita por Martin Hall, Mark Towfiq de Microdyne (posteriormente Sun Microsystems ), Geoff Arnold de Sun Microsystems , y Henry Sanders y J Allard de Microsoft , con la colaboración de muchos otros. Se debatió sobre la mejor manera de abordar los derechos de autor, la propiedad intelectual y los posibles problemas antimonopolio, y se consideró la posibilidad de trabajar a través del IETF o establecer una fundación sin ánimo de lucro. Finalmente, se decidió que la especificación simplemente estaría protegida por derechos de autor por los cinco autores como individuos (no afiliados).

Durante mucho tiempo, todos los desarrolladores participantes se resistieron a que se simplificara el nombre a Winsock, ya que existía mucha confusión entre los usuarios respecto a la API y el archivo de biblioteca DLL (winsock.dll), que solo exponía las interfaces WSA comunes a las aplicaciones. Los usuarios solían creer que bastaba con asegurarse de que el archivo DLL estuviera presente en el sistema para obtener compatibilidad total con el protocolo TCP/IP.

Tecnología

La especificación de la API de Windows Sockets define dos interfaces: la API utilizada por los desarrolladores de aplicaciones y la SPI , que proporciona a los desarrolladores de software de red un medio para agregar nuevos módulos de protocolo al sistema. Cada interfaz representa un contrato. La API garantiza que una aplicación compatible funcionará correctamente con una implementación de protocolo compatible de cualquier proveedor de software de red. El contrato SPI garantiza que un módulo de protocolo compatible se puede agregar a Windows y, por lo tanto, será utilizable por una aplicación compatible con la API. Si bien estos contratos fueron importantes cuando se lanzó Windows Sockets por primera vez, dado que los entornos de red requerían compatibilidad con múltiples protocolos (véase más arriba), ahora solo tienen interés académico. La versión 2.0 de la API de Windows Sockets incluye funciones para usar IPX/SPX , aunque el protocolo ya estaba prácticamente obsoleto cuando se lanzó WSA 2.0. Microsoft ha incluido la pila de protocolos TCP/IP en todas las versiones recientes de Windows, y no existen alternativas independientes significativas, ni ha habido un interés significativo en implementar protocolos distintos de TCP/IP.

El código y el diseño de Windows Sockets se basan en los sockets BSD , pero ofrecen funcionalidades adicionales para que la API cumpla con el modelo de programación estándar de Windows. La API de Windows Sockets abarca casi todas las características de la API de sockets BSD , pero existen algunos obstáculos inevitables que surgen principalmente de diferencias fundamentales entre Windows y Unix (aunque Windows Sockets se diferencia menos de los sockets BSD que estos últimos de STREAMS ). Todas las llamadas a funciones en la API comienzan con el nombre WSA , por ejemplo, WSASend() para enviar datos en un socket conectado.

Sin embargo, uno de los objetivos de diseño de Windows Sockets era que resultara relativamente fácil para los desarrolladores portar aplicaciones basadas en sockets de Unix a Windows. No se consideró suficiente crear una API que solo fuera útil para programas de Windows de reciente creación, y por ello, Windows Sockets incluyó varios elementos diseñados para facilitar la portabilidad. Por ejemplo, las aplicaciones de Unix podían usar la misma variable `errno` para registrar tanto errores de red como errores detectados en las funciones de la biblioteca estándar de C. Dado que esto no era posible en Windows, Windows Sockets introdujo una función específica, `WSAGetLastError()` , para recuperar información de error. Estos mecanismos resultaron útiles, pero la portabilidad de aplicaciones seguía siendo extremadamente compleja. Muchas aplicaciones TCP/IP originales se habían implementado utilizando características del sistema específicas de Unix , como pseudoterminales y la llamada al sistema `fork` , y reproducir dicha funcionalidad en Windows era problemático. En un tiempo relativamente corto, la portabilidad dio paso al desarrollo de aplicaciones específicas para Windows.

Presupuesto

  • La versión 1.0 (junio de 1992) definió el funcionamiento básico de Winsock. Se mantuvo muy similar a la interfaz existente de los sockets de Berkeley para simplificar la adaptación de las aplicaciones existentes. Se añadieron algunas extensiones específicas para Windows, principalmente para operaciones asíncronas con notificaciones basadas en mensajes.
Si bien el documento no limitaba la compatibilidad a TCP/IP, TCP y UDP fueron los únicos protocolos mencionados explícitamente. La mayoría de los proveedores solo ofrecían compatibilidad con TCP/IP, aunque Winsock de DEC también incluía compatibilidad con DECNet .
  • La versión 1.1 (enero de 1993) introdujo numerosas correcciones y aclaraciones menores en la especificación. El cambio más significativo fue la inclusión de la función gethostname() .
  • Winsock 2 fue una extensión retrocompatible de Winsock 1.1. Añadió soporte para resolución de nombres independiente del protocolo, operaciones asíncronas con notificaciones basadas en eventos y rutinas de finalización, implementaciones de protocolo en capas, multidifusión y calidad de servicio . También formalizó el soporte para múltiples protocolos, incluidos IPX/SPX y DECnet . La nueva especificación permitió que los sockets se compartieran opcionalmente entre procesos, que las solicitudes de conexión entrantes se aceptaran condicionalmente y que ciertas operaciones se realizaran en grupos de sockets en lugar de sockets individuales. Aunque la nueva especificación difería sustancialmente de Winsock 1, proporcionó compatibilidad a nivel de código fuente y binario con la API de Winsock 1.1. Una de las adiciones menos conocidas fue la API de Interfaz de Proveedor de Servicios (SPI) y los Proveedores de Servicios en Capas .
  • Las versiones 2.0.x (a partir de mayo de 1994) tenían estatus de borrador interno y no fueron anunciadas como estándares públicos.
  • La versión 2.1.0 (enero de 1996) fue la primera versión pública de la especificación Winsock 2.
  • La versión 2.2.0 (mayo de 1996) incluía numerosas correcciones menores, aclaraciones y recomendaciones de uso. También fue la primera versión en eliminar la compatibilidad con aplicaciones de Windows de 16 bits.
  • Las versiones 2.2.1 (mayo de 1997) y 2.2.2 (agosto de 1997) introdujeron mejoras menores en la funcionalidad. Se añadieron mecanismos para consultar y recibir notificaciones sobre cambios en la configuración de la red y del sistema.
  • La versión preliminar técnica de IPv6 para Windows 2000 (diciembre de 2000) incluyó la primera implementación de la RFC 2553 (marzo de 1999, posteriormente reemplazada por la RFC 3493 ), una API independiente del protocolo para la resolución de nombres, que se integraría en Winsock en Windows XP .

Actualizaciones en Windows 8

Windows 8 incluye las extensiones "RIO" (Registered IO) para Winsock. [ 2 ] Estas extensiones están diseñadas para reducir la sobrecarga de la transición del modo usuario al modo kernel para la ruta de datos de red y la ruta de notificación, pero utilizan el resto de la pila TCP y UDP estándar de Windows (y utilizan las tarjetas de red existentes). La ruta de configuración (por ejemplo, la función "connect") no cambia con respecto a la ruta Winsock estándar.

Implementaciones

Implementaciones de Microsoft

  • Microsoft no proporcionó una implementación de Winsock 1.0.
  • La versión 1.1 de Winsock se distribuyó en un paquete adicional (llamado Wolverine) para Windows for Workgroups (nombre en clave Snowball ). Fue un componente integral de Windows 95 y Windows NT a partir de la versión 3.5 (la versión inicial de Windows NT disponible comercialmente, la versión 3.1, incluía únicamente una implementación propietaria y bastante incompleta de TCP/IP basada en la API "STREAMS" del sistema UNIX V de AT&T ).
  • La versión 2.1 de Winsock se incluyó como complemento para Windows 95. Fue un componente integral de Windows 98 , Windows NT 4.0 y todas las versiones posteriores de Windows. (Microsoft no proporcionó implementaciones de Winsock 2 para Windows 3.x ni Windows NT 3.x).
  • Las versiones recientes de Winsock 2.x se han distribuido con las nuevas versiones de Windows o como parte de los paquetes de servicio.
  • Winsock 2 es extensible mediante un mecanismo conocido como Proveedor de Servicios en Capas (LSP). Los LSP de Winsock están disponibles para una amplia gama de propósitos útiles, incluyendo el control parental de Internet, el filtrado de contenido web, la calidad de servicio (QoS) , etc. El orden de capas de todos los proveedores se mantiene en el Catálogo de Winsock. En versiones anteriores de Windows, eliminar un LSP defectuoso podía provocar la corrupción del catálogo de Winsock en el registro, lo que potencialmente resultaba en la pérdida de toda la conectividad de red . Winsock en Windows XP Service Pack 2, Windows Server 2003 Service Pack 1 y todos los sistemas operativos Windows posteriores tiene la capacidad de autorrepararse después de que un usuario desinstale dicho LSP.

Otras implementaciones

Véase también

Referencias

  1. "Winsock Versión 1.0 Rev.A" . Consultado el 8 de octubre de 2020 .
  2. "Nuevas técnicas para desarrollar aplicaciones de red de baja latencia" . Canal 9 .
  3. "Mosaic cumple 20 años: ¡Vamos a poner en marcha a la vieja chica, mostremosle la web hoy!" . theregister.co.uk .
  4. "Cómo era crear un sitio web mundial en 1995" . fastcompany.com . 18 de noviembre de 2015.
  5. "Descargas" . www.trumpet.com.au .
  • MSDN - Referencia de novedades de Windows Socket 2
  • MSDN - Página de inicio de Windows Socket 2
  • Preguntas frecuentes sobre sockets - Preguntas frecuentes sobre sockets de Windows
  • Programación cliente/servidor con sockets TCP/IP en Wayback Machine (archivado el 3 de marzo de 2016) - Programación en C++ con Winsock
  • Adaptación de programas Berkeley Socket a Winsock
  • Blog de desarrollo de redes de Windows : blog para desarrolladores de Microsoft que cubre Winsock, WSK, WinINet, Http.sys, WinHttp, QoS y System.Net, con un enfoque en las características introducidas en Windows Vista.
  • Breve historia de Microsoft en la web
  • Información de desarrollo de WinSock (enlace roto)
  • Preguntas frecuentes para programadores de Winsock