Winsock - Winsock

Na computação , o Windows Sockets API ( WSA ), mais tarde abreviado para Winsock , é uma interface de programação de aplicativo (API) que define como o software de aplicativo de rede do Windows deve acessar os serviços de rede, especialmente TCP / IP . Ele define uma interface padrão entre um aplicativo cliente TCP / IP do Windows (como um cliente FTP ou um navegador da web ) e a pilha de protocolos TCP / IP subjacente . A nomenclatura é baseada na API de sockets Berkeley usada no BSD para comunicações entre programas.

Fundo

Os primeiros sistemas operacionais da Microsoft, tanto MS-DOS quanto Microsoft Windows, ofereciam capacidade de rede limitada, principalmente baseada em NetBIOS . Em particular, a Microsoft não ofereceu suporte para a pilha de protocolos TCP / IP naquela época. Vários grupos universitários e fornecedores comerciais, incluindo o grupo PC / IP no MIT , FTP Software , Sun Microsystems , Ungermann-Bass e Excelan , introduziram produtos TCP / IP para MS-DOS, geralmente como parte de um pacote de hardware / software . Quando o Windows 2.0 foi lançado, esses fornecedores se juntaram a outros, como Distinct e NetManage, para oferecer TCP / IP para Windows.

A desvantagem enfrentada por todos esses fornecedores era que cada um deles usava sua própria API (Interface de Programação de Aplicativo). Sem um único modelo de programação padrão, era difícil persuadir desenvolvedores de software independentes a criar aplicativos de rede que funcionassem com a implementação TCP / IP subjacente de qualquer fornecedor. Adicione a isso o fato de que os usuários finais temiam ficar presos a um único fornecedor e ficou claro que alguma padronização era necessária.

O projeto Windows Sockets teve suas origens em uma sessão Birds Of A Feather realizada na Interop '91 em San Jose em 10 de outubro de 1991. Ele é baseado em especificações de soquete criadas pela NetManage e que foram colocadas em domínio público nesta reunião. Na época, o soquete NetManage era o único produto multi-threaded 100% baseado em DLL para Windows 3.0 disponível. A primeira edição da especificação foi de autoria de Martin Hall, Mark Towfiq da Microdyne (mais tarde Sun Microsystems ), Geoff Arnold da Sun Microsystems e Henry Sanders e J Allard da Microsoft , com assistência de muitos outros. Houve alguma discussão sobre a melhor forma de abordar os direitos autorais, propriedade intelectual e possíveis questões antitruste, e foi considerada a possibilidade de trabalhar por meio da IETF ou estabelecer uma fundação sem fins lucrativos. No final, foi decidido que a especificação seria simplesmente protegida pelos direitos autorais dos cinco autores como indivíduos (não afiliados).

Todos os desenvolvedores participantes resistiram por muito tempo ao encurtamento do nome para Winsock simples, já que havia muita confusão entre os usuários entre a API e o arquivo de biblioteca DLL (winsock.dll) que apenas expunha as interfaces WSA comuns para os aplicativos acima dele. Os usuários normalmente acreditam que apenas verificar se o arquivo DLL está presente em um sistema fornecerá suporte total ao protocolo TCP / IP.

Tecnologia

A especificação da API do Windows Sockets define duas interfaces: a API usada por desenvolvedores de aplicativos e a SPI , que fornece um meio para os desenvolvedores de software de rede adicionarem novos módulos de protocolo ao sistema. Cada interface representa um contrato. A API garante que um aplicativo em conformidade funcionará corretamente com uma implementação de protocolo em conformidade de qualquer fornecedor de software de rede. O contrato SPI garante que um módulo de protocolo em conformidade possa ser adicionado ao Windows e, assim, ser utilizável por um aplicativo compatível com API. Embora esses contratos fossem importantes quando o Windows Sockets foi lançado pela primeira vez, uma vez que os ambientes de rede exigiam suporte multiprotocolo (veja acima), eles agora são apenas de interesse acadêmico. Estão incluídas no Windows Sockets API versão 2.0 funções para usar IPX / SPX , embora o protocolo já estivesse obsoleto na época em que o WSA 2.0 foi lançado. A Microsoft distribuiu a pilha de protocolos TCP / IP com todas as versões recentes do Windows e não há alternativas independentes significativas. Nem houve interesse significativo na implementação de outros protocolos além do TCP / IP.

O código e o design do Windows Sockets são baseados em sockets BSD , mas fornece funcionalidade adicional para permitir que a API esteja em conformidade com o modelo de programação regular do Windows. A API do Windows Sockets cobriu quase todos os recursos da API dos sockets BSD , mas havia alguns obstáculos inevitáveis ​​que surgiram principalmente de diferenças fundamentais entre o Windows e o Unix (embora o Windows Sockets diferisse menos dos sockets BSD do que o último dos STREAMS ). Todas as chamadas de função na API começam com o moniker WSA , por exemplo, WSASend () para enviar dados em um soquete conectado.

No entanto, era um objetivo de design do Windows Sockets que deveria ser relativamente fácil para os desenvolvedores portar aplicativos baseados em soquete do Unix para o Windows. Não foi considerado suficiente criar uma API que só fosse útil para programas Windows recém-escritos. Por esse motivo, o Windows Sockets incluiu vários elementos que foram projetados para facilitar a portabilidade. Por exemplo, os aplicativos Unix foram capazes de usar a mesma variável errno para registrar os erros de rede e os erros detectados nas funções da biblioteca C padrão . Como isso não era possível no Windows, o Windows Sockets introduziu uma função dedicada, WSAGetLastError () , para recuperar informações de erro. Esses mecanismos foram úteis, mas a portabilidade de aplicativos permaneceu extremamente complexa. Muitos aplicativos TCP / IP originais foram implementados usando recursos de sistema específicos do Unix , como pseudo terminais e a chamada de sistema fork , e reproduzir essa funcionalidade no Windows era problemático. Em um tempo relativamente curto, a portabilidade deu lugar ao desenvolvimento de aplicativos Windows dedicados.

Especificações

  • A versão 1.0 (junho de 1992) definiu a operação básica do Winsock. Ele foi mantido muito próximo à interface existente dos soquetes Berkeley para simplificar a transferência de aplicativos existentes. Algumas extensões específicas do Windows foram adicionadas, principalmente para operações assíncronas com notificações baseadas em mensagens.
Embora o documento não limite o suporte a TCP / IP, TCP e UDP foram os únicos protocolos mencionados explicitamente. A maioria dos fornecedores oferece suporte apenas a TCP / IP, embora o Winsock da DEC inclua também suporte a DECNet .
  • A versão 1.1 (janeiro de 1993) fez muitas correções menores e esclarecimentos da especificação. A mudança mais significativa foi a inclusão da função gethostname () .
  • O Winsock 2 era uma extensão compatível com versões anteriores do Winsock 1.1. Ele adicionou suporte para resolução de nomes independente de protocolo, operações assíncronas com notificações baseadas em eventos e rotinas de conclusão, implementações de protocolo em camadas, multicast e qualidade de serviço . Ele também formalizou o suporte para vários protocolos, incluindo IPX / SPX e DECnet . A nova especificação permitia que os soquetes fossem opcionalmente compartilhados entre os processos, que as solicitações de conexão de entrada fossem aceitas condicionalmente e que certas operações fossem realizadas em grupos de soquetes em vez de soquetes individuais. Embora a nova especificação seja substancialmente diferente do Winsock 1, ela fornece compatibilidade de nível de origem e binário com a API do Winsock 1.1. Uma das adições menos conhecidas foi a API Service Provider Interface (SPI) e os Layered Service Providers .
  • As versões 2.0.x (maio de 1994 em diante) tinham status de rascunho interno e não foram anunciadas como padrões públicos.
  • A versão 2.1.0 (janeiro de 1996) foi o primeiro lançamento público da especificação Winsock 2.
  • A versão 2.2.0 (maio de 1996) incluiu muitas correções menores, esclarecimentos e recomendações de uso. Também foi a primeira versão a remover o suporte para aplicativos do Windows de 16 bits.
  • A versão 2.2.1 (maio de 1997) e a versão 2.2.2 (agosto de 1997) introduziram pequenos aprimoramentos de funcionalidade. Mecanismos foram adicionados para consultar e receber notificação de mudanças na rede e na configuração do sistema.
  • O IPv6 Technical Preview para Windows 2000 (dezembro de 2000) viu a primeira implementação do RFC 2553 (março de 1999, posteriormente obsoleto pelo RFC 3493 ), uma API independente de protocolo para resolução de nomes, que se tornaria parte do Winsock no Windows XP .

Atualizações no Windows 8

O Windows 8 inclui as extensões "RIO" (Registered IO) para Winsock. Essas extensões foram projetadas para reduzir a sobrecarga do usuário para a transição do modo kernel para o caminho de dados de rede e o caminho de notificação, mas usam o restante da pilha TCP e UDP normal do Windows (e usa placas de rede existentes). O caminho de configuração (por exemplo, a função "conectar") permanece inalterado em relação ao caminho Winsock normal.

Implementações

Implementações da Microsoft

  • A Microsoft não forneceu uma implementação do Winsock 1.0.
  • A versão 1.1 do Winsock foi fornecida em um pacote complementar (denominado Wolverine) para Windows para Workgroups (código denominado Snowball ). Era um componente integral do Windows 95 e do Windows NT das versões 3.5 e posteriores (a versão inicial comercialmente disponível do Windows NT, versão 3.1, incluía apenas uma implementação proprietária e bastante incompleta do TCP / IP com base no AT&T UNIX System V "STREAMS "API).
  • A versão 2.1 do Winsock foi fornecida em um pacote complementar para o Windows 95. Era um componente integral do Windows 98 , Windows NT 4.0 e todas as versões subseqüentes do Windows. (A Microsoft não forneceu implementações de Winsock 2 para Windows 3.x ou Windows NT 3.x.)
  • Versões recentes do Winsock 2.x foram fornecidas com novas versões do Windows ou como parte de service packs.
  • O Winsock 2 é extensível por um mecanismo conhecido como Layered Service Provider (LSP). Os LSPs Winsock estão disponíveis para uma ampla gama de finalidades úteis, incluindo controles dos pais da Internet, filtragem de conteúdo da Web, QoS , etc. A ordem das camadas de todos os provedores é mantida no Catálogo Winsock. Nas versões anteriores do Windows, a remoção de um LSP com erros poderia resultar na corrupção do catálogo Winsock no registro, resultando potencialmente na perda de toda a conectividade de rede . O Winsock no Windows XP Service Pack 2, no Windows Server 2003 Service Pack 1 e em todos os sistemas operacionais Windows posteriores tem a capacidade de autocorreção depois que o usuário desinstala tal LSP.

Outras implementações

  • Entre os outros fornecedores que oferecem pilhas TCP / IP e UDP / IP compatíveis com Winsock estão (em ordem alfabética) 3Com , Beame & Whiteside, DEC, Distinct, FTP Software , Frontier, IBM , Microdyne, NetManage , Novell , Sun Microsystems e Trumpet Software International.
  • Trumpet Winsock de Peter Tattam foi uma das poucas implementações do Winsock 1.0 que podiam ser instaladas no Windows 3.0 , que não tinha suporte interno para o Winsock. Trumpet também foi a implementação de shareware mais popular do Winsock para Windows 3.x. Trumpet Winsock 5.0 está disponível para Windows 95 / 98 e Windows NT e inclui um Winsock 1.1 compatível pilha IPv6 para esses sistemas operacionais.
  • O projeto Wine contém uma reimplementação compatível com código-fonte e binário do Winsock no topo da API de sockets BSD .

Veja também

Referências

links externos